请问C#事务批量插入数据怎么做啊? 昨天从SQL2000里面导入数据到SQLite 我是写的那种一条条导入方式,结果慢到家了 8万条数据倒了1个半小时....我朋友说用事务一次插入1000条1分钟就能完....我没写过C#事务批量插入数据...谁能给我个例子或者教我一下? 谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 也就是 循环构造 sql 执行 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清空} http://www.xueit.com/html/2009-07/21_4166_00.html sql server可使用sqlbulkcopy多线程导出向导 #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 各位懂socket的大侠帮帮忙,小弟有问题请教 求颜色 各编码间的转换 这个RGB怎么获得 winform 的 messageBox.show() 怎么获取点右上角的X的事件? Winform里面设置起始窗口? 对路径“D:/新建文件夹” 的访问被拒绝 关于tcpchannel 的怪问题 新手求助:如何对比两个string变量是否相等. 请各位高手看一下,关于数据格式转换的问题,在线等!!!!谢谢谢谢!!!! 如何在RichTextBox控件内容中,插入字符串? 日期在范围内递增的问题? DT不释放的问题 C# 对自定义控件感兴趣的来看看,大家请帮忙
执行
for(;;)
{
sb.Append("sql 语句");
}if( sql != "")
exec(sb.ToString())
-----------------------------------------------------
可以这么个思路。但是如果是8w条数据比较大的时候,可以根据i做判断,
比如:
if( i=20000) { 执行一次sb。tostring,i=0;sb清空}
多线程
导出向导
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