首页 > 解决方案 > 即使存在 try 块,从 SQL 表中获取数据也会引发空异常

问题描述

在我的 WinForms 应用程序中,我有以下代码,它在单击按钮时从 SQL Server 表中获取批号。

private void getlotnumbers()
{
    try
    {
        SqlConnection con = new SqlConnection(cs);
        SqlCommand cmd;
        con.Open();
        string s = "select LotNumber from Lot_Numbers where CoilNumber = @p1";
        cmd = new SqlCommand(s, con);
        cmd.Parameters.AddWithValue("@p1", coilNoTextBox.Text);
        cmd.CommandType = CommandType.Text;
        int i = cmd.ExecuteNonQuery();
        lotNoTextBox.Text = cmd.ExecuteScalar().ToString();
        con.Close();
    }
    catch(Exception ex)
    {
        MessageBox.Show("Lot Number Not Found:" + ex.Message.ToString(), "Lot Number",
            MessageBoxButtons.OK, MessageBoxIcon.Error);
    }        
}

该函数直到昨天都运行良好,但从今天开始,即使存在 try 块,它也会抛出异常并停止应用程序。

System.NullReferenceException:“对象引用未设置为对象的实例。”

我不知道为什么会发生这种情况,但是我添加了另一个名为“formedit”的表单来编辑现有记录,这与“FornewEntry”非常相似,但是预填充了选定的datagridview行的值,也许我搞砸了虽然这样做是第一个应用程序,因为我正在学习 C# 下面是我的解决方案的链接,请帮助我。

标签: c#sql-servervisual-studiowinformsnullreferenceexception

解决方案


string s = "select LotNumber from Lot_Numbers where CoilNumber = @p1"; 正在尝试执行此语句 lotNoTextBox.Text = cmd.ExecuteScalar().ToString();

var lotNumber= cmd.ExecuteScalar()==null?"Handle empty case or throw exception with custom message":cmd.ExecuteScalar().ToString();
lotNoTextBox.Text =lotNumber.ToString();

推荐阅读