【发布时间】:2021-06-12 05:29:15
【问题描述】:
我编写了以下代码来访问我的数据库 (SQL) 并将其中的值显示到我的 WinForm 上的文本框中。但是,当正在读取的数据库值为空值时,我遇到了问题。当我按下触发以下代码的按钮时,我该如何正确处理它,以免出现以下错误:
错误
无法将对象或类型“System.DBnNull”转换为“Sytem.String”
代码:
//Set stock number as the lookup
int stocknumber = int.Parse(tbStockNumber.Text);
//Database Connection
SqlConnection conn = new SqlConnection(myconnstrng);
SqlCommand command = new SqlCommand("SELECT * FROM Wholegoods_History WHERE Stock_Number = " + stocknumber + " ", conn);
try
{
conn.Open();
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
//Enter data into textboxes
tbModel.Text = (string)reader["Model"];
cmbBrand.Text = (string)reader["Brand"];
tbDescription.Text = (string)reader["Description"];
}
reader.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
conn.Close();
我假设当文本框为空并且我尝试将记录保存到数据库或更新记录时,我会遇到同样的问题。
【问题讨论】:
-
下面的帖子有例子展示了如何
IsDbNull()优雅地处理你遇到的情况:stackoverflow.com/questions/5409936/… -
@DavidTansey 这真的很有用,谢谢。
-
您的代码的其他问题:1. 使用参数,不要连接/插入查询值,否则您将面临 SQL 注入 2. 将连接、命令和阅读器置于
using阻塞 3. 避免select *,指定你需要的列 4. 连接打开时不要阻塞等待用户或IO -
@Fergie35 欢迎来到 StackOverflow #SOReadyToHelp
标签: c# sql visual-studio winforms