森广 2019-04-09 19:05 采纳率: 33.3%
浏览 1321
已结题

C# 操作mysql大批量插入语句,一次几万条,可以同时跳过指定的重复字段继续插入。

我现在用的是这个语句很卡

执行SQL语句

            DataTable dt = (dSkinGridList1.DataSource as DataTable);
            this.label1.Visible = true;
            pidJiazai.Visible = true;
            List<string> SQLStringLis = new List<string>();
            for (int i = 0; i < dt.Rows.Count - 1; i++)
            {
                SQLStringLis.Add("insert ignore into shopsList values('" + dt.Rows[i][0].ToString() + "','','" + dt.Rows[i][1].ToString() + "','" + dt.Rows[i][2].ToString() + "','" + dt.Rows[i][3].ToString() + "','" + dt.Rows[i][4].ToString() + "','0','0','0','" + DateTime.Now.ToString() + "')");
            }

插入执行

        public static bool insertPai(List<string> SQLStringList)
        {
            mysqlClass sqlL = new mysqlClass();
            using (MySqlConnection conn = sqlL.getmysqlcon())
            {
                conn.Open();
                MySqlCommand cmd = new MySqlCommand();
                cmd.Connection = conn;
                MySqlTransaction tx = conn.BeginTransaction();
                cmd.Transaction = tx;
                try
                {
                    for (int n = 0; n < SQLStringList.Count; n++)
                    {
                        string strsql = SQLStringList[n].ToString();
                        if (strsql.Trim().Length > 1)
                        {
                            cmd.CommandText = strsql;
                            cmd.ExecuteNonQuery();
                        }
                        //后来加上的
                        if (n > 0 && (n % 500 == 0 || n == SQLStringList.Count - 1))
                        {
                            tx.Commit();
                            tx = conn.BeginTransaction();
                        }
                    }
                    return true;
                    //tx.Commit();//原来一次性提交
                }
                catch (System.Data.SqlClient.SqlException E)
                {
                    tx.Rollback();
                    throw new Exception(E.Message);
                }
            }
        }

请教更好的,办法,速度更快。这个语句现在插入3000条就卡主了。在线等。谢谢!

  • 写回答

1条回答 默认 最新

  • threenewbee 2019-04-09 20:09
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试