我目前正在登录页面上工作,该页面可以将不同的角色(家长和老师)重定向到不同的页面。但是,我的Microsoft SQL Server数据库中有3个表:
[帐户]
AID(PK)|用户名|密码
[account_role]
角色ID(PK)(FK)|援助(PK)(FK)
[角色]
角色ID(PK)| RName
我试图验证不同的用户,一旦他们单击登录按钮并将其重定向到其他页面。我认为问题出在这里:
...//val df1
...//val df2
...//val df3
...//val finalDf
finalDf.show()
+---------+--------------------+-------+
| userId | area | flag |rowId|
+---------+--------------------+-------+
|123 |[Blah1...| true| 0|
|234 |[Blah2...| true| 1|
|216 |[Blah3...| true| 2|
|123 |[blah4...| false| 6|
|345 |[Blah5...| true| 7|
|677 |[Blah6...| false| 8|
表[role]中的RName列与[account]不在同一表中,那么如何更改它以使其起作用?请帮助
答案 0 :(得分:1)
您必须join表
SELECT r.RName
FROM
account a
INNER JOIN account_role ar
ON a.AID = ar.AID
INNER JOIN role r
ON ar.RoleID = r.RoleID
WHERE
a.username = @user
最好使用命令参数
roleCom .Parameters.AddWithValue("@user", TextBoxUser.Text);
请注意,使用命令参数时,SQL文本不包含任何字符串定界符。参数机制负责转义嵌入的撇号,格式化日期等。它还可以防止SQL Injection。
答案 1 :(得分:1)
public string GetRole(string userName)
{
using (SqlConnection dbConn = new SqlConnection(_connectionString))
{
dbConn.Open();
try
{
var query = @"select r.rname from role r
join account_role ar
on r.roleid = ar.roleid
join account a
on a.aid = ar.aid
where a.username = ""@userName""";
using (SqlCommand dbCommand = new SqlCommand(query, dbConn))
{
dbCommand.Parameters.Add("@userName", SqlDbType.VarChar).Value = userName;
SqlDataReader reader = dbCommand.ExecuteReader();
if (reader.Read())
{
var result = reader.GetString(0);
}
}
}
catch (SqlException)
{
throw; // bubble up the exception and preserve the stack trace
}
dbConn.Close();
return result;
}
}