提问人:RaviKumar 提问时间:12/21/2020 最后编辑:Dale KRaviKumar 更新时间:12/21/2020 访问量:737
从 SQL 表中获取数据,即使存在 try 块,也会引发 null 异常
Get data from SQL table throwing null exception even when try block is present
问:
在我的 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#的第一个应用程序 以下是我的解决方案的链接,请帮助我。
答:
2赞
Jameel Nazir
12/21/2020
#1
您正在尝试执行此语句,我认为您的 lotNumber 列值为 null,当您
execute it 将返回 null,所以如果你能处理它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();
评论
0赞
RaviKumar
12/21/2020
谢谢你的回答,我已经用try块处理了异常,但还是走出了整个应用程序,为什么会这样?
0赞
Jameel Nazir
12/21/2020
因为您的表达式返回 null 值,并且您正在执行 null。ToString() 在 null 的情况下 c# 返回错误“对象引用未设置为对象的实例”。
2赞
Usama Aziz
12/21/2020
#2
为什么不在 SQL 查询中处理 null 值?
string s = "select ISNULL(LotNumber, -1) from Lot_Numbers where CoilNumber = @p1";
// returns -1 when LotNumber is not found
评论
0赞
RaviKumar
12/21/2020
你好。。谢谢你的建议..会尝试同样的方法。
评论
lotNoTextBox.Text = cmd.ExecuteScalar().ToString();
LotNolinklabel
null
cmd.ExecuteScalar()
lotNoTextbox