我有一个将输入的值插入数据库的表单。输入值的数据类型为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();
答案 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
但是,您可能仍需要追踪数据以意外形式返回的原因。