2016-05-03 29 views
-2

试图运行该代码:SqlConnection的错误:附近有语法错误)'

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

并保持收到此错误消息:

Incorrect syntax near ')'

+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(); 
} 
+0

使用正确的命令类型而不是使用'EXEC'粘贴:) –

+0

更不用说参数化查询的好处了。 – Rawheiser

2

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

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

{2}后增加了一个额外)

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

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实际执行存储过程)。