【发布时间】:2021-03-30 23:35:18
【问题描述】:
在我的 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”非常相似,但预填充了所选数据网格视图行的值,也许我有在我学习 C# 时,这是第一个应用程序,在做同样的事情时搞砸了 下面是我的解决方案的链接,请帮助我。
【问题讨论】:
-
那么,您发布的代码甚至不是引发异常的代码吗?我建议您阅读规范的What is a NullReferenceException, and how do I fix it? 问题
-
嗨..我发布的代码是引发异常的代码,位于
lotNoTextBox.Text = cmd.ExecuteScalar().ToString(); -
所以 lotNoTextbox 为空??你能把断点放在那里并检查你的标签是否有值吗?
-
是的,它会在表单加载时为空..那是我试图通过从 sql 表中获取批号来用上面的代码填充它,即使有 try 块为什么它会导致我的应用程序崩溃,也可以请下载我的解决方案并在“fornewentry”中单击
LotNolinklabel并建议我有什么问题? -
"你能下载我的解决方案并点击"没办法,抱歉,没有人会在这里下载源代码并在自己的机器上编译。这不是 SO 的工作方式。您需要在帖子中提供所有必要的信息。因为您的帖子也可以作为未来有类似问题的读者的标志。请调试您的应用程序并告诉我们哪个值是
null。是cmd.ExecuteScalar()的结果吗?或事件你的lotNoTextbox?
标签: c# sql-server visual-studio winforms nullreferenceexception