数据库INNER JOIN

时间:2018-08-06 04:32:07

标签: c# mysql database

这是两个设置表

登录表 enter image description here

用户名 enter image description here

我想创建类似“用户将在文本框中键入他们的USER_IDUSER_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";
}

1 个答案:

答案 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";
    }
}

附加说明:最好对usingMySqlConnectionMySqlCommand使用MySqlDataReader语句,以确保在提取后立即处置MySQL连接对象查询结果。