在插入数据库时​​将空字符串设置为null

时间:2014-02-07 14:59:12

标签: c# .net string sql-insert dbnull

我无法为这个问题找到合适的解决方案,我知道这很简单,但我忘记了怎么做。我有一个带有一个textfield字段的表单,用户不需要填写。我想在数据库中插入NULL,而不是它当前正在执行的0。不过,我不确定我错过了什么。文本框名为taxRateTxt,我目前的功能不适合我:

try
{
    using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["AbleCommerce"].ToString()))
    {
        cn.Open();
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = cn;

        cmd.Parameters.Add(new SqlParameter("@FIPSCountyCode", countyCodeTxt.Text));
        cmd.Parameters.Add(new SqlParameter("@StateCode", stateCodeList.SelectedValue));
        cmd.Parameters.Add(new SqlParameter("@CountyName", countyNameTxt.Text));

        string taxStr = taxRateTxt.Text;
        //test for an empty string and set it to db null
        if (taxStr == String.Empty)
        {
            taxStr = DBNull.Value;

        }

        cmd.Parameters.Add(new SqlParameter("@TaxRate", taxStr));

        if (AddBtn.Visible == true)

            cmd.CommandText = addQuery;

        if (EditBtn.Visible == true)
        {
            cmd.CommandText = editQuery;
        }

        cmd.ExecuteNonQuery();
        cn.Close();
    }

我在这里缺少什么?

2 个答案:

答案 0 :(得分:20)

删除此代码块

string taxStr = taxRateTxt.Text;
//test for an empty string and set it to db null
if (taxStr == String.Empty)
{
    taxStr = DBNull.Value;

}

并更改此

cmd.Parameters.Add(new SqlParameter("@TaxRate", taxStr));

到这个

cmd.Parameters.Add(new SqlParameter("@TaxRate", string.IsNullOrEmpty(taxRateTxt.Text) ? (object)DBNull.Value : taxRateTxt.Text));

答案 1 :(得分:4)

传入Convert.DBNull(或DBNull.Value)即可。

http://msdn.microsoft.com/en-us/library/system.convert.dbnull(v=vs.110).aspx

当然,您必须先检查字符串值,然后再将其传入。