c# - C# 字符串中的 SQL 语法错误

标签 c# sql sql-server webforms ado.net

我正在从 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,应该可以。

如果是这种情况,我应该将参数转换成什么?如果不是,到底哪里出了问题?

最佳答案

尝试在escape the breaklines 的字符串前添加一个@ , 例如:

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]

关于c# - C# 字符串中的 SQL 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25647290/

相关文章:

c# - 在不从 LCID 创建 RegionInfo 的情况下比较文化区域

c# - 使用 lambda 作为方法的 Delegate.CreateDelegate 产生 "method argument length mismatch"异常

sql - 比较postgres数据库中的两列

sql - 使用 SELECT INTO 创建一个新表并添加一个主键

sql-server - 有没有办法只存储一次字段值?

mysql - 错误代码 : 1215. 无法添加外键约束

c# - 使用二进制搜索或并行编程在 C# 中搜索 SQL Server 数据库

C# - 如何从具有复杂类型的列表中获取项目

c# - 事件目录 findone() 方法

mysql - 需要有关多个数据库插入操作的建议