ExecuteScalar()错误

时间:2014-11-09 10:07:08

标签: c# sql database executescalar

我想用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();
}

1 个答案:

答案 0 :(得分:1)

如果您查看MSDN HERE

中的ExecuteScalar帮助

然后你会注意到,如果结果集为空,返回值是一个空引用。

在您的代码中,当用户名和/或密码错误时,您没有获得任何值,即返回空引用。现在,您正在尝试将空值转换为整数并得到错误。

你应该做的是你应该在system.object变量中获得返回值并检查它是否为空。如果没有,则将其转换为Integer,否则显示消息“User not found。”。