-1

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

1 に答える 1

1

MSDN HEREの ExecuteScalar ヘルプを見ると、

結果セットが空の場合の戻り値は null 参照であることがわかります。

あなたのコードでは、ユーザー名やパスワードが間違っていると、値を取得できません。つまり、null 参照が返されます。ここで、null 値を整数に変換しようとすると、エラーが発生します。

あなたがすべきことは、system.object変数で戻り値を取得し、それが null かどうかを確認することです。そうでない場合は、整数に変換してください。それ以外の場合は、「ユーザーが見つかりません」というメッセージが表示されます。

于 2014-11-09T10:16:17.037 に答える