【问题标题】:insert data from datagridview or datatable从 datagridview 或 datatable 插入数据
【发布时间】:2021-07-05 02:30:56
【问题描述】:

好的,两天后我从表格工作中得到了网格和最大 ID,现在是新问题: 如何在数据表 dtprodisp 上的 gridview 上插入所有产品 我插入了第一个产品,但不知道要执行 for 循环并且不重复任何已插入的产品

private void Btngravar_Click(object sender, EventArgs e)
    {
        MySqlConnection conn = new MySqlConnection("ConnectionString");
        
        conn.Open();
        MySqlCommand objcmd = new MySqlCommand("insert into dispensacao (DESTINATARIO,COD_UNIDADE,COD_DEPARTAMENTO,DATA,SOLICITANTE,DEFERIDO_POR) values(?,?,?,?,?,?)", conn);
        objcmd.Parameters.Add("@DESTINATARIO", MySqlDbType.VarChar, 45).Value = Cmbdestinatario.Text;
        
        objcmd.Parameters.AddWithValue("@COD_UNIDADE", string.IsNullOrEmpty(Txtcodigounidade.Text) ? (object)DBNull.Value : Txtcodigounidade.Text);
        objcmd.Parameters.AddWithValue("@COD_DEPARTAMENTO", string.IsNullOrEmpty(Txtcodigodep.Text) ? (object)DBNull.Value : Txtcodigodep.Text);
       
        DateTime fdate = DateTime.Parse(Txtdata.Text);           
        objcmd.Parameters.Add("@DATA", MySqlDbType.DateTime).Value = fdate;
        objcmd.Parameters.Add("@SOLICITANTE", MySqlDbType.VarChar, 45).Value = Txtsolicitante.Text;
        objcmd.Parameters.Add("@DEFERIDO_POR", MySqlDbType.VarChar, 45).Value = Txtdeferido.Text;
        objcmd.ExecuteNonQuery();
        conn.Close();

        conn.Open();
       
        objcmd = new MySqlCommand("insert into produtos_disp(CODIGO_DISP,PRODUTO,QUANTIDADE,CODIGO_PROD) values (?,?,?,?)", conn);
        objcmd.Parameters.AddWithValue("@CODIGO_DISP", Cmbid.Text);
        objcmd.Parameters.AddWithValue("@PRODUTIO", dtproddisp.Rows[0]["descricao"]);
        objcmd.Parameters.AddWithValue("@QUANTIDADE", dtproddisp.Rows[0]["quantidade"]);
        objcmd.Parameters.AddWithValue("@COD_PRODUTO", dtproddisp.Rows[0]["codigo"]);
        
        objcmd.ExecuteNonQuery();       

   

        this.Close();
    }

这是代码,它适用于第一行

dtproddisp.Rows.Add(Txtcodigopro.Text, Txtproduto.Text, Txtquantidade.Text); 

我需要改变它吗? 出于某种原因,将数据添加到 dtprodisp DataTable 的代码没有得到 codigo,几分钟前还在工作,我没有改变任何东西:

 private void Btnaddproduto_Click(object sender, EventArgs e)
    {

        dtproddisp.Rows.Add(Txtcodigopro.Text, Txtproduto.Text, Txtquantidade.Text);

        Gridprodutos.DataSource = dtproddisp;

    }

其他两个领域都在工作 获取“DESCRICAO”和“CODIGO”的代码:

private void Txtproduto_KeyUp(object sender, KeyEventArgs e)
    {
         if (e.KeyCode == Keys.Enter)
        {
            MySqlConnection connection = new MySqlConnection("connectionString");

            string selectQuery = "select descricao,codigo from produtos where barras =" + (Txtproduto.Text);
            connection.Open();
            MySqlCommand command = new MySqlCommand(selectQuery, connection);               
           
            MySqlDataReader reader = command.ExecuteReader();
            if(reader.Read())
            {
                Txtproduto.Text = reader.GetString("DESCRICAO");
                Txtcodigopro.Text = reader.GetString("CODIGO");
            }
           
           
        }

    }

【问题讨论】:

  • 不清楚你在问什么。如果你想插入数据表中的所有行,那么一个简单的for 或foreach 循环遍历表的行就可以了。在每次迭代中,清除先前的参数并使用该特定行中的值重新添加参数。我猜这可能是你要问的。
  • foreach 循环是空的有什么原因吗?您也可以像在上一个循环中所做的那样使用for 循环。两者都会完成同样的事情。
  • 只是设置在那里以显示我正在尝试的内容
  • objcmd.Parameters.AddWithValue("@anyText", dtproddisp.Rows['i']['j']);任何想法都会引发错误
  • 您需要显示您正在使用的代码,因为当前代码不会编译。您将在...foreach () 处收到代码行错误...这是无效的,代码将无法编译。所以我不确定你会如何在线上得到一个执行错误……objcmd.Parameters.AddWithValue("@anyText", dtproddisp.Rows['i']['j']);……我只能猜测i 和j 的另一个编译错误,因为它们超出了范围并且在技术上不存在。请edit您的问题与您更新的代码。

标签: c# mysql insert


【解决方案1】:

几周后我终于找到了让它发挥作用的方法;

for (int i = 0; i < dtproddisp.Rows.Count; i++)

        {
            objcmd = new MySqlCommand("insert into produtos_disp(CODIGO_DISP,PRODUTO,QUANTIDADE,CODIGO_PROD) values (?,?,?,?)", conn);
           
            objcmd.Parameters.AddWithValue("@CODIGO_DISP", Cmbid.Text);
            objcmd.Parameters.AddWithValue("@PRODUTIO", dtproddisp.Rows[i]["descricao"]);
            objcmd.Parameters.AddWithValue("@QUANTIDADE", dtproddisp.Rows[i]["quantidade"]);
            objcmd.Parameters.AddWithValue("@COD_PRODUTO", dtproddisp.Rows[i]["codigo"]);
            objcmd.ExecuteNonQuery();
        }

如果其他人有同样的问题,我已经发布了我的解决方案 现在我需要完善它,需要从表中获取最大 id,现在我使用带有 desc 顺序的组合框来获取它,但我相信有更好的方法来做到这一点

【讨论】:

    猜你喜欢
    • 2016-03-11
    • 2017-04-07
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    • 2013-03-01
    相关资源
    最近更新 更多