JET OLEDB参数如何将字符串与Access DB中的文本字段进行比较

本文关键字:文本 字段 比较 DB Access 参数 OLEDB 字符串 JET | 更新日期: 2023-09-27 18:00:15

我在C#中使用JET OLEDB连接,连接到一个ms访问DB文件,得到了以下更新查询。查询无法更改字段,它正确运行,但只更改了0行。

我认为问题是如何处理参数并与DB进行比较,但不知道如何修复它

"用户"列设置为文本。我有一个insert语句,它以与参数相同的方式完美地设置。

com.CommandText = "UPDATE [ExamMaster] SET [User] =  (DLookup('LName', 'Users', 'ID' = '@correctUser') WHERE [User] = '@user'";
com.Parameters.AddWithValue("@correctUser", correctUser);
com.Parameters.AddWithValue("@user", userName);

如果我不为where子句使用参数,只将其插入命令字符串中,如下所示:

WHERE [User] = '"+userName+"'";</code>

它会很好地更新数据库。我在这里错过了什么?更新:带或带单引号没有区别,重新排列参数的顺序也不起作用。

JET OLEDB参数如何将字符串与Access DB中的文本字段进行比较

顺序很重要。我"认为"在您的查询中,由于DLOOKUP函数,usercorrectUser之前首先被调用。

com.Parameters.AddWithValue("@user", userName);
com.Parameters.AddWithValue("@correctUser", correctUser);

您不需要单独引用参数:

WHERE [User] = @user";

我猜DLOOKUP也不需要单引号,如果字段名称有空格或是保留字(可能是[User]),只需要[括号]。

您需要稍微改变一下,请尝试:

OleDbConnection cn = new OleDbConnection(aconnectionstring);
cn.Open();
//testing
int correctUser = 1;
string userName = "1";
OleDbCommand com = new OleDbCommand();
com.Connection = cn;
//You cannot have a parameter in DLookUp
com.CommandText = "UPDATE [ExamMaster] SET [User] = " +
   "DLookup('LName', 'Users', 'ID = " + correctUser + "') WHERE [User] = @user";
com.Parameters.AddWithValue("@user", userName);
//You must execute the query
com.ExecuteNonQuery();