C# 通过windows窗体输入空值并将值插入数据库
我有一个表单,可以将输入的值插入数据库。输入值的数据类型为float。我试图找出如何在字段中接受null值,然后使用C#as null将其插入SQL Server数据库 表单完全按照我希望的方式运行,直到我运行它而没有在表单中输入任何内容为止。当我尝试将表单值(作为文本)转换为float时,会出现一个未处理的异常对话框。我使用的代码如下: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? 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!这正是我想要的。我已将其添加到我的产品中应用程序,它就像一个魅力。