C#SQL查询在SSMS中工作,但不在C#

时间:2017-04-18 14:40:46

标签: c# sql sql-server sql-server-2012

嘿,我在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中时,它运行得很好。

我会失踪什么?

1 个答案:

答案 0 :(得分:7)

参数是值占位符,它们不能是sql子句,语句等。这就是它失败的原因,因为你不能将SET子句的整个字符串作为参数传递。

例如,这是参数的使用方式。

UPDATE 
  tT 
SET 
  RequestType = @requestType,
  TripLead = @tripLead,
  Category = @category
  -- etc
WHERE 
  RequestID = @requestID

在旁注中,最好将实例包装在类型实现using的{​​{1}}块中。这可确保即使在出现异常时也始终释放资源。使用数据库时,这是必须的,因为它可以保证在垃圾处理运行之前连接不会保持打开状态(这是非确定性的)。

IDisposable