2013-04-04 57 views
0

我一直在靠牆敲打我的頭,並不斷髮現模糊的錯誤「UPDATE語句中的語法錯誤」。任何人都可以告訴我我的更新聲明有什麼問題嗎?在Access數據庫c中更新一個布爾型字段#

try 
{ 
    OleDbConnection ECon = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\zoofari\zoofari\zoofari\bin\Debug\MainData.accdb"); 
    OleDbDataAdapter EdAdapt = new OleDbDataAdapter(); 
    EdAdapt.UpdateCommand = new OleDbCommand("UPDATE tbl_Results SET @Q1-Easy WHERE Username = '" +txtUname.Text+ "'", ECon); 
    EdAdapt.UpdateCommand.Parameters.Add("@Q1-Easy", OleDbType.Boolean).Value = true; 

    ECon.Open(); 
    EdAdapt.UpdateCommand.ExecuteNonQuery(); 
    ECon.Close(); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.Message); 
} 

回答

2

要更新的字段名稱在哪裏? 的更新命令所需的語法是

UPDATE <tablename> SET <Field> = <value> WHERE <keyfield> = <value> 

您的查詢,而不是有沒有現場更新

EdAdapt.UpdateCommand = new OleDbCommand("UPDATE tbl_Results" + 
         " SET FIELDNAME= @Q1-Easy WHERE Username = '" +txtUname.Text+ "'", ECon); 
           ^^^^^^^^^^   

還要注意的是,你不應該使用字符串連接來構建SQL命令。
始終使用參數化查詢。 (您已在此查詢參數,爲什麼不使用一個又一個?)

眼看低於約字段名稱您的評論你的代碼可以通過這種方式來

string sqlText = "UPDATE tbl_Results SET [Q1-Easy] = ? WHERE Username = ?"; 
using(OleDbConnection ECon = new OleDbConnection(.....)) 
using(OleDbCommand cmd = new OleDbCommand(sqlText, ECon)) 
{ 
    ECon.Open(); 
    cmd.Parameters.Add("@Q1Value", OleDbType.Boolean).Value = true; 
    cmd.Parameters.Add("@uname", OleDbType.VarChar).Value = txtUname.Text; 
    cmd.ExecuteNonQuery(); 
} 

我已在使用加改變聲明以確保連接已關閉並在完成時處理,並且我在方括號中使用了字段名稱,因爲我不確定-是否被接受爲字段名稱的有效字符。

還要注意在OleDb中的參數佔位符可能是一個簡單的?但將它們添加到文本中佔位符的顯示順序相當重要。 OleDb不能通過名稱識別參數佔位符。

+0

您好Steve,Q1-Easy是字段名稱,我試圖將其值從false更改爲true。這是否是錯誤的方式? – LHammy 2013-04-04 20:30:26

+0

對不起並不意味着發佈這麼快,這個更新表達是否正確? (更新tbl_Results「+」SET @ Q1-Easy = true其中用戶名='「+ txtUname.Text +」'「,ECon); – LHammy 2013-04-04 20:38:45

+0

不,真正行不通。如果要將值直接放入字符串中(如果SqlServer需要1,則在Access中),則傳遞-1。正如我所說。總是使用參數化查詢。看看[Sql注入問題在這裏](http://stackoverflow.com/questions/332365/how-does-this-sql-injection-work) – Steve 2013-04-04 20:41:14

0

不知道@ Q1-EASY是一個字段名稱或值,但你需要一個字段設置爲東西:

UPDATE table SET field = value WHERE field = value; 

你已經得到了第一個「域=價值」部分錯誤。

相關問題