2016-05-05 2 views
0

私はCでdatagridviewを使用する必要があるプロジェクトに取り組んでいます。 私はその番号で製品を検索するときにテストを行いたいです番号が間違っているとエラーが表示され、私の場合は正常に動作します。数字が正しい場合は、この製品に関連する情報がdatagridviewに表示されます。これは動作しません。数。ここ は、コードで、データテーブルを埋めるためにMySqlDataReaderを使用しC#のDataGridViewコントロールにMySQLテーブルを接続する

private MySqlDataAdapter mySqlDataAdapter; 
private void button1_Click(object sender, EventArgs e) 
{ 
    int n = Convert.ToInt32(t_ref.Text); 

    string cs = "datasource=localhost;port=3306;database=stock;username=root;password=;"; 

    MySqlConnection con = new MySqlConnection(cs); 
    try 
    { 
     con.Open(); 
    } 
    catch (Exception) 
    { 
     MessageBox.Show("Erreur de connexion à la base de donnée !", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); 

    } 

    string query = "select * from produits where reference = " + n + "; "; 
    MySqlCommand cmd = new MySqlCommand(query, con); 
    MySqlDataReader dr = cmd.ExecuteReader(); 

    if (dr.Read()) 
    { 
     dg2.DataSource =dr; 

    } 
    else 
    { 
     MessageBox.Show("Aucun élément avec ce reférence a été trouvé !", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); 
    } 
} 
+0

これはどのようなアプリケーションですか? –

+0

参照フィールドのタイプは何ですか? –

+0

これはC#windowsフォームアプリケーションです 参照フィールドの種類はテキストボックスです 参照型はintです –

答えて

0

私を助けてくださいとパラメータを使用して

string query = "select * from produits where reference = @num"; 
MySqlCommand cmd = new MySqlCommand(query, con); 
cmd.Parameters.Add("@num", MySqlDbType.VarChar).Value = n; 
DataTable dt = new DataTable(); 
dt.Load(cmd.ExecuteReader()) 

if (dt.Rows.Count > 0) 
{ 
    dg2.DataSource =dt; 

} 
else 
{ 
    MessageBox.Show("Aucun élément avec ce reférence a été trouvé !", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); 
} 

も注意クエリテキストを常に構築しなければならないことをデータソースとしてのDataTableを使用していません文字列を連結します。一緒に参加すると、あなたのユーザーが受け取った文字列は、悪意のあるユーザーがデータベースを破壊したり、ユーザー名やパスワードなどの機密情報を明らかにする可能性があります。

See this famous comic by XKCD

Anoterh重要なポイントは、あなたがこのようなクエリで「」アポストロフィを追加する必要があります

dg2.AutoGenerateColumns = true; 
+0

ありがとう、完璧に動作します:) –

0

を持つことです。

string query = "select * from produits where reference = '" + n + "'; "; 

しかし、私はパラメータを使用することができアドバイスSQLインジェクションを避ける:

string query = "select * from produits where reference = @reference "; 
MySqlCommand cmd = new MySqlCommand(query, con); 
cmd.Parameters.Add("@reference ", MySqlDbType.VarChar).Value = n; 
MySqlDataReader dr = cmd.ExecuteReader(); 
関連する問題