通过 C# 代码将 Null(空文本框)值插入 SQL Server 时出错

本文关键字:插入 SQL Server 出错 文本 代码 Null 通过 | 更新日期: 2023-09-27 18:33:02

我正在使用C#代码将一些值插入SQL Server。我已经在数据库中创建了RemainingPayment列作为数据类型Decimal(18,2)并且还允许 null。但是当我从 C# 执行查询时,它抱怨:

附近的语法不正确,靠近

请务必注意,我只收到数据类型Decimal(18,2) RemainingPayment列的错误。对于另一个数据类型nvarchar列,它工作正常。

这是我的代码:

try
{
    using (SqlConnection con = new SqlConnection(ConStr))
    {
        string query = "INSERT INTO tblExpEntry(RemainingPayment, CHQNo, TransactionID) VALUES (" + tbRemainingPayment.Text + ", '"+tbCHQNo.Text+"', '"+lbl_ID.Text+"')";
        using (SqlCommand cmd = new SqlCommand(query,con))
        {
            cmd.CommandType = CommandType.Text;
            con.Open();
            cmd.ExecuteNonQuery();
            MessageBox.Show("Transaction Successful.", "Created");
            generateTransactionID();
        }
    }
}
catch (Exception ex) 
{
    MessageBox.Show(ex.Message);  
}

通过 C# 代码将 Null(空文本框)值插入 SQL Server 时出错

应使用参数来执行 sql 命令,而不是字符串串联。参数包含一个 DataType 字段,该字段显式定义传递给数据库引擎的类型,并且不允许从字符串转换以引入无效的字符。例如,您的区域设置可以将逗号定义为小数点的分隔符,但您的数据库需要一个点。用于将文本框值连接到字符串的 ToString 方法的隐式调用会产生无效的输入(当然,文本框中也会缺少一个值)

使用参数,您的代码将是

decimal remainingPayment;
if(!decimal.TryParse(tbRemainingPayment.Text, out remainingPayment))
{
    // Add a message for your user and return, or continue 
    // inserting the default value for a decimal (that's zero)
}
using (SqlConnection con = new SqlConnection(ConStr))
{
    string query = @"INSERT INTO tblExpEntry
    (RemainingPayment , CHQNo, TransactionID)
     VALUES(@total, @chq, @transid)";
    using (SqlCommand cmd = new SqlCommand(query,con))
    {
        con.Open();
        cmd.Parameters.Add("@total", SqlDbType.Decimal).Value = remainingPayment;
        cmd.Parameters.Add("@chq", SqlDbType.NVarChar).Value =  tbCHQNo.Text;
        cmd.Parameters.Add("@transid", SqlDbType.NVarChar).Value =  lbl_ID.Text;
        cmd.ExecuteNonQuery();
        MessageBox.Show("Transaction Successful.", "Created");
        generateTransactionID();
    }
}

如果问题是文本框为空,那么这就是您的答案。您只需将tbRemainingPayment.Text放入一个字符串中,该字符串通常会产生...(12.23,"随便","随便")但如果文本框为空,你会得到......(,"随便","随便")

将文本

值解析为小数,因此如果它是空白的,您将获得零而不是文本错误。

另一个原因,你永远不应该创建这样的SQL!