【问题标题】:C# OleDb sql "UPDATE, WHERE" exceptionC# OleDb sql“更新,WHERE”异常
【发布时间】:2015-10-12 03:51:19
【问题描述】:

所以我有以下代码:

public static void WriteToDatabase(string sql,string value,int Amount, string URL)
    {
int times = int.Parse(((dr)[dt.Columns[1]]).ToString()) + Amount;
                    sql = "UPDATE Words "+
                          " SET Amount = " + times + 
                          " WHERE Word = " + value + 
                          " AND Website = " + URL + ";";
myAdp = new OleDbDataAdapter();
myAdp.InsertCommand = new OleDbCommand(sql, myConn);
                    myAdp.InsertCommand.ExecuteNonQuery();
}

应该更新预制 Microsoft Access 2007 文件中的值, 并且每当我运行代码时,它们都会发生 OleDb 异常:

在 System.Data.dll 中发生了“System.Data.OleDb.OleDbException”类型的未处理异常, 查询表达式中缺少运算符的语法错误:'Word = meta AND Website = http://www.twitch.tv/directory'。” "

所以我在网上搜索了可能发生的常见错误,但我找不到任何错误, 如果有人能在 sql 中找到错误,我会很高兴。 谢谢。

【问题讨论】:

  • 您需要在字符串文字周围加上单引号:... where word = 'MyWord' and ... ALSO:如果这是用于 Web 应用程序,您绝对应该使用参数(而不是“原始插入”):blogs.msdn.com/b/sqlphp/archive/2008/09/30/…

标签: c# sql oledb


【解决方案1】:

您绝对应该为此使用参数化查询。这是传递值的正确方法。

您的问题是您的查询缺少单引号:

"UPDATE Words "+
                      " SET Amount = " + times + 
                      " WHERE Word = '" + value + "'" +
                      " AND Website = '" + URL + "'"

但让我再次强调,虽然这应该可行,但您应该修复代码以便它使用参数

【讨论】:

  • @EliranZiv 直到您在 IE O'Brian 中获得带有单引号的 value。听取建议并学习如何进行参数化查询。
【解决方案2】:

假设 Word 字段是一个 varchar,您忘记了在变量周围加上必要的单引号。 " WHERE Word = '" + 值 + "'"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多