首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择抛出OleDbException的位置

选择抛出OleDbException的位置
EN

Stack Overflow用户
提问于 2012-04-04 22:03:21
回答 2查看 97关注 0票数 1

我已经为此挣扎了半个小时了。

代码语言:javascript
复制
using(con)
{
   con.Open();    

   foreach(string category in categories)
   { 
      string select_cmd = "SELECT FileName FROM Songs WHERE MusicCategory=\'" + category + "\'";
      var cmd = new OleDbCommand(select_cmd, con);
      using(OleDbDataReader reader = cmd.ExecuteReader())
      {
          while(reader != null && reader.Read()
          {
             // do some work
          }
      }
   }
}

查询表达式'1stMusicType = 'Ε.60's & 70's(Α)'‘中出现OleDbException:语法错误(缺少运算符)。看在上帝的份上,我不明白为什么会抛出异常。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-05 15:30:35

当我回到家测试参数化命令时,斗争仍在继续。最终,我找到了导致异常的原因。

OleDbCommand应该使用'?‘而不是一个命名的'@param‘参数,但我让它在两种情况下都能工作。原来抛出异常是因为我没有将MusicCategory放在方括号中。

sql查询的工作语法为:

代码语言:javascript
复制
string select_cmd = "SELECT FileName FROM Song WHERE [MusicCategory] = ?"
var cmd = new OleDbCommand(select_cmd, con);
cmd.Parameters.AddWithValue("param", category); 
票数 1
EN

Stack Overflow用户

发布于 2012-04-04 22:05:59

类别名称中的撇号(')中断了查询中的字符串:

代码语言:javascript
复制
SELECT FileName FROM Songs WHERE MusicCategory='Ε.60's & 70's(Α)'
                                                    ^ this breaks out of the string

所以你需要对这些字符进行转义

代码语言:javascript
复制
MusicCategory=\'" + category.Replace(@"'", @"''") + ...

但是,通过使用参数可以很容易地解决这个问题并使其更加健壮,这是将用户输入值放入查询中的建议。

代码语言:javascript
复制
string select_cmd = "Select FileNAme From songs where MusicCategory=@MusicCategory";
var cmd = new OleDbCommand(select_cmd, con);
var prm = new OleDbParameter("@MusicCategory", category);
cmd.Parameters.Add(prm);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10012721

复制
相关文章

相似问题

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