我想用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();
}
答案 0 :(得分:1)
如果您查看MSDN HERE
中的ExecuteScalar帮助然后你会注意到,如果结果集为空,返回值是一个空引用。
在您的代码中,当用户名和/或密码错误时,您没有获得任何值,即返回空引用。现在,您正在尝试将空值转换为整数并得到错误。
你应该做的是你应该在system.object
变量中获得返回值并检查它是否为空。如果没有,则将其转换为Integer,否则显示消息“User not found。”。