我有两个地方需要使用SQLParameter来解析SQL。一个工作,一个不工作,我不明白为什么第二个不工作。
第一项工作如下:
SqlCommand getShopDbNameCommand = new SqlCommand("SELECT TOP 1 [mappeddbName] FROM [ECM].[dbo].[EcmShop]" +
"WHERE [LicencePassCode] = @licCode AND [iPadLocation] = @shopId", this.mainConnection);
getShopDbNameCommand.Parameters.Add(new SqlParameter("licCode", currUser.LicCode));
getShopDbNameCommand.Parameters.Add(new SqlParameter("shopId", currUser.ShopID));这是可行的。最重要的是,我读过的大多数教程都说,我不需要在参数名前面有一个@,只有在命令文本内部,我需要在参数名前面有一个@。
我试图运行的第二个命令如下:
string getAuthCommandText = "SELECT * FROM [" + shopDbName + "].[dbo].[MessageLink]" +
"WHERE [objectname] LIKE %" + "@compareStringA"+ "% OR [objectname] LIKE %" + "@compareStringB" +"%";
SqlCommand getAuthCommand = new SqlCommand(getAuthCommandText, this.mainConnection);
getAuthCommand.Parameters.Add(new SqlParameter("compareStringA", "ABRAUTH"));
getAuthCommand.Parameters.Add(new SqlParameter("compareStringB", "ABRSAUTH"));这不起作用,并引发无效的语法错误。使用断点,看起来该命令仍然试图将文本@compareString字符串传递给SQL,这就是导致问题的原因。我在SOF上看到其他文章说在定义new SqlParameter对象时使用文字参数名称(意思包括@),但是在SoF之外的任何地方都这样说。
为什么第二个命令会抛出无效的语法错误?
发布于 2014-12-10 19:42:32
我读过的大多数教程都说,我不必在新SqlParameter中的参数名前面有一个@,
用于C#的SqlParameter代码不关心您是否将@放在前面,或者在将其添加到Parameters集合时,它将为您在幕后放置一个@。
对于不正确的查询,您实际上将在sql中将3个字符串、两个'%'和参数添加到一起。我还改变了添加参数以显式设置数据类型的方式,最好用字符串来实现。
string getAuthCommandText = "SELECT * FROM [" + shopDbName + "].[dbo].[MessageLink]" +
"WHERE [objectname] LIKE ('%' + @compareStringA + '%') OR [objectname] LIKE ('%' + @compareStringB +'%')";
SqlCommand getAuthCommand = new SqlCommand(getAuthCommandText, this.mainConnection);
getAuthCommand.Parameters.Add("@compareStringA", SqlDbType.VarChar, 20).Value = "ABRAUTH"; //I had to guess on your datatype, I just did varchar(20), change as appropriate.
getAuthCommand.Parameters.Add("@compareStringB", SqlDbType.VarChar, 20).Value = "ABRSAUTH";发布于 2014-12-10 19:37:48
试试这个:
string getAuthCommandText = "SELECT * FROM [" + shopDbName + "].[dbo].[MessageLink] " +
"WHERE [objectname] LIKE " + "@compareStringA"+ " OR [objectname] LIKE " + "@compareStringB" +"";
SqlCommand getAuthCommand = new SqlCommand(getAuthCommandText, this.mainConnection);
getAuthCommand.Parameters.Add(new SqlParameter("compareStringA", "%ABRAUTH%"));
getAuthCommand.Parameters.Add(new SqlParameter("compareStringB", "%ABRSAUTH%"));https://stackoverflow.com/questions/27409377
复制相似问题