首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLParameter错误语法

SQLParameter错误语法
EN

Stack Overflow用户
提问于 2014-12-10 19:35:03
回答 2查看 590关注 0票数 0

我有两个地方需要使用SQLParameter来解析SQL。一个工作,一个不工作,我不明白为什么第二个不工作。

第一项工作如下:

代码语言:javascript
复制
   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));

这是可行的。最重要的是,我读过的大多数教程都说,我不需要在参数名前面有一个@,只有在命令文本内部,我需要在参数名前面有一个@

我试图运行的第二个命令如下:

代码语言:javascript
复制
  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之外的任何地方都这样说。

为什么第二个命令会抛出无效的语法错误?

EN

回答 2

Stack Overflow用户

发布于 2014-12-10 19:42:32

我读过的大多数教程都说,我不必在新SqlParameter中的参数名前面有一个@,

用于C#的SqlParameter代码不关心您是否将@放在前面,或者在将其添加到Parameters集合时,它将为您在幕后放置一个@

对于不正确的查询,您实际上将在sql中将3个字符串、两个'%'和参数添加到一起。我还改变了添加参数以显式设置数据类型的方式,最好用字符串来实现。

代码语言:javascript
复制
  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";
票数 2
EN

Stack Overflow用户

发布于 2014-12-10 19:37:48

试试这个:

代码语言:javascript
复制
 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%"));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27409377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档