C#字符串中存在SQL语法错误
本文关键字:语法 错误 SQL 存在 字符串 | 更新日期: 2023-09-27 18:20:27
我正在从web表单运行一个查询来更新记录。由于我只是在学习C#,所以我使用的是命令字符串,而不是存储过程。
我的更新方法如下:
public void updateOne()
{
string commandText = "update INVOICE SET <Redacted> = @<Redacted>,
Supplier = @Sup, SupplierName = @SupN, NetTotal = @Net,
VATTotal = @VAT, InvoiceDate = @InvDt "
<needed a line break here, which is why I split the string again>
+ "WHERE K_INVOICE = @K_INV";
using (SqlConnection dbConnection = new SqlConnection
(conParams.connectionString))
{
SqlCommand cmd = new SqlCommand(commandText, dbConnection);
cmd.Parameters.Add("@K_INV", SqlDbType.Int);
cmd.Parameters["@K_INV"].Value = @K_INV;
cmd.Parameters.AddWithValue("@<Redacted>", @<Redacted>.ToString());
cmd.Parameters.AddWithValue("@Sup", @Sup.ToString());
cmd.Parameters.AddWithValue("@SupN", @SupN.ToString());
cmd.Parameters.AddWithValue("@Net", @Net.ToString());
cmd.Parameters.AddWithValue("VAT", @VAT.ToString());
cmd.Parameters.AddWithValue("@InvDt", @InvDt.ToString());
try
{
dbConnection.Open();
cmd.ExecuteNonQuery();
}
catch (Exception e)
{
errorString = e.Message.ToString();
}
}
}
Catch
因SQL错误而暂停(SET附近的语法不正确),我认为出现此问题是因为我将参数转换为字符串。第一个参数是Int,应该是OK
如果是这种情况,我应该将参数转换为什么?如果没有,到底出了什么问题?
尝试在字符串之前添加一个@
以转义特征线,例如:
string commandText = @"update INVOICE SET [Redacted] = @Redacted,
Supplier = @Sup, SupplierName = @SupN, NetTotal = @Net,
VATTotal = @VAT, InvoiceDate = @InvDt "
+ "WHERE K_INVOICE = @K_INV";
在parameterName参数中,您可以为示例添加@,但不能添加值,只能添加变量
cmd.Parameters.AddWithValue("@Redacted", redacted.ToString());
尝试在数据库中使用一些值执行此查询,以检查是否所有内容都正确。如果有保留字,可以在表名和列名中使用[brackets]
。
我建议您阅读这篇关于.AddWithValue()
:危险的博客文章
- 我们可以停止使用AddWithValue了吗
代替
cmd.Parameters.AddWithValue("@Sup", @Sup.ToString());
你应该使用
cmd.Parameters.Add("@Sup", SqlDbType.VarChar, 50).Value = ...(provide value here)..;
(你在C#中的变量真的叫@SupN
吗??相当不寻常和令人困惑…)
我建议您始终为定义的任何字符串参数定义显式长度