Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# JET OLEDB参数如何将字符串与Access DB中的文本字段进行比较_C#_Database_Ms Access 2007_Oledb_Jet - Fatal编程技术网

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

C# JET OLEDB参数如何将字符串与Access DB中的文本字段进行比较,c#,database,ms-access-2007,oledb,jet,C#,Database,Ms Access 2007,Oledb,Jet,我在C#中使用JET OLEDB连接进行以下更新查询,连接到ms access DB文件。查询无法更改字段,它运行正常,但只更改了0行 我认为问题在于如何处理参数并与DB进行比较,但不知道如何修复它 “用户”列设置为文本。我有一个insert语句,它以与参数相同的方式完美地设置 com.CommandText = "UPDATE [ExamMaster] SET [User] = (DLookup('LName', 'Users', 'ID' = '@correctUser') WHERE [

我在C#中使用JET OLEDB连接进行以下更新查询,连接到ms access 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>
它会很好地更新数据库。我错过了什么? 更新: 带单引号或带单引号没有区别,重新排列参数顺序也不起作用

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

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();

尝试删除引号并使用字符串文字:
@“UPDATE[ExamMaster]SET[User]=(DLookup(“LName”、“Users”、“ID=@correctUser”),[User]=@User”;
我发现Access不支持命名参数,但仍会接受它们,但您必须确保添加它们的顺序与查询相同