0

我正在尝试使用已存在的值(在同一行中)更新我的代码,但出现以下错误。

这是代码:

string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Projects_2012\\Project_Noam\\Access\\myProject.accdb";
OleDbConnection myConnection = new OleDbConnection(connectionString);

string myInsertQuery = (String.Format("UPDATE tblUsers SET usersID='{0}', usersFirstName='{1}', " +
" usersLastName='{2}',usersPassword='{3}', usersAdress='{4}', usersMail  ='{5}' " +
" WHERE usersID='{6}'", idn, firstName.Text, lastName.Text, password.Text, adress.Text
, mail.Text,  idn));

OleDbCommand myCommand = new OleDbCommand(myInsertQuery);
myCommand.Connection = myConnection;
myConnection.Open();
myCommand.ExecuteNonQuery();
myCommand.Connection.Close();

这是错误:

System.Data.OleDb.OleDbException crossed a native / managed boundary
Message = mismatch in criteria expression
Source = Microsoft Office Access Database Engine
ErrorCode = -2147217913

我数据库中的参数定义如下:“usersID=number”,其余为文本。

4

1 回答 1

1

首先开始使用参数化查询。请参阅OleDbParameter。另请阅读有关SQL 注入的信息。当数据库期望一种类型的值而您提供其他类型的值时,通常会发生您遇到的错误。在您的情况下,您的用户 ID 看起来像是整数类型,并且由于您将其括在单引号中,因此您会收到此错误。尝试以下查询(更改的部分是userID={0})。编辑:同样应该在 where 子句中进行更改。

string myInsertQuery = (String.Format("UPDATE tblUsers SET usersID={0}, usersFirstName='{1}', " +
                " usersLastName='{2}',usersPassword='{3}', usersAdress='{4}', usersMail  ='{5}' " +
                " WHERE usersID={6}", idn, firstName.Text, lastName.Text, password.Text, adress.Text
                , mail.Text,  idn));
于 2012-05-15T17:38:37.930 回答