2012-05-15 121 views
0

我試圖用已經存在的值(在同一行中)更新我的代碼,我得到下面的錯誤。通過SQL更新數據庫

這裏是代碼:

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 =號」,其餘的爲文本。

+3

哇,與此SQL注入的可能性... – Tejs

+2

請在使用參數化查詢一些研究(認爲:OleDbParameter),並保存自己的一些未來心痛。 –

+1

由於你的用戶ID是數字字段,你可以使它像'UPDATE tblUsers SET usersID = {0}' – Rahul

回答

1

首先開始使用參數化查詢。請參閱OleDbParameter。還閱讀了關於SQL Injection。您遇到的錯誤通常發生在數據庫期望某種類型的值時您正在提供其他類型的值。在你的情況下,它看起來像你的用戶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)); 
+1

'userID = {0})'正確,但同樣的改變也應該在'where'中;像'WHERE usersID = {6}'。爲什麼不改變呢? – Rahul

+1

@Rahul,abs。對,錯過了 – Habib

+0

非常感謝你,@Rahul太:)我很愚蠢,錯過了! – Noam650