0

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

我认为问题在于如何处理参数并与数据库进行比较,但不知道如何修复它。

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

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>

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

4

2 回答 2

1

顺序很重要。由于 DLOOKUP 函数,我在您的查询user中“认为”首先被调用。correctUser

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

您不需要单引号参数:

WHERE [User] = @user";

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

于 2013-02-20T18:10:04.030 回答
0

你需要改变一下,试试:

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();
于 2013-02-21T00:04:30.013 回答