我需要检查记录是否保存到数据库中。如果它保存在数据库中打开另一个表单,则显示一条消息,表明它不在数据库中
如果记录不在数据库中,我会收到此错误Object reference not set to an instance of an object.
这是我的代码,请帮我在这里找到错误:
string cmdStr = "Select NO from COM_LIST_EXPORT where NO = '" + txtNO.Text + "'";
SqlCommand cmd = new SqlCommand(cmdStr, CN);
int count = (int)cmd.ExecuteScalar();
if (count == Convert.ToInt32(txtNO.Text))
{
Archive_Sader dd = new Archive_Sader();
dd.Show();
}
else
{
MessageBox.Show("please save first");
}
答案 0 :(得分:4)
ExecuteScalar
返回null
。
因此,在尝试投射null -> int
时,您会获得NullReferenceException
试试这个。
int count = Convert.ToInt32(cmd.ExecuteScalar());
当参数为Convert.ToInt32
时, 0
将返回null
。
答案 1 :(得分:1)
返回值
结果集中第一行的第一列,或null 如果结果集为空,则引用。
这就是为什么当结果没有行时,您实际上会尝试将null
转换为Int32
。
看起来你需要更改你的行;
int count = Convert.ToInt32(cmd.ExecuteScalar());
当参数为0
时,Convert.ToInt32
会返回null
。
返回值
32位有符号整数,等于值或 如果value为null,则为0(零)。
你应该总是使用parameterized queries
。这种字符串连接对SQL Injection
攻击开放。
例如;
string cmdStr = "Select NO from COM_LIST_EXPORT where NO = @NO";
SqlCommand cmd = new SqlCommand(cmdStr, CN);
cmd.Parameters.AddWithValue("@NO", txtNO.Text);
...