2020-09-15

项目场景:

本人设备行业,最近做设备与管理系统对接,遇到客户从erp里面到处的excell文件需要批量导入到设备。从网上找了资料用mysql中的事务管理进行导入这个方式是不错的。


问题描述:

一般情况下我都是将文件导入到mysql数据库中,通过我写的上位机程序再从数据库里面增删改查,根据客户的使用原则进行分类使用。最近碰到客户下料单一次下一周的工作量。在导入的过程中发现特别慢。


原因分析:

如果利用for循环的话,需要每一次都进行上位软件与mysql的链接断开操作,或者是一直链接不用断开也需要上位软件与mysql软件在每一次插入数据时进行交互操作。势必要占用很多资源。


解决方案:

利用mysql的事务解决。

      public static int uptable(DataGridView dvv)
        {   sql = @"create table jztable(id int not null primary key auto_increment,
                唯一ID char(32) not null,
                组号 char(32) not null,
                型材 char(64) ,
                型号规格 char(64) not null,
                切割长度 char(32) not null,
                客户名称 char(64),
                颜色 char(64) ,
                数量 char(4) ,
                左角度 char(4) ,
                右角度 char(4) ,
                生产单号 char(64),
                原料标识 char(4),
                型材长度 char(8) not null,
                窗号 char(8),
                是否加工 char(4),
                销售单合同号 char(64));";

// 1建立数据表

            mysqlUnity.CreateTable(sql, "辛格尔");

//2 创建sql语句   

    sql = @"insert into jztable( 唯一ID,组号,型材,型号规格,切割长度,客户名称,颜色,数量,左角度,右角度,生产单号,原料标识,型材长度,窗号,是否加工,销售单合同号)              values(@pa1,@pa2,@pa3,@pa4,@pa5,@pa6,@pa7,@pa8,@pa9,@pa10,@pa11,@pa12,@pa13,@pa14,@pa15,@pa16); ";
            List<MySqlParameter> paralist = new List<MySqlParameter>();
            using (MySqlConnection conn = new MySqlConnection(GetSqlString("辛格尔")))
            {
                
                    using (MySqlCommand cmd=new MySqlCommand(sql,conn))
                    {
                    conn.Open();

// 开始创建事务
                    MySqlTransaction tx = conn.BeginTransaction();
                    cmd.Transaction = tx;
                    #region
                    int count = dvv.Rows.Count - 2;
                    for (int i = 0; i <dvv.Rows.Count-1; i++)
                    {
                        if (dvv.Rows[i].Cells["唯一ID"].Value != null)
                        {
                            paralist.Clear();
                            paralist.Add(new MySqlParameter("@pa1",(object)dvv.Rows[i].Cells["唯一ID"].Value.ToString()));
                            paralist.Add(new MySqlParameter("@pa2",(object)dvv.Rows[i].Cells["组号"].Value.ToString()));
                            paralist.Add(new MySqlParameter("@pa3",(object)dvv.Rows[i].Cells["型材"].Value.ToString()));
                            paralist.Add(new MySqlParameter("@pa4",(object)dvv.Rows[i].Cells["型号规格"].Value.ToString()));
                            paralist.Add(new MySqlParameter("@pa5",(object)dvv.Rows[i].Cells["切割长度"].Value.ToString()));
                            paralist.Add(new MySqlParameter("@pa6",(object)dvv.Rows[i].Cells["客户名称"].Value.ToString()));
                            paralist.Add(new MySqlParameter("@pa7",(object)dvv.Rows[i].Cells["颜色"].Value.ToString()));
                            paralist.Add(new MySqlParameter("@pa8",(object)dvv.Rows[i].Cells["数量"].Value.ToString()));
                            paralist.Add(new MySqlParameter("@pa9",(object)dvv.Rows[i].Cells["左角度"].Value.ToString()));
                            paralist.Add(new MySqlParameter("@pa10",(object)dvv.Rows[i].Cells["右角度"].Value.ToString()));
                            paralist.Add(new MySqlParameter("@pa11",(object)dvv.Rows[i].Cells["生产单号"].Value.ToString()));
                            paralist.Add(new MySqlParameter("@pa12",(object)dvv.Rows[i].Cells["原料标识"].Value.ToString()));
                            paralist.Add(new MySqlParameter("@pa13",(object)dvv.Rows[i].Cells["型材长度"].Value.ToString()));
                            paralist.Add(new MySqlParameter("@pa14",(object)dvv.Rows[i].Cells["窗号"].Value.ToString()));
                            paralist.Add(new MySqlParameter("@pa15",(object)dvv.Rows[i].Cells["是否加工"].Value.ToString()));
                            paralist.Add(new MySqlParameter("@pa16",(object)dvv.Rows[i].Cells["销售单合同号"].Value.ToString()));
                            cmd.Parameters.Clear();
                            cmd.Parameters.AddRange(paralist.ToArray());
                            cmd.ExecuteNonQuery();

//3每一千条利用commit执行一次

                            if (i>0&&(i%1000==0))
                            {
                                tx.Commit();
                                tx = conn.BeginTransaction();
                            }
                        }
                    }//#endfor

//for循环完成以后一定要再一次commit();不然会用遗漏的数据。
                    tx.Commit(); 
                    conn.Close();
                    return 0;
                    #endregion
                }
            }
        }
       

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值