错误[42000] [Microsoft] [SQL Native Client] [SQL Server]关键字'SET'附近的语法不正确
我们正在使用SQL 2005 Express进行存储。错误[42000] [Microsoft] [SQL Native Client] [SQL Server]关键字'SET'附近的语法不正确
我正在使用ODBCCommand来更新我的表中的一些值,但得到下面的错误。表具有所有有效的列。
ERROR [42000] [Microsoft][SQL Native Client][SQL Server] Incorrect syntax near the keyword 'SET'.
所以请让我知道它有什么问题,查询在SQL浏览器中正常工作。
我的代码:
cmd = new OdbcCommand("UPDATE Transaction_Details SET SubscriptionCancelled=? WHERE SubscriptionID=?", conn);
cmd.Parameters.Add("@SubscriptionCancelled", OdbcType.VarChar, 255).Value = "Subscription Cancelled on " + DateTime.Now;
cmd.Parameters.Add("@SubscriptionID", OdbcType.VarChar, 255).Value = sSubscriptionID;
我以前没有使用过的OdbcCommand,但我猜你需要在命令语句单引号来界定你的字符串。
尝试改用:
cmd = new OdbcCommand("UPDATE Transaction_Details SET SubscriptionCancelled='?' WHERE SubscriptionID='?'", conn);
我是很确定这是正确的答案,因为你试图更新的列是一个varchar,并且需要使用普通T-SQL中的单引号。 –
变化
UPDATE Transaction_Details SET SubscriptionCancelled=? WHERE SubscriptionID=?
到
UPDATE Transaction_Details SET [email protected] WHERE [email protected]
这就是我原先想的但你不需要的。参数'?'的顺序... –
BTW:伙计们,如果你使用SSMS并且没有下载Mladen Prajdic的SSMS工具包,我强烈建议你这样做,它非常非常有用.... –
由于SQL不知道你的参数类型,因为你正在构建为T -SQL语句而不是使用参数化查询,可能需要在你的字符串周围引用引号?
我还没有机会测试这个,但这是一个快速建议尝试。
什么是您的ODBCCommand对象的CommandType? –
为什么你使用OdbcCommand而不是SqlCommand? –
我想指出,我没有必要将“订阅已取消”作为存储在SubscriptionCanceled列中的数据的一部分。如果该列已经被称为SubscriptionCancelled(这个名称中已经有含义),我会创建一个日期时间列并存储日期;否则,您将来在查询该表时将难以查找订阅被取消时的日期。只是一个建议。 – Icarus