2015-09-16 23 views
-2
string constring = "datasource=127.0.0.1;port=3306;username=user;password=pass;database=raw_data"; 
string Query = "SELECT * FROM data WHERE symbol='" + textBox1.Text + "';"; 
try 
{ 
    MySqlConnection connDataBase = new MySqlConnection(constring); 
    MySqlCommand cmd = new MySqlCommand(Query,connDataBase); 
    connDataBase.Open(); 
    MySqlDataReader reader = cmd.ExecuteReader(); 

我試圖改變它很多次,但沒有成功,並尋找沒有找到的soloution。這給我一個錯誤:輸入字符串的格式不正確

+2

該錯誤被引發的是哪一行?什麼是堆棧跟蹤?你熟悉的SQL注入http://stackoverflow.com/questions/601300/what-is-sql-injection? – Kritner

+0

更改查詢使用cmd.Parameters ... – MethodMan

回答

0

好了,你有好幾個問題:

  • MySQL不使用連接字符串中的參數datasource。也許server
  • 我們不知道查詢變量中的字符串會發生什麼,因爲我們不知道文本框的內容。你應該在連接後向我們顯示變量的內容。
  • 執行字符串連接來生成SQL,因爲您正在做的事情都很容易出錯(如果字符串中有單引號字符會發生什麼情況)和危險的(有人可以利用難度將隨機SQL推入數據庫)。您應該閱讀有關參數化SQL查詢,這些查詢很容易構建並更安全地使用。
  • 變量名稱Query不是一個好的因爲它是錯誤的,可能與類名衝突。
  • 名稱data對於表格是危險的,對於列名稱也是symbol,因爲它們可能會與保留字發生衝突。如果您必須使用它們,請將它們放在數據庫的適當標識符引號中。