登录时获取特定列的值(C# Mysql)
Posted
技术标签:
【中文标题】登录时获取特定列的值(C# Mysql)【英文标题】:Get Value of specific Column while Login (C# Mysql) 【发布时间】:2020-05-14 13:36:46 【问题描述】:我现在正在尝试登录。我看了一些视频,找到了一个好方法。每个用户都有一个 ID、用户名和密码。我想获取刚刚登录的用户的 id 并将其保存为 Integer。我也尝试了ExecuteReader
,但我得到了一个异常(mysql.Data.MySqlClient.MySqlException)。
我当前的代码是:
try
if (sqlCon.State == ConnectionState.Closed)
sqlCon.Open();
string query = "SELECT COUNT(1) FROM Users_Table WHERE Username=@Username AND Password=@Password;";
MySqlCommand sqlCmd = new MySqlCommand(query, sqlCon);
sqlCmd.Parameters.AddWithValue("@Username", maintxtbox1.Text);
sqlCmd.Parameters.AddWithValue("@Password", Hashed_Password);
int count = Convert.ToInt32(sqlCmd.ExecuteScalar());
if (count == 1)
//Login correct
else
//Login incorrect
catch
//Exception
finally
sqlCon.Close();
ExecuteReader 的尝试:
try
if (sqlCon.State == ConnectionState.Closed)
sqlCon.Open();
string query = "SELECT id,Username,Password FROM Users_Table WHERE Username=@Username AND Password=@Password;";
MySqlCommand sqlCmd = new MySqlCommand(query, sqlCon);
sqlCmd.Parameters.AddWithValue("@Username", maintxtbox1.Text);
sqlCmd.Parameters.AddWithValue("@Password", Hashed_Password);
MySqlDataReader datareader = sqlCmd.ExecuteReader();
if (datareader.HasRows)
MessageBox.Show("Test: " + datareader.GetString("id"));
else
//Login incorrect
catch
//Exception
finally
sqlCon.Close();
我希望有人可以帮助我。提前谢谢你。
【问题讨论】:
string query = "SELECT COUNT(1) FROM Users_Table WHERE Username=@Username AND Password=@Password;";
你为什么要计算这样的查询的结果数?如果有匹配的结果,您是否希望得到 1 作为结果?
【参考方案1】:
尝试使用读取方法:
if(datareader.Read())
MessageBox.Show("Test: "+datareader.GetString(0));
编辑: 为了充分利用和处置资源,我建议在 using 块中使用 MySqlDataReader,例如
using(MySqlDataReader reader = new sqlCmd.ExecuteReader())
if(reader.Read())
MessageBox.Show("Test: "+reader.GetString(0));
【讨论】:
如果您想遍历多个结果,也可以使用while( reader.Read() ) ...
。
您好,感谢您的回答。我在上面的代码 sn-p 中使用 DataReader 进行了尝试,但它只有一个异常我也尝试使用 reader.GetString(0)
而不是 reader.GetString("id")
,但它不起作用。我不能使用while,因为我需要刚刚登录的用户的ID,而不是每个ID。你知道我可以如何修复异常或者你有另一个解决方案吗?提前致谢【参考方案2】:
我自己找到了我的问题的解决方案。我在ìf(datareader.HasRows)
查询中忘记了while(datareader.Read())
。这是我的工作代码:
try
if (sqlCon.State == ConnectionState.Closed)
sqlCon.Open();
string query = "SELECT * FROM Users_Table WHERE username=@Username AND password=@Password;";
MySqlCommand sqlCmd = new MySqlCommand(query, sqlCon);
sqlCmd.Parameters.AddWithValue("@Username", maintxtbox1.Text);
sqlCmd.Parameters.AddWithValue("@Password", Hashed_Password);
MySqlDataReader datareader = sqlCmd.ExecuteReader();
if (datareader.HasRows)
while (datareader.Read())
UserID = datareader.GetInt32("id");
else
//Incorrect Password
catch
//Error
finally
sqlCon.Close();
【讨论】:
以上是关于登录时获取特定列的值(C# Mysql)的主要内容,如果未能解决你的问题,请参考以下文章