这是两个设置表
我想创建类似“用户将在文本框中键入他们的USER_ID
和USER_PWD
的内容。如果用户成功登录,则会显示“ HI + PATNAME”。
到目前为止,我已经创建了此代码,但无法正常工作。
string sqlStr = "Select patpro.'PATNAME' FROM patpro,useform where USER_ID=@name and USER_PWD=@password and useform.'USER_ID' = patpro.'USERID'";
cmd.Parameters.AddWithValue("@name", txtValue.Text);
cmd.Parameters.AddWithValue("@password", txtPassword.Password);
cmd.CommandText = sqlStr;
cmd.Connection = connection;
connection.Open();
MySqlDataReader login = cmd.ExecuteReader();
if (login.HasRows)
{
login.Read();
string name = (login["USER_ID"].ToString());
txtAssignID1.Text = "Login verified. Hi, " + name + "\n";
}
答案 0 :(得分:1)
据我所知,您正在尝试使用login["USER_ID"].ToString()
,其中USER_ID
是当前SELECT
语句中不存在的列定义。因此,您应该添加SELECT
结果中定义的列名,例如login["PATNAME"]
,并使用正确的INNER JOIN
语句代替:
string sqlStr = @"SELECT patpro.PATNAME FROM patpro INNER JOIN useform
ON useform.USER_ID = patpro.USERID
WHERE useform.USER_ID = @name AND useform.USER_PWD = @password";
cmd.Parameters.AddWithValue("@name", txtValue.Text);
cmd.Parameters.AddWithValue("@password", txtPassword.Password);
cmd.CommandText = sqlStr;
cmd.Connection = connection;
connection.Open();
MySqlDataReader login = cmd.ExecuteReader();
if (login.HasRows)
{
// read value inside the loop, because MySqlDataReader is forward-only
while (login.Read())
{
string name = login["PATNAME"].ToString();
txtAssignID1.Text = "Login verified. Hi, " + name + "\n";
}
}
附加说明:最好对using
,MySqlConnection
和MySqlCommand
使用MySqlDataReader
语句,以确保在提取后立即处置MySQL连接对象查询结果。