2017-03-04 120 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替换字符串连接。