从 SQL table 获取数据即使存在 try 块也会抛出 null 异常

Get data from SQL table throwing null exception even when try block is present

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

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: 'Object reference not set to an instance of an object.'

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

您正在尝试执行此语句 string s = "select LotNumber from Lot_Numbers where CoilNumber = @p1"; 我认为您的 lotNumber 列值为空,当您 执行 lotNoTextBox.Text = cmd.ExecuteScalar().ToString(); 它将 return null 所以如果你能处理它

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

为什么不在您的 SQL 查询中处理空值?

string s = "select ISNULL(LotNumber, -1) from Lot_Numbers where CoilNumber = @p1";
// returns -1 when LotNumber is not found