通过Windows窗体输入空值并将值插入数据库

时间:2015-12-24 16:03:24

标签: c# sql sql-server database

我有一个将输入的值插入数据库的表单。输入值的数据类型为float。我试图弄清楚如何在字段中接受空值,然后使用C#将其插入到SQL Server数据库中作为null。

表单运行完全按照我的意愿运行,直到我运行它而不在表单中输入任何内容。当我尝试将表单值(作为Text)转换为float时,我得到一个未处理的异常对话框。我使用的代码如下:

float? decNum = Convert.ToSingle(txtDecimalNum.Text);

我认为它失败了,因为我试图将空值转换为浮点数(如果不正确,请告诉我)。如果是这种情况,那么我很难过如何处理这个问题。

背后的代码在c#中,数据库是SQL Server 2014。

提前感谢您提供的任何帮助。

以下是sstan要求的完整代码块。谢谢!

         private void btnEnter_Click(object sender, EventArgs e)
        {

            float? decNum = string.IsNullOrEmpty(txtDecimalNum.Text)
                ? (float?)null : Convert.ToSingle(txtDecimalNum.Text);

            string connection = null;
            connection = "Data Source=homeoffice\\sqlexpress;Initial Catalog=testApp;Integrated Security=True";
            SqlConnection conn;
            conn = new SqlConnection(connection);

            string sqlQuery;
            sqlQuery = "Insert into testTable(decNum1) values(@decNum)";

            conn.Open();
            SqlCommand cmdIns = new SqlCommand(sqlQuery, conn);

            cmdIns.Parameters.AddWithValue("@decNum", SqlDbType.Float).Value = decNum;
            cmdIns.ExecuteNonQuery();

3 个答案:

答案 0 :(得分:1)

在尝试转换字段之前,您始终可以检查该字段是否为空:

float? decNum = string.IsNullOrEmpty(txtDecimalNum.Text) 
                    ? (float?)null
                    : Convert.ToSingle(txtDecimalNum.Text);

答案 1 :(得分:1)

您想要查看TryParse系列函数。例如:

float decNum;

if (!float.TryParse(txtDecimalNum.Text, out decNum))
{
    //The value in the box isn't a float.  Enter a null value
}
else
{
    //You now have access to the float value 'decNum'
}

这样做的好处是,如果表单提交的内容不是有效的浮点数,TryParse会为您处理错误检查。

答案 2 :(得分:0)

如果您记录txtDecimalNum.Text的值会发生什么?

您可以节省一些时间进行调试并切换到此版本: https://msdn.microsoft.com/en-us/library/system.single.tryparse(v=vs.110).aspx

但是,您可能仍需要追踪数据以意外形式返回的原因。