通过SQL更新数据库

时间:2012-05-15 17:26:29

标签: c# sql textbox oledb

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

这是代码:

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”,其余为文本。

1 个答案:

答案 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));