Win Form登录时出错

时间:2013-12-13 14:31:11

标签: winforms login combobox

     private void Button1Click(object sender, EventArgs e)
     {
         var dt = new DataTable();
         const string Connectionstring = "Data Source=GARETH-PC1;Initial  Catalog=Genres;Integrated Security=True";
        using (var con = new SqlConnection(Connectionstring))
        {
            con.Open();
                var query = "Select Username From Login Where Username ='" + ComboBox1.SelectedText + "' Password ='" + textBox2.Text + "'";
                using (var sda = new SqlDataAdapter(query, con))
                {

                sda.Fill(dt);
            }

        }

        if (dt.Rows[0].ItemArray.GetValue(0).ToString() == "1")

        {
            Hide();

            var ss = new Main();
            ss.Show();
        }
        else
        {
            MessageBox.Show("Invalid Username or Password");
        }
    }

if(dt.Rows [0] .ItemArray.GetValue(0).ToString()==“1”) - 返回一个错误,表示表中没有任何内容......但是有什么建议吗?

2 个答案:

答案 0 :(得分:0)

也许你可以尝试这样:

dt.Rows[0]["ColumnName"].ToString()

这对我有用。

答案 1 :(得分:0)

我会以这种方式更改您的代码。 首先,更改为参数化查询而不是字符串连接(Sql注入和解析) 其次,使用count属性检查是否找到了记录

 private void Button1Click(object sender, EventArgs e)
 {
     var dt = new DataTable();
     const string Connectionstring = "Data Source=GARETH-PC1;Initial  Catalog=Genres;Integrated Security=True";
    var query = "Select Username From Login Where Username =@uname AND Password=@pwd";
    using (var con = new SqlConnection(Connectionstring))
    using (var cmd = new SqlCommand(query, con)
    {
        con.Open();
        cmd.Parameters.AddWithValue("@uname", ComboBox1.SelectedText);
        cmd.Parameters.AddWithValue("@pwd", textBox2.Text);
        using (var sda = new SqlDataAdapter(cmd))
        {
            sda.Fill(dt);
        }
    }
    if (dt.Rows.Count > 0)
    {
        Hide();

        var ss = new Main();
        ss.Show();
    }
    else
    {
        MessageBox.Show("Invalid Username or Password");
    }
}

作为旁注,在数据库中以明文形式存储密码是一个非常糟糕的主意。您应该考虑使用HASH并将其存储而不是普通密码。