大量数据快速插入到DB

来源:互联网 发布:spycall软件免费下载 编辑:程序博客网 时间:2024/05/22 10:44

许多时候需要上传一个excel文件到服务器端,然后将excel中大量数据导入到DB,

如果写正常的插入sql语句速度比较慢,用以下方法比较快。

''' <summary>
    ''' 插入临时表
    ''' </summary>
    ''' <param name="tbInfo"></param>
    ''' <param name="userId"></param>
    ''' <remarks></remarks>
    Private Sub BatchInsertInfo(ByVal tbInfo As DataTable, ByVal userId As String)
        Dim strConn As String

        Dim tableName As String = "EmployeeMaster_Import_Tmp"
        Dim dr As DataRow
        Dim queryString As String
        Dim dt As DateTime = Now
        Dim connection As New SqlConnection

        Try
            strConn = "数据库连接字符串"
            queryString = "select * from EmployeeMaster_Import_Tmp where UserID = '' "

            'Using connection As New OracleConnection(strConn)
            connection = New SqlConnection(strConn)

            Dim adapter As New SqlDataAdapter()
            adapter.SelectCommand = New SqlCommand(queryString, connection)
            Dim builder As SqlCommandBuilder = New SqlCommandBuilder(adapter)

            connection.Open()

            Dim dataSet As DataSet = New DataSet
            adapter.Fill(dataSet, tableName)

            ' Code to modify data in DataSet here
            Dim table As DataTable = dataSet.Tables(tableName)

            For i As Integer = 0 To tbInfo.Rows.Count - 1
                dr = tbInfo.Rows(i)

                table.Rows.Add(table.NewRow)
                table.Rows(table.Rows.Count - 1).Item(0) = userId
                table.Rows(table.Rows.Count - 1).Item(1) = dr(0)

                。。。

                table.Rows(table.Rows.Count - 1).Item(17) = userId
                table.Rows(table.Rows.Count - 1).Item(18) = dt
                table.Rows(table.Rows.Count - 1).Item(19) = userId
                table.Rows(table.Rows.Count - 1).Item(20) = dt
                table.Rows(table.Rows.Count - 1).Item(21) = ""
                table.Rows(table.Rows.Count - 1).Item(22) = ""
            Next

            builder.GetUpdateCommand()

            ' Without the SqlCommandBuilder this line would fail.
            adapter.Update(dataSet, tableName)


            'End Using
        Catch ex As Exception
            '异常抛出
            Throw ex
        Finally
            '如何连接打开中,则关闭
            If (connection.State = ConnectionState.Open) Then
                '关闭数据库连接
                connection.Close()
            End If
        End Try

    End Sub