无法在c#/SqlDataReader问题中创建此登录表单
我正在尝试制作一个带有登录屏幕的windows窗体应用程序,如果用户名和密码正确,Form3将打开Form1 代码链接到数据库 代码如下:无法在c#/SqlDataReader问题中创建此登录表单,c#,sql,windows-forms-designer,sqldatareader,C#,Sql,Windows Forms Designer,Sqldatareader,我正在尝试制作一个带有登录屏幕的windows窗体应用程序,如果用户名和密码正确,Form3将打开Form1 代码链接到数据库 代码如下: private void button1_Click(object sender, EventArgs e) { string u_id = textBox1.Text; string u_pwd = textBox2.Text; SqlConnection conn = new
private void button1_Click(object sender, EventArgs e)
{
string u_id = textBox1.Text;
string u_pwd = textBox2.Text;
SqlConnection conn = new SqlConnection("Data Source=mmtsql.XXX.XXXXX.ac.uk;Initial Catalog=mmt12-186;User ID=XXXXXX;Password=XXXXXX");
conn.Open();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = ("SELECT * FROM UsersData WHERE User = '" + textBox1.Text + "'");
cmd.Parameters.AddWithValue("un", u_id);
SqlDataReader reader = cmd.ExecuteReader();
if (reader.Read() == false)
{
label3.Text = "Invalid Username or Password !";
return;
}
string realpwd = reader.GetString(0);
if (u_pwd == realpwd)
{
Form1 formload = new Form1();
formload.Show();
}
}
每次运行此代码时,我都会收到以下行的异常:
string realpwd = reader.GetString(0);
例外情况是:
当不存在数据时尝试读取无效
UsersData
表有3列,Id、User、Password
感谢回答问题的“Alfred Sanz”,现在的问题是没有错误,但没有显示数据,就好像按钮1_单击没有方法一样,当前代码是:
private void button1_Click(object sender, EventArgs e)
{
string u_id = textBox1.Text;
string u_pwd = textBox2.Text;
SqlConnection conn = new SqlConnection("Data Source=mmtsql.XX.XXX.ac.uk;Initial Catalog=XXXXXXX ;User ID=XXXX;Password=XXXXX");
conn.Open();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = ("SELECT * FROM UsersData WHERE User = @un");
cmd.Parameters.AddWithValue("@un", u_id);
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
if (reader["Password"].ToString() == u_pwd)
{
Form1 formload = new Form1();
formload.Show();
}
else
{
label3.Text = "Invalid Username or Password !";
}
}
您已经将用户的
值设置为“+textBox1.Text+”“
,但是您也设置了一个值cmd.Parameters.AddWithValue(“un”,u_id);
,如果它确实不存在,请将代码更改为
cmd.CommandText = "SELECT * FROM UsersData WHERE User = @un";
cmd.Parameters.AddWithValue("@un", u_id);
您还可以将读卡器部分更改为:
while (reader.Read())
{
if (reader["Password"].ToString() == u_pwd.Text
{
Form1 formload = new Form1();
formload.Show();
}
else
{
label3.Text = "Invalid Username or Password !";
}
}
您期望发生什么,以及实际发生了什么?从您的代码来看,您所做的只是显示一个表单,除了在显示表单之前对返回的数据进行快速密码测试之外,您没有做任何事情。