我正在开发一个从数据库(MS Access)读取用户数据并将信息设置为变量的应用程序。sql 命令需要一个参数来检查数据库中的用户名,但是 OleDbDataReader 显示为空 (userData.HasRows)。
public void UpdatePage(string Username)
{
OleDbDataReader userData;
string sqlCmd = "SELECT * FROM [Profile Data] WHERE Username = ?";
TabPage profile = new TabPage();
using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source = LogIn Profiles.accdb;"))
{
OleDbCommand cmd = new OleDbCommand(sqlCmd, conn);
cmd.Parameters.AddWithValue("@Username", Username);
try
{
conn.Open();
userData = cmd.ExecuteReader();
if(userData.HasRows)
{
//Used for debugging
}
while (userData.Read()) //is not entering into the loop
{
userID = userData[0].ToString();
username = userData[1].ToString();
password = userData[2].ToString();
country = userData[3].ToString();
occupation = userData[4].ToString();
gender = userData[5].ToString();
}
userData.Close();
}
catch
{
MessageBox.Show("Error 3: Error to connect to database", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
当我删除参数并将 sqlCmd 设置为在数据库中设置名称 ("...WHERE Username = 'Mitchell'";) 时,将进入 while 循环并分配变量。惊人的。所以参数发生了一些事情。
此外,我已经确认在调用此方法之前用户数据已在数据库中,因此应该可以找到它。