datatable中有大量数据(>50万),怎样使它快速导入到一个已存在的SQLSERVER表中? RT,不想基于ROWS一条条做INSERT,那样太慢了,50万条要等老半天,不知道有什么命令可以直接导入? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 insert tableselect * from table2 你还是慢慢导吧,我们50多W的数据,不知道那个GG,导了几个通宵了 insert tableselect * from table2-------------------------------是datatable 不是SQL表。----------2.0 中sqlbulkcopy能具体讲下用法吗? 把datatable的内容 导入到execl 比如一万条行成一个表 , 然后把execl表导入数据库。看看速度会咋样 我也没试过 直接用数据会很快的,大约10分钟都不要就可以了。我以前删除了一个表,约100万条数据,后找到备份,从SQL中直接插入,10分钟就OK了,不要用C#来处理. 直接用SQL应该是最快的-----------------------------怎么用啊?数据在DATATABLE里。 如果是我来问这个问题的话,别人告诉我sqlbulkcopy,我马上就会查一下msdn.不知道楼主是怎么想的? 很奇怪,DATATABLE这里这么多数据怎么来的。 嗯.LS说的好...不过也多夸LZ的贴,让我的ADO类库里又多了一种处理大量数据的好方法...谢了... 测试代码:DateTime startTime; protected void Button1_Click(object sender, EventArgs e) { startTime = DateTime.Now; string SrcConString; string DesConString; SqlConnection SrcCon = new SqlConnection(); SqlConnection DesCon = new SqlConnection(); SqlCommand SrcCom = new SqlCommand(); SqlDataAdapter SrcAdapter = new SqlDataAdapter(); DataTable dt = new DataTable(); SrcConString = ConfigurationManager.ConnectionStrings["SrcDBConnectionString"].ConnectionString; DesConString = ConfigurationManager.ConnectionStrings["DesDBConnectionString"].ConnectionString; SrcCon.ConnectionString = SrcConString; SrcCom.Connection = SrcCon; SrcCom.CommandText = " SELECT * From [SrcTable]"; SrcCom.CommandType = CommandType.Text; SrcCom.Connection.Open(); SrcAdapter.SelectCommand = SrcCom; SrcAdapter.Fill(dt); SqlBulkCopy DesBulkOp; DesBulkOp = new SqlBulkCopy(DesConString, SqlBulkCopyOptions.UseInternalTransaction); DesBulkOp.BulkCopyTimeout = 500000000; DesBulkOp.SqlRowsCopied += new SqlRowsCopiedEventHandler(OnRowsCopied); DesBulkOp.NotifyAfter = dt.Rows.Count; try { DesBulkOp.DestinationTableName = "SrcTable"; DesBulkOp.WriteToServer(dt); } catch (Exception ex) { lblResult.Text = ex.Message; } finally { SrcCon.Close(); DesCon.Close(); } } private void OnRowsCopied(object sender, SqlRowsCopiedEventArgs args) { lblCounter.Text += args.RowsCopied.ToString() + " rows are copied<Br>"; TimeSpan copyTime = DateTime.Now - startTime; lblCounter.Text += "Copy Time:" + copyTime.Seconds.ToString() + "." + copyTime.Milliseconds.ToString() + " seconds"; }代码说明:SqlBulkCopy DesBulkOp;DesBulkOp = new SqlBulkCopy(DesConString, SqlBulkCopyOptions.UseInternalTransaction);先生成SqlBulkCopy 实例,构造函数指定了目标数据库,使用SqlBulkCopyOptions.UseInternalTransaction是指迁移动作指定在一个Transaction当中,如果数据迁移中产生错误或异常将发生回滚。WriteToServer方法就是将数据源拷备到目标数据库。在使用WriteToServer方法之前必须先指定DestinationTableName属性,也就是目标数据库的表名,这种方式我用上了,速度很快!我现在把代码贴出来.希望能帮到您...^o^ 进程死锁问题 如何释放DataSet占用的内存 菜鸟问题 同一客户端 连接多个oracle数据库编码问题。 在打印时,怎样自定义纸型,在线等,急急急,解决马上结帖,谢谢了! VS 2008 MVC 返回JSON 总是不能正确读取,附源码,希望帮我调试一下. 看看这个语句。。。 (狂急)DataGrid修改后如何更新数据库问题!!!进来有分!! 求救高手:关于正则表达式 怎样组建两台电脑的局域网 获得所有打开的窗体句柄,在线等^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ HtmlEncode对HttpResponse编码
select * from table2
select * from table2
-------------------------------
是datatable 不是SQL表。
----------
2.0 中
sqlbulkcopy
能具体讲下用法吗?
-----------------------------
怎么用啊?数据在DATATABLE里。
protected void Button1_Click(object sender, EventArgs e)
{
startTime = DateTime.Now;
string SrcConString;
string DesConString;
SqlConnection SrcCon = new SqlConnection();
SqlConnection DesCon = new SqlConnection();
SqlCommand SrcCom = new SqlCommand();
SqlDataAdapter SrcAdapter = new SqlDataAdapter();
DataTable dt = new DataTable();
SrcConString =
ConfigurationManager.ConnectionStrings["SrcDBConnectionString"].ConnectionString;
DesConString =
ConfigurationManager.ConnectionStrings["DesDBConnectionString"].ConnectionString;
SrcCon.ConnectionString = SrcConString;
SrcCom.Connection = SrcCon;
SrcCom.CommandText = " SELECT * From [SrcTable]";
SrcCom.CommandType = CommandType.Text;
SrcCom.Connection.Open();
SrcAdapter.SelectCommand = SrcCom;
SrcAdapter.Fill(dt);
SqlBulkCopy DesBulkOp;
DesBulkOp = new SqlBulkCopy(DesConString,
SqlBulkCopyOptions.UseInternalTransaction);
DesBulkOp.BulkCopyTimeout = 500000000;
DesBulkOp.SqlRowsCopied +=
new SqlRowsCopiedEventHandler(OnRowsCopied);
DesBulkOp.NotifyAfter = dt.Rows.Count;
try
{
DesBulkOp.DestinationTableName = "SrcTable";
DesBulkOp.WriteToServer(dt);
}
catch (Exception ex)
{
lblResult.Text = ex.Message;
}
finally
{
SrcCon.Close();
DesCon.Close();
}
} private void OnRowsCopied(object sender, SqlRowsCopiedEventArgs args)
{
lblCounter.Text += args.RowsCopied.ToString() + " rows are copied<Br>";
TimeSpan copyTime = DateTime.Now - startTime;
lblCounter.Text += "Copy Time:" + copyTime.Seconds.ToString() + "." + copyTime.Milliseconds.ToString() + " seconds";
}代码说明:SqlBulkCopy DesBulkOp;
DesBulkOp = new SqlBulkCopy(DesConString, SqlBulkCopyOptions.UseInternalTransaction);先生成SqlBulkCopy 实例,构造函数指定了目标数据库,使用SqlBulkCopyOptions.UseInternalTransaction是指迁移动作指定在一个Transaction当中,如果数据迁移中产生错误或异常将发生回滚。WriteToServer方法就是将数据源拷备到目标数据库。在使用WriteToServer方法之前必须先指定DestinationTableName属性,也就是目标数据库的表名,
这种方式我用上了,速度很快!我现在把代码贴出来.希望能帮到您...^o^