SQLParameter 语法不正确
本文关键字:不正确 语法 SQLParameter | 更新日期: 2023-09-27 18:33:49
我有 2 个地方需要使用 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));
这行得通。最重要的是,我读过的大多数教程都说我不必在new SqlParameter
内的参数名称前面有一个@
,只有在命令文本本身内部,我才需要在参数名称前面有一个@
。
我尝试运行的第二个命令如下:
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 以外的任何地方都另有说明。
第二个命令会抛出无效语法错误的任何原因?
您的 LIKE 语句必须位于单引号内
SELECT * FROM Customers WHERE City LIKE '%s%';
我读过的大多数教程都说我不必在新 SqlParameter 中的参数名称前面有一个 @,
SqlParameter
的 C# 代码不在乎在将@
添加到 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";
试试这个:
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%"));