2013-01-31 243 views
0

獲取數據我有這樣SQL查詢從數據庫

SqlCommand cmd = new SqlCommand(
"IF NOT EXISTS(SELECT english from dic where english='"+e_word+"') " + 
"Insert INTO dic VALUES('"+e_word+"',N'"+b_word+"') " + 
"else " + 
"UPDATE dic SET english='"+e_word+"',bangla=N'"+b_word+"' WHERE english='"+e_word+"'",con); 


     cmd.ExecuteNonQuery(); 

一個SQL命令,但我爲得到錯誤像

Incorrect syntax near 's'. 
Incorrect syntax near 's'. 

我怎樣才能解決這個?????

+2

生成SQL外'SqlCommand'構造函數。然後在調試窗口中查看它,並告訴我們完全格式化的SQL字符串是什麼。 –

+2

人們可能正在尋找「狗碗」等嗎?它演示了一個巨大的SQL注入漏洞(實際上,我猜這個單詞有點像'I'm','I'd'等) –

+0

這就是你不使用參數化查詢所得到的結果。 – Steve

回答

4

FTFY:

SqlCommand cmd = new SqlCommand(@" 
IF NOT EXISTS(SELECT english from dic where [email protected]_word) 
Insert INTO dic (english, bangla) VALUES(@e_word,@b_word) 
else UPDATE dic SET [email protected]_word WHERE [email protected]_word",con); 

cmd.Parameters.AddWithValue("e_word", e_word); 
cmd.Parameters.AddWithValue("b_word", b_word); 
cmd.ExecuteNonQuery(); 

(實際上,我通常做我的upserts到有點不同,但我不想重寫整個事情)

+0

爲什麼@在這裏使用???你能解釋我嗎??? – DarkenShooter

+0

@ user2029069在哪個位置?所有*裏面的SQL都是一個*逐字串字符串* - 它使得多行SQL更容易,並且你不必轉義任何字符,除了'''' (to'''')。@ e_word' /'@ b_word'是SQL參數,它們從兩個AddWithValue行中獲取它們的值。注意SQL服務器對參數和局部變量使用相同的語法,所以在一般情況下,'@ foo'也可以是一個局部變量,在這個*這種情況下,它們是參數 –

+0

我正在使用sqlCeCommand.But上面這個我越來越錯誤了@ @ Marc Gravell – DarkenShooter