2017-03-04 116 views
0

你好我想在C#中做一個應用程序非常簡單它有一個搜索欄(文本框)和一個按鈕,我的目的是爲例如當我鍵入E1我想顯示從MySql的項目。此刻,當我鍵入E1時,我得到一些錯誤,說未知列「e1」。我會後我下面的代碼:我需要一些建議與mysql

public partial class MainWindow : Window 
{ 
    MySqlConnection connection = new MySqlConnection("datasource=localhost;port=3306;username=root;password=pass;"); 
    MySqlCommand cmd; 
    MySqlDataReader mdr; 

    private void button_Click(object sender, RoutedEventArgs e) 
    { 
     try 
     { 
      connection.Open(); 
      string selectRaspuns = "SELECT * FROM testdb.element WHERE name="+ userInput.Text; 
      cmd = new MySqlCommand(selectQuery, connection); 
      mdr = cmd.ExecuteReader(); 

      if (mdr.Read()) 
      { 
       r1.GetDenumire(mdr.GetString("name")); 
       r1.GetInformatii(mdr.GetString("info")); 

       r1.Show(); 
      } 
      else 
      { 
       MessageBox.Show("Error"); 
      } 

     } 
     catch(Exception ex) 
     { 
      MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); 
     } 
     finally 
     { 
      connection.Close(); 
     } 
    } 
} 

我想要的,例如當我鍵入E1至約E1我的MySQL數據庫信息的存儲在表元素的列名和信息,你可以點我什麼我做錯了顯示?謝謝

+0

始終使用SQL參數 – Plutonix

回答

0

的問題是在這行代碼:

string selectRaspuns = "SELECT * FROM testdb.element WHERE name="+ userInput.Text; 

當您連接你的 「E1」 的輸入,結果是:

SELECT * FROM testdb.element其中name = E1

由於您的字符串不是引用時,MySQL將其解釋爲列名,因此,你會得到 「無效列名」 的錯誤。

在最低限度,必須添加引號,像這樣:

string selectRaspuns = "SELECT * FROM testdb.element WHERE name='" + userInput.Text + "'"; 

通過這樣做,你得到的SQL是:

SELECT * FROM testdb.element其中name ='E1 '

和MySql會將「E1」解釋爲一個字符串,這就是您的意圖。

也就是說,使用字符串連接創建SQL是一種不好的做法,可能會導致SQL注入漏洞。一旦您按需要工作,我強烈建議您迴圈並用parameterized queries替換字符串連接。