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

ExecuteScalar() error

如果您查看MSDN HERE 中的ExecuteScalar帮助

然后您会注意到,如果resultset为空,则返回值是null引用。

在您的代码中,当用户名和/或密码错误时,您将不会得到任何值,即返回空引用。现在,您正试图将一个null值转换为Integer,结果出现错误。

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