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”) - 返回一个错误,表示表中没有任何内容......但是有什么建议吗?
答案 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并将其存储而不是普通密码。