2013-09-26 72 views
0

我多次檢查SQL語句,看起來我的SQL語句是錯誤的。我不明白爲什麼它不起作用。我的SQL語句是正確的,並導致這個OleDBException「UPDATE語句中的語法錯誤。」。UPDATE語句中的語法錯誤OleDb異常

下面是代碼

OleDbConnection CN = new OleDbConnection(mysql.CON.ConnectionString); 
    CN.Open(); 
    cmd1 = new OleDbCommand("Update Mosque Set Name='" + txtNAME.Text + "', No='" + Convert.ToInt32(txtNO.Text) + "', place='" + txtPlace.Text + "', group='" + txtGroup.Text + "', description='" + txtdec.Text + "' where id='" + txtID.Text + "'", CN); 
    cmd1.ExecuteNonQuery(); 
    CN.Close(); 

需要幫助,請知道的是這裏是您使用什麼數據庫,我不知道錯誤

+0

如何更新語句樣子?你能打破它嗎?我建議將查詢首先存儲到字符串變量中。使調試更容易。 –

+0

@ user2746526請將您的cmd1保存爲一個字符串varialbe並將其打印出來供我們查看最終結果。 – Vulcronos

+1

在將它放入查詢之前,您確實需要檢查「txtName.Text」的字符串值。將變量直接放入查詢中,極易發生SQL注入。這是一個主要的漏洞,並且會導致您的查詢失敗。 – JNYRanger

回答

5

,但我相信,集團是一個保留關鍵字在幾乎任何外部SQL數據庫中。如果沒有某種分隔符,這個詞就無法使用。確切的分隔符類型取決於數據庫類型。你使用的是哪個數據庫?

表示請不要使用字符串連接來構建sql命令,而是始終使用參數化查詢。這將允許您刪除Sql Injection的任何可能性,並避免任何語法錯誤,如果一個或多個輸入字符串包含單引號的某處

因此,假設您使用的是MS Access數據庫(在Access中,單詞「否」保留關鍵字和保留關鍵字的分隔符是方brakets)你可以寫這樣的事情

string commandText = "Update Mosque Set Name=?, [No]=?, place=?, " + 
        "[Group]=?, description=? where id=?" 
using(OleDbConnection CN = new OleDbConnection(mysql.CON.ConnectionString)) 
using(OleDbCommand cmd1 = new OleDbCommand(commandText, CN)) 
{ 
    CN.Open(); 
    cmd1.Parameters.AddWithValue("@p1",txtNAME.Text); 
    cmd1.Parameters.AddWithValue("@p2",Convert.ToInt32(txtNO.Text)); 
    cmd1.Parameters.AddWithValue("@p3",txtPlace.Text); 
    cmd1.Parameters.AddWithValue("@p4",txtGroup.Text); 
    cmd1.Parameters.AddWithValue("@p5",txtdec.Text); 
    cmd1.Parameters.AddWithValue("@p6",txtID.Text); 
    cmd1.ExecuteNonQuery(); 
} 

相反的MySQL,你必須使用周圍的GROUP關鍵字的反引號

string commandText = "Update Mosque Set Name=?, No=?, place=?, " + 
        "`Group`=?, description=? where id=?" 
+0

史蒂夫,如果我插入一個空值我得到錯誤「輸入字符串不是在一個正確的格式」 – user2746526

+0

你在哪裏插入空值?你可以發表一個新的問題,複製或引用這個問題並解釋問題所在。 (更多人會看到你的新問題,你會很快得到迴應) – Steve

0

哈rd告訴不知道的texboxes的值,但我懷疑他們之一有一個撇號導致無效的語法。

我建議使用參數,而不是:

cmd1 = new OleDbCommand("Update Mosque Set [Name][email protected], [No][email protected], [place][email protected], [group][email protected], [description][email protected] WHERE [email protected]", CN); 
    cmd1.Parameters.AddWithValue("@Name",txtNAME.Text); 
    cmd1.Parameters.AddWithValue("@No",Convert.ToInt32(txtNO.Text)); 
    // etc.