sqlconnection错误:')'附近的语法不正确

时间:2016-05-03 19:32:33

标签: c# sql asp.net sqlconnection

尝试运行此代码:

commandObject.CommandText = string.Format("EXEC spUpdateAvailPlaces {0}, {1}, {2})", updatedAvailability, clocationID, cWeekNumber);

并继续收到此错误消息:

  

')'

附近的语法不正确

4 个答案:

答案 0 :(得分:2)

SQL字符串末尾有一个括号,将其删除:

commandObject.CommandText = string.Format("EXEC spUpdateAvailPlaces {0}, {1}, {2}", updatedAvailability, clocationID, cWeekNumber);

答案 1 :(得分:2)

正如上面的答案所述,另外一个")"在给出错误的查询结束时,您可以通过删除它们来解决问题,我不认为String.Format将是构建SQL查询的好方法。

所以我建议你使用参数化查询,这样就可以指定传递值的数据类型。这将对您有所帮助:

using (SqlCommand cmd = new SqlCommand("spUpdateAvailPlaces", con))
{
  cmd.CommandType = CommandType.StoredProcedure;
  cmd.Parameters.Add("@updatedAvailability", SqlDbType.VarChar).Value = updatedAvailability;
  cmd.Parameters.Add("@clocationID", SqlDbType.VarChar).Value = clocationID;
  cmd.Parameters.Add("@cWeekNumber", SqlDbType.VarChar).Value = cWeekNumber;
  con.Open();
  cmd.ExecuteNonQuery();
}

答案 2 :(得分:0)

您在)后添加了额外的{2}

尝试: commandObject.CommandText = string.Format("EXEC spUpdateAvailPlaces {0}, {1}, {2}", updatedAvailability, clocationID, cWeekNumber);

答案 3 :(得分:0)

额外)

您目前有一个额外的右括号作为格式化字符串的结尾:

"EXEC spUpdateAvailPlaces {0}, {1}, {2})"

应该是:

"EXEC spUpdateAvailPlaces {0}, {1}, {2}"

考虑使用参数化

值得注意的是,如果您正在构建查询并执行它,您可能会考虑使用参数化,这可以避免任何类型的语法问题(并且通常有助于SQL注入,这不应该是一个大问题因为您正在使用存储过程。

// Set your query
commandObject.CommandText = "spUpdateAvailPlaces @availability, @location, @week";
// Ensure you are executing it as a stored procedure (important)
commandObject.CommandType = CommandType.StoredProcedure;
// Add your parameters
commandObject.Parameters.AddWithValue("@availability",updatedAvailability);
commandObject.Parameters.AddWithValue("@location",locationId);
commandObject.Parameters.AddWithValue("@week",cWeekNumber);

在这个问题上设置参数将允许.NET确定应该如何使用它们。此外,将CommandType属性设置为CommandType.StoredProcedure将连接其他一些内容(即表明这不是查询,并且实际通过EXEC执行存储过程)。