【问题标题】:Handling Null Display & Saving to SQL处理空显示和保存到 SQL
【发布时间】: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


【解决方案1】:

其中一列为空。所以你必须像这样使用阅读器:

if ( reader["Model"] != DBNull.Value) tbModel.Text = reader["Model"].ToString();

【讨论】:

  • 请不要忘记接受答案,如果它有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-10
  • 2017-12-26
  • 1970-01-01
  • 2014-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多