【发布时间】:2016-02-25 06:28:33
【问题描述】:
我正在尝试使用 C# 从 winform 文本框将 NULL 值插入数字数据库字段。我正在创建一个应用程序来将生产数据输入数据库。数量变量设置为 int?接受 null ,因为如果一件设备坐下,就没有值可以输入。数据库字段的默认值也设置为 Null。我如何能够将文本框留空并在数据库字段中输入 Null?我已缩减代码以包含受影响的内容。
private void btnInsert_Click(object sender, EventArgs e)
{
int? runQty = 0;
int? scrapQty = 0;
try
{
dbConn = new OleDbConnection();
dbConn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ch + strDataFilePath + ch;
dbConn.Open();
sql = "INSERT INTO DailyProduction (runQty, scrapQty)" +
"Values (@runQty, @scrapQty)";
dbCmd = new OleDbCommand(sql, dbConn);
if (runQty.HasValue)
{
runQty = Convert.ToInt16(this.runQuatity.Text);
dbCmd.Parameters.Add("@runQty", OleDbType.Numeric).Value = runQty;
}
else
{
runQty = null;
dbCmd.Parameters.Add("@runQty", OleDbType.Numeric).Value = runQty;
}
if (scrapQty.HasValue)
{
scrapQty = Convert.ToInt16(this.scrapQuantity.Text);
dbCmd.Parameters.Add("@scrapQty", OleDbType.Numeric).Value = scrapQty;
}
else
{
scrapQty = null;
dbCmd.Parameters.Add("@scrapQty", OleDbType.Numeric).Value = scrapQty;
}
dbCmd.Connection.Close();
dbConn.Close();
MessageBox.Show("Record Entered!");
}
catch (Exception err)
{
MessageBox.Show("Error: " + err.Message.ToString());
}
}
【问题讨论】:
-
runQty.HasValue没有意义,因为您还没有给runQty一个值。此时它将始终为 0。应该是!String.IsNullOrEmpty(this.runQuatity.Text)。其他 IF 也是如此 -
social.msdn.microsoft.com/Forums/en-US/… 表示将值设置为
DBNull.Value。 -
Convert.ToInt16() 是您的问题所在。按照设计,它将 null 转换为 0。您需要检查runQuantity.Text是否为空,然后将DBNull设置为参数值。
-
不添加参数默认为null。
标签: c# database winforms nullable