zoukankan      html  css  js  c++  java
  • .NET批量导入数据库

    之前一直用DATATABLE批量更新到数据库,今天发现Adapter.Update数据超过60万条数据时导入会超时

    复制代码
       'DT合并到数据库
        Public Sub UpdateData(ByVal dt As DataTable)
            Dim conn As New SqlConnection(_Conn.sStr)
            Dim myAdapter As New SqlDataAdapter()
            Dim myCommand As New SqlCommand("select * from 承保信息 where id=0", conn)
            myAdapter.SelectCommand = myCommand
            Dim myCommandBuilder As New SqlCommandBuilder(myAdapter)
            myAdapter.Update(dt)
        End Sub
    复制代码

    找了一下资料,测试用下面的代码一次可以插入一百多万条数据,通过MSSQL事件探查器发现Adapter.Update是一条一条插入数据表,而SqlBulkCopy是5万5万插入。

    复制代码
       Sub AddData(ByVal dt As DataTable)
            Dim str As String = _Conn.sStr
            '声明数据库连接 
            Dim conn As New SqlConnection(str)
            conn.Open()
            '声明SqlBulkCopy ,using释放非托管资源 
            Using sqlBC As New SqlBulkCopy(conn)
                '定义一次批量的插入的数据量 
                sqlBC.BatchSize = 50000
           
                '设置要批量写入的表 
                sqlBC.DestinationTableName = "承保信息"

                '自定义的datatable和数据库的字段进行对应 
                sqlBC.ColumnMappings.Add("车牌号", "车牌号")
                sqlBC.ColumnMappings.Add("车架号", "车架号")
                sqlBC.ColumnMappings.Add("发动机号", "发动机号")
                sqlBC.ColumnMappings.Add("保单号", "保单号")
                sqlBC.ColumnMappings.Add("签单日期", "签单日期")
                sqlBC.ColumnMappings.Add("保险起期", "保险起期")
                sqlBC.ColumnMappings.Add("保险止期", "保险止期")
                sqlBC.ColumnMappings.Add("GUID", "GUID")

                '批量写入 
                sqlBC.WriteToServer(dt)
            End Using
            conn.Dispose()
        End Sub
    复制代码

    Adapter.Update生成的SQL语句

    exec sp_executesql N'INSERT INTO [承保信息] ([车牌号], [车架号], [发动机号], [保单号], [签单日期], [保险起期], [保险止期], [GUID]) VALUES (@p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8)', N'@p1 nvarchar(7),@p2 nvarchar(8),@p3 nvarchar(7),@p4 nvarchar(22),@p5 datetime,@p6 datetime,@p7 datetime,@p8 char(36)', @p1 = N'闽D17867', @p2 = N'04353437', @p3 = N'4106392', @p4 = N'PDAA200835020117022132', @p5 = '12  8 2008 12:00:00:000AM', @p6 = '01  1 2009 12:00:00:000AM', @p7 = '12 31 2009 12:00:00:000AM', @p8 = '0d603eb4-4040-4d84-833d-1566c5dad4f0'

    SqlBulkCopy生成的SQL语句

    insert bulk 承保信息 ([车牌号] NVarChar(50) COLLATE Chinese_PRC_CI_AS, [车架号] NVarChar(50) COLLATE Chinese_PRC_CI_AS, [发动机号] NVarChar(50) COLLATE Chinese_PRC_CI_AS, [保单号] NVarChar(50) COLLATE Chinese_PRC_CI_AS, [签单日期] DateTime, [保险起期] DateTime, [保险止期] DateTime, [GUID] Char(100) COLLATE Chinese_PRC_CI_AS)
  • 相关阅读:
    class11_创建新的输出字段P2
    class10_创建新的输出字段
    class09_高级过滤数据
    Markdown高级语法
    class08_过滤数据
    class07_查询数据
    class06_插入数据
    class05_操纵表
    class04_创建表02
    class03_Create a new table by SQL
  • 原文地址:https://www.cnblogs.com/kevinhome/p/2812323.html
Copyright © 2011-2022 走看看