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インジェクションについても読んでください。通常、発生するエラーは、データベースが1つのタイプの値を期待していて、他のタイプの値を提供している場合に発生します。この場合、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));
于 2012-05-15T17:38:37.930 に答える