C# OleDbDataReader:参数查询无法检索数据



我正在开发一个应用程序,该应用程序从数据库(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 设置为具有设置名称时("...其中用户名 = '米切尔'";)在数据库中,然后输入 while 循环并分配变量。棒。所以参数发生了一些事情。

此外,我已经确认在调用此方法之前用户数据在数据库中,因此应该找到它。

我所知,访问不支持命名参数,并且在"parm"与您打算更新的列同名的情况下使用"@parm"可能会通过暗示来混淆它......

set ColumnA = ColumnA

与您实际提供的参数相比。 您拥有的"?"作为参数的序号占位符是正确的,所以我会尝试从

"@Username" to just "parmUserName"

不要使用"@"符号

因此,经过数小时的尝试,我找到了解决方案,但是我不完全确定为什么它会起作用。我必须将 OleDbConnection 的数据源更改为直接文件路径,而不是相对路径。

在此方法之前是另一个将数据插入数据库的方法,并且只有在程序关闭后,才能使用此UpdatePage方法访问它。不完全确定为什么,但是我也必须在另一种方法中使用完整地址。

相关内容

  • 没有找到相关文章

最新更新