C# 通过windows窗体输入空值并将值插入数据库

C# 通过windows窗体输入空值并将值插入数据库,c#,sql,sql-server,database,C#,Sql,Sql Server,Database,我有一个表单,可以将输入的值插入数据库。输入值的数据类型为float。我试图找出如何在字段中接受null值,然后使用C#as null将其插入SQL Server数据库 表单完全按照我希望的方式运行,直到我运行它而没有在表单中输入任何内容为止。当我尝试将表单值(作为文本)转换为float时,会出现一个未处理的异常对话框。我使用的代码如下: float? decNum = Convert.ToSingle(txtDecimalNum.Text); 我认为它失败了,因为我试图将空值转换为浮点值(如

我有一个表单,可以将输入的值插入数据库。输入值的数据类型为float。我试图找出如何在字段中接受null值,然后使用C#as null将其插入SQL Server数据库

表单完全按照我希望的方式运行,直到我运行它而没有在表单中输入任何内容为止。当我尝试将表单值(作为文本)转换为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();

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

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

您需要查看
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将为您处理错误检查。

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

您可能可以在调试过程中节省一些时间并切换到此版本:


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

谢谢sstan。在我的代码中已经包含了这一点,但仍然需要在数据库中插入null值。当我运行整个应用程序时,我得到一个未经处理的异常,异常如下:'附加信息:参数化查询'(@decNum nvarchar(4000))插入testTable(decNum1)值(@ D)希望参数“@ DENNUM”,这是不提供的。“我对我从这里去的地方感到困惑。这完全是一个不同的问题,而且您还没有提供相关代码来诊断这个特定的问题。考虑编辑您的帖子来显示您是如何将信息保存到数据库的。事实上,通过错误消息ge,我觉得这与空值无关。但请务必显示代码。sstan,我编辑了原始问题,以包含按钮单击事件的代码块。谢谢!我将问题标记为重复。您可以在另一个线程中找到答案。谢谢sstan!这非常有效。快速提问。问题是什么您试图转换的实际数字?大多数情况下,您最好使用十进制-它的范围较小(尽管仍然较大),但与float不同,它实际上是精确的。商店价格(例如)作为浮点数,当您对它们执行更多操作时,您将开始发现值漂移。@eftpotrm,我最初将其作为十进制,但在尝试不同的操作时,我将其更改为浮点数。我将按照您的建议将其更改回浮点数。谢谢!谢谢Trent Sartain!这正是我想要的。我已将其添加到我的产品中应用程序,它就像一个魅力。