如何在MYSQL C#中填充DataGridView单元?

时间:2017-04-29 09:54:17

标签: c# mysql datagridview

我有一个4-5列的DataGridView DataGridView是可编辑的。
当我在参考列中输入一个值时,它会立即填充mysql数据库中其他单元格中的其他值。
这就是我试过的......

private void TAB_Credit_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {

            try
            {
                if (TAB_Credit.CurrentCell.ColumnIndex == 0)
                {

                    MySqlDataAdapter sa = new MySqlDataAdapter("SELECT * FROM table WHERE Reference='" + TAB_Credit.Rows[e.RowIndex].Cells["Reference"].Value + "'", MyConnexion);
                    DataTable dt2 = new DataTable();

                    sa.Fill(dt2);

                        double value = (double)TAB_Credit.Rows[e.RowIndex].Cells["Quantite"].Value * (double)TAB_Credit.Rows[e.RowIndex].Cells["PU"].Value;

                        TAB_Credit.Rows[e.RowIndex].Cells["Designation"].Value = dt2.Rows[0]["Designation"].ToString();
                        TAB_Credit.Rows[e.RowIndex].Cells["Quantite"].Value = dt2.Rows[0]["Quantite"].ToString();
                        TAB_Credit.Rows[e.RowIndex].Cells["PU"].Value = dt2.Rows[0]["Prix_Unitaire"].ToString();
                        TAB_Credit.Rows[e.RowIndex].Cells["Total"].Value = value.ToString();


                    }

            }
            catch
            { }
        }

因此在datagrid中,当我在Reference Cell中插入时,其他单元格中没有出现任何内容。 谢谢。

1 个答案:

答案 0 :(得分:0)

您的代码中至少存在两个问题:

  • 第一:不要写空的try / catch块。如果发生任何错误 你永远不会知道。删除并检查是否有任何异常。
  • 第二:如果有人输入,您认为会发生什么:1'; DROP TABLE 参考文献; - 在您的手机中?不要这样做,看at this

现在,在删除空捕获后,我们可以看到当您尝试乘以值(数量* PU)时,问题是由无效的强制转换异常引起的。这应该通过适当转换来自单元格的两个对象值来解决。

double qty = Convert.ToDouble(TAB_Credit.Rows[e.RowIndex].Cells["Quantite"].Value);
double pu = Convert.ToDouble(TAB_Credit.Rows[e.RowIndex].Cells["PU"].Value);
double value = qty * pu;

但如果直接从您的用户输入这些单元格,那么Convert.ToDouble也有其缺点。如果输入类似于“ABC”,则会引发异常。在这些情况下,如果输入不是有效的双重

,则使用double.TryParse并向用户发送消息
double qty;
if(!double.TryParse(TAB_Credit.Rows[e.RowIndex].Cells["Quantite"].Value.ToString, out qty))
{
   MessageBox.Show("Invalid input for quantity");
   return;
}

最后我们需要使用参数化查询修复sql注入漏洞

string cmdText = @"SELECT * FROM table 
                   WHERE Reference=@ref"
MySqlDataAdapter sa = new MySqlDataAdapter(cmdText, MyConnexion);
sa.SelectCommand.Parameters.Add("@ref", MySqlDbType.VarChar).Value = 
        TAB_Credit.Rows[e.RowIndex].Cells["Reference"].Value.ToString();