数据库内部联接

htrmnn0y  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(307)

这是两张摆好的table
登录表

用户名

我想创建一个类似于用户输入 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";
}
ogq8wdun

ogq8wdun1#

据我所知,你想用 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连接对象。

相关问题