错误[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; 
+0

什么是您的ODBCCommand对象的CommandType? –

+1

为什么你使用OdbcCommand而不是SqlCommand? –

+0

我想指出,我没有必要将“订阅已取消”作为存储在SubscriptionCanceled列中的数据的一部分。如果该列已经被称为SubscriptionCancelled(这个名称中已经有含义),我会创建一个日期时间列并存储日期;否则,您将来在查询该表时将难以查找订阅被取消时的日期。只是一个建议。 – Icarus

我以前没有使用过的OdbcCommand,但我猜你需要在命令语句单引号来界定你的字符串。

尝试改用:

cmd = new OdbcCommand("UPDATE Transaction_Details SET SubscriptionCancelled='?' WHERE SubscriptionID='?'", conn); 
+0

我是很确定这是正确的答案,因为你试图更新的列是一个varchar,并且需要使用普通T-SQL中的单引号。 –

变化

UPDATE Transaction_Details SET SubscriptionCancelled=? WHERE SubscriptionID=? 

UPDATE Transaction_Details SET [email protected] WHERE [email protected] 
+0

这就是我原先想的但你不需要的。参数'?'的顺序... –

+0

BTW:伙计们,如果你使用SSMS并且没有下载Mladen Prajdic的SSMS工具包,我强烈建议你这样做,它非常非常有用.... –

由于SQL不知道你的参数类型,因为你正在构建为T -SQL语句而不是使用参数化查询,可能需要在你的字符串周围引用引号?

我还没有机会测试这个,但这是一个快速建议尝试。