我正在尝试使用已存在的值(在同一行中)更新我的代码,我收到以下错误。
这是代码:
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”,其余为文本。
答案 0 :(得分:1)
首先开始使用参数化查询。见OleDbParameter。另请阅读SQL Injection。当数据库期望一种类型的值并且您正在提供其他类型时,通常会发生您遇到的错误。在您的情况下,您的userID看起来像是整数类型,因为您将它包含在单引号中,您将收到此错误。请尝试以下查询(已更改的部分为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));