ExecuteScalar() error
本文关键字:error ExecuteScalar | 更新日期: 2023-09-27 18:29:41
我想用C#创建一个登录表单。如果用户名和密码是正确的,我不会得到错误,但如果它是错误的,那么我会在这行得到错误:
int count = Convert.ToInt32(cmd.ExecuteScalar().ToString());
登录表单代码:
if (textBox1.Text != "" & textBox2.Text != "")
{
conn.Open();
SqlCeCommand cmd = new SqlCeCommand("SELECT id FROM users WHERE Login = '" + textBox1.Text + "' AND Password = '" + textBox2.Text + "'", conn);
int count = Convert.ToInt32(cmd.ExecuteScalar().ToString());
if (count > 0)
{
SqlCeDataReader reader = cmd.ExecuteReader();
reader.Read();
int logged_id = Convert.ToInt16(reader["id"]);
SqlCeCommand cmd1 = new SqlCeCommand("SELECT Login, Sex, Weight, Height, Age, PhyActi FROM vartotojai WHERE ID = '"+ logged_id +"'",conn);
SqlCeDataReader reader1 = cmd1.ExecuteReader();
reader1.Read();
textBox9.Text = Convert.ToString(reader1["Sex"]);
textBox10.Text = Convert.ToString(reader1["Weight"]);
textBox12.Text = Convert.ToString(reader1["Height"]);
textBox11.Text = Convert.ToString(reader1["Age"]);
textBox13.Text = Convert.ToString(reader1["Phyacti"]);
panel1.Visible = false;
dataGridView1.Visible = false;
MessageBox.Show("Loggen In!");
toolStripStatusLabel1.Text = "Welcome, " + Convert.ToString(reader1["Login"]);
}
else
MessageBox.Show("User Not Found!");
conn.Close();
}
如果您查看MSDN HERE 中的ExecuteScalar帮助
然后您会注意到,如果resultset为空,则返回值是null引用。
在您的代码中,当用户名和/或密码错误时,您将不会得到任何值,即返回空引用。现在,您正试图将一个null值转换为Integer,结果出现错误。
您应该做的是在system.object
变量中获取返回值,并检查它是否为null。如果没有,则将其转换为Integer,否则显示消息"User not found"。