昨天从SQL2000里面导入数据到SQLite 我是写的那种一条条导入方式,结果慢到家了 8万条数据倒了1个半小时....
我朋友说用事务一次插入1000条1分钟就能完....
我没写过C#事务批量插入数据...谁能给我个例子或者教我一下? 谢谢

解决方案 »

  1.   

    也就是 循环构造 sql 
    执行
      

  2.   

    string sql = "";StringBuilder sb = new StringBuilder();
    for(;;)
    {
    sb.Append("sql 语句");
    }if( sql != "")
     exec(sb.ToString())
    -----------------------------------------------------
    可以这么个思路。但是如果是8w条数据比较大的时候,可以根据i做判断,
    比如:
    if( i=20000) { 执行一次sb。tostring,i=0;sb清空}
      

  3.   

    http://www.xueit.com/html/2009-07/21_4166_00.html
      

  4.   

    sql server可使用sqlbulkcopy
    多线程
    导出向导
      

  5.   

    #region  批量插入数据到数据库
                DateTime startTime; 
                private bool SqlBulkCopy(DataTable dt)
                {                try
                    {
                        startTime = DateTime.Now;
                        //数据批量导入sqlserver,创建实例    SqlBulkCopyOptions.UseInternalTransaction采用事务  复制失败自动回滚
                        System.Data.SqlClient.SqlBulkCopy sqlbulk = new System.Data.SqlClient.SqlBulkCopy(System.Configuration.ConfigurationSettings.AppSettings["ConStr"], SqlBulkCopyOptions.UseInternalTransaction);
                        sqlbulk.SqlRowsCopied +=
                        new SqlRowsCopiedEventHandler(OnRowsCopied); //订阅复制完成后的方法,参数是 sqlbulk.NotifyAfter的值
                        sqlbulk.NotifyAfter = dt.Rows.Count;                    //目标数据库表名
                        sqlbulk.DestinationTableName = "T_TempUpLoadTC";
                        //数据集字段索引与数据库字段索引映射
                        sqlbulk.ColumnMappings.Add(0, "userName");
                        sqlbulk.ColumnMappings.Add(1, "JiFenCount");
                        //导入
                        sqlbulk.WriteToServer(dt);
                        sqlbulk.Close();
                        return true;
                    }
                    catch (Exception ex)
                    {
                        throw new Exception(ex.Message);
                    }
                    finally 
                    {
                        dt.Dispose();
                    }
                }     //复制完成后的处理事件
                private void OnRowsCopied(object sender, SqlRowsCopiedEventArgs args)
                {
                    lblCounter.Text += args.RowsCopied.ToString() + " 条记录已导入";
                    TimeSpan copyTime = DateTime.Now - startTime;
                    lblCounter.Text += "  花费时间:" + copyTime.Seconds.ToString() + "." +
                    copyTime.Milliseconds.ToString() + " 秒";
                }
              #endregion