2014-05-08 175 views
1

所以我試圖從數據庫中提取一個值,選擇使用WHERE INT的行。嘗試從MySql獲取數據時出現語法錯誤

conn = new MySqlConnection(DBdetails.connStr); 
conn.Open(); 
query = "SELECT * FROM tables WHERE [email protected]"; 
MySqlCommand cmd = new MySqlCommand(query, conn); 
cmd.Parameters.AddWithValue("@tafel", tafel); 
cmd.ExecuteNonQuery(); 

但是它不會通過「cmd.ExecuteNonQuery()」,它將引發錯誤說的語法心不是正確的,如:「近表= 1」,「鄰近表= 2」

我試圖獲取另一個在同一個表中是一個var char,它的工作完美。

不要真的看到我做錯了什麼。 'table'列是一個int,'tafel'是一個int。

謝謝!

+0

你有一個列名爲'table'? –

+1

* table *是[保留字](http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html) - 嘗試引用它或更改列名 – vogomatix

+0

如上所述,您需要把'table'放在反引號中,因爲它是一個保留字。保留字列表位於文檔中:http://dev.mysql.com/doc/refman/5.7/en/reserved-words.html。這是一個非常常見的MySQL問題,網站上的許多人認爲這些問題應該以重複或刪除的方式關閉。 –

回答

0

把你的字段名table在反引號(table是一個保留字在MySQL的):

query = "SELECT * FROM `tables` WHERE `table` = @tafel"; 
+0

謝謝你的工作..知道這是小事,但我總是與這個狗屎混淆。將在10米內接受芒!!還有一個awnser爲什麼這是必要的? – user2911924

+0

@ user2911924:是的,正如我上面所說的那樣,表是MySQL中的保留字。 – potashin

0

正如有人說,table是MySQL中的reserved word。您需要使用報價,如

query = "SELECT * FROM tables WHERE `table` = @tafel"; 

但是,最好的解決方案是將名稱更改爲非保留字。

同樣使用using statement來處置你的MySqlConnectionMySqlCommand就好像;

using(MySqlConnection conn = new MySqlConnection(DBdetails.connStr)) 
using(MySqlCommand cmd = conn.CreateCommand()) 
{ 
    cmd.CommandText = "SELECT * FROM tables WHERE `table` = @tafel"; 
    cmd.Parameters.AddWithValue("@tafel", tafel); 
    conn.Open(); 
    cmd.ExecuteNonQuery(); 
} 

順便說一句,我不明白爲什麼你用ExecuteNonQuerySELECT聲明。它只是執行你的查詢。它甚至不返回任何價值。

如果您想獲得查詢結果,可以使用ExecuteReader方法,該方法返回SqlDataReader作爲結果行。

相關問題