热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何快速插入大量的数据(Sqlserver)

经过测试10万条记录需要1.5-1.7秒只是插入一列4列的话需要3秒(我的机器是4G内存)目标数据库只能是Sqlserver来源数据库无所谓只要能用ado.net将来源

经过测试 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> 这里面 我使用了事务  您在使用的时候 也可以不用事务
 
 


推荐阅读
author-avatar
手机用户2502883075
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有