【问题标题】:Connecting a MySQL table to a DataGridView control in C#在 C# 中将 MySQL 表连接到 DataGridView 控件
【发布时间】:2016-05-05 21:44:05
【问题描述】:

我正在做一个需要在 c# 中使用 datagridview 的项目 我想做一个测试,当我通过它的编号搜索产品时,如果数字不正确,它会显示一个错误,这在我的情况下工作正常,如果数字正确,它将显示与相关的信息datagridview中的这个产品不起作用,当我输入正确的数字时它什么也没给我。 这是代码,请帮助我

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);
    }
}

【问题讨论】:

  • 这是什么应用程序?
  • 引用字段的类型是什么?
  • 这是一个c#windows窗体应用,引用字段类型是文本框,引用类型是int
  • 我想要数据库中的字段类型(文本或数字)?
  • DB中的类型是varchar

标签: c# mysql datagridview


【解决方案1】:

使用 MySqlDataReader 填充 DataTable 并将 DataTable 用作 DataSource

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);
}

还请注意,查询文本应始终使用参数构造,而不是将字符串连接在一起。如果您将用户收到的字符串连接在一起,对于恶意用户来说太容易编写可能会破坏您的数据库或泄露用户名和密码等机密信息的内容。

See this famous comic by XKCD

另一个重要的一点是拥有

 dg2.AutoGenerateColumns = true;

【讨论】:

    【解决方案2】:

    您必须像这样在查询中添加撇号'':

    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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-03
      • 1970-01-01
      • 2023-03-27
      • 2015-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多