如何快速插入大量的数据(Sqlserver)
2011-02-23 14:51
901 查看
经过测试 10万条记录 需要1.5-1.7秒
只是插入一列 4列的话 需要3秒 (我的机器是4G内存)
目标数据库只能是Sqlserver
来源数据库 无所谓 只要能用ado.net 将来源数据读取到Dataset或者Datareader 中就可以
using System.Data;
using System.Diagnostics;
using System.Data.SqlClient;
string connectionString = "Data Source=HG-J3EJJ9LSW5PY;Initial Catalog=Test;User ID=sa;password=hg";
DataTable dataTable = sql_.select_datagrid(" select a from large where 1=0 ").Tables[0];
string passportKey;
for (int i = 0; i < 100000; i++)
{
passportKey = Guid.NewGuid().ToString();
DataRow dataRow = dataTable.NewRow();
dataRow[0] = passportKey;
dataTable.Rows.Add(dataRow);
}
SqlConnection sqlConnection = new SqlConnection(connectionString);
sqlConnection.Open();
SqlTransaction sqltran = sqlConnection.BeginTransaction();
SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(sqlConnection, SqlBulkCopyOptions.KeepIdentity, sqltran);
sqlBulkCopy.DestinationTableName = "large";
sqlBulkCopy.BatchSize = dataTable.Rows.Count;
if (dataTable != null && dataTable.Rows.Count != 0)
{
sqlBulkCopy.WriteToServer(dataTable);
}
sqlBulkCopy.Close();
sqltran.Rollback();
sqlConnection.Close();
注解: <1> sqlBulkCopy.DestinationTableName = "large"; large 指的是目标表的名称
<2> DataTable 的结构要和数据库中的表的结构相同
(DataTable的列不能多于数据库里面的)
(DataTable的列可以少于数据库里面的 如果数据库这一列有默认值的话)
<3> 这里面 我使用了事务 您在使用的时候 也可以不用事务
只是插入一列 4列的话 需要3秒 (我的机器是4G内存)
目标数据库只能是Sqlserver
来源数据库 无所谓 只要能用ado.net 将来源数据读取到Dataset或者Datareader 中就可以
using System.Data;
using System.Diagnostics;
using System.Data.SqlClient;
string connectionString = "Data Source=HG-J3EJJ9LSW5PY;Initial Catalog=Test;User ID=sa;password=hg";
DataTable dataTable = sql_.select_datagrid(" select a from large where 1=0 ").Tables[0];
string passportKey;
for (int i = 0; i < 100000; i++)
{
passportKey = Guid.NewGuid().ToString();
DataRow dataRow = dataTable.NewRow();
dataRow[0] = passportKey;
dataTable.Rows.Add(dataRow);
}
SqlConnection sqlConnection = new SqlConnection(connectionString);
sqlConnection.Open();
SqlTransaction sqltran = sqlConnection.BeginTransaction();
SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(sqlConnection, SqlBulkCopyOptions.KeepIdentity, sqltran);
sqlBulkCopy.DestinationTableName = "large";
sqlBulkCopy.BatchSize = dataTable.Rows.Count;
if (dataTable != null && dataTable.Rows.Count != 0)
{
sqlBulkCopy.WriteToServer(dataTable);
}
sqlBulkCopy.Close();
sqltran.Rollback();
sqlConnection.Close();
注解: <1> sqlBulkCopy.DestinationTableName = "large"; large 指的是目标表的名称
<2> DataTable 的结构要和数据库中的表的结构相同
(DataTable的列不能多于数据库里面的)
(DataTable的列可以少于数据库里面的 如果数据库这一列有默认值的话)
<3> 这里面 我使用了事务 您在使用的时候 也可以不用事务
相关文章推荐
- 如何在sqlserver数据库中快速插入大量数据.
- 快速插入大量数据的asp.net代码(Sqlserver)
- PostgreSQL数据库如何快速插入大量数据
- 如何快速往表里插入大量的数据行
- Oracle如何快速、大量的插入数据
- 快速插入大量数据的asp.net代码(Sqlserver)
- SQLServer------如何快速插入几万条测试数据
- 大量数据快速插入到DB
- SQLServer 如何获取刚插入数据的Id号
- 如何高效地向Redis插入大量的数据
- C#如何快速高效地导出10万以上的大量数据
- SqlBulkCopy 快速插入数据到SqlServer 数据库
- C#.NET中如何批量插入大量数据到数据库中
- 如何在hbase中快速插入10万条数据
- ios-如果一次性向数据库中插入大量数据,应该如何处理
- 使用JDBC在MySQL数据库中如何快速批量插入数据
- 快速向表中插入大量数据Oracle中append与Nologging
- MySQL快速导入/插入大量数据
- 大量数据快速插入方法探究[nologging+parallel+append]
- javascript大量推送数据如何快速处理?