2017-03-04 11 views
0

こんにちは私は非常に単純なそれは検索バー(テキストボックス)とボタン、私の目的は私が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についての私のMySQLのDB情報のから表示するには、E1を入力したとき、私は例えばのためにしたい、あなたが私を指すことができます私は間違って何をやっています?ありがとう

+0

常にSQLパラメータを使用する – Plutonix

答えて

0

問題は、このコード行である:

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

あなたは "E1" のご入力を連結すると、結果は次のとおりです。

SELECT *名= E1

testdb.elementから自分の文字列が引用されていないので、MySQLはこれあなたが「無効な列名」エラーを取得し、列名として解釈します。非常に最低で

、あなたがそうのように、引用符を追加する必要があります。

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

これにより、あなたの結果のSQLは次のとおりです。testdb.element FROM WHERE名= 'E1

SELECT * '

となり、MySqlは "E1"を文字列として解釈します。これはあなたの意図です。

つまり、文字列連結を使用してSQLを作成することは悪い習慣であり、SQLインジェクションの脆弱性につながる可能性があります。必要に応じて作業したら、文字列の連結をparameterized queriesに戻して置き換えることを強くお勧めします。

関連する問題