嘿,我在C#程序中使用以下查询:
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["sqlDevConnection"].ConnectionString);
SqlCommand command = new SqlCommand(Q, con);
con.Open();
command.Parameters.AddWithValue("@val0", buildTblVal.ToString());
command.Parameters.AddWithValue("@val1", recordID);
command.ExecuteNonQuery();
command.Dispose();
con.Close();
似乎我收到附加信息的错误:关键字' WHERE'。附近的语法错误到达 command.ExecuteNonQuery();
查询如下所示:
UPDATE
[tTrip]
SET
@val0
WHERE
RequestID = @val1
当它填充时,它看起来像这样:
UPDATE
tT
SET
RequestType=75,
TripLead='Barker, Bob',
Category=2,
RequestDate='2016-12-15',
ApproxDate='2016-12-15',
AtC='yes',
TStatus='New',
LastModifiedBy='bob\barker',
LastModifiedDate='2017-04-18 10:24 AM'
WHERE
RequestID = 779
我收到错误:
其他信息:关键字' WHERE'附近的语法不正确。
但是,当我复制相同的查询并将其粘贴到SSMS中时,它运行得很好。
我会失踪什么?
答案 0 :(得分:7)
参数是值占位符,它们不能是sql子句,语句等。这就是它失败的原因,因为你不能将SET子句的整个字符串作为参数传递。
例如,这是参数的使用方式。
UPDATE
tT
SET
RequestType = @requestType,
TripLead = @tripLead,
Category = @category
-- etc
WHERE
RequestID = @requestID
在旁注中,最好将实例包装在类型实现using
的{{1}}块中。这可确保即使在出现异常时也始终释放资源。使用数据库时,这是必须的,因为它可以保证在垃圾处理运行之前连接不会保持打开状态(这是非确定性的)。
IDisposable