我正在尝试从大小为80MB的大型excel文件导入数据包含大约。使用VB.NET将200万行放入SQL服务器表。
我使用BulkCopy方法将数据复制到SQL Server表中。但它在读取大型Excel文件数据时给出了OutOFMemoryException错误。从Excel加载大数据以解决此问题时是否有更好的方法。
此外,我将列数据类型指定为nvarchar(max)。有没有解决方法,我可以在动态创建表时选择适当的数据类型。
以下是代码段:
Public Function BulkInsertDataTable(ByVal connectionString As String, ByVal tableName As String, ByVal table As DataTable, ByVal con1 As SqlConnection, ByVal tran As SqlTransaction) As Boolean
''IN USE - DO NOT REMOVE
Dim cmd1 As SqlCommand
Dim qry1 As String
If con1.State <> ConnectionState.Open Then
con1.Open()
End If
Dim tname As String = tableName
qry1 = "CREATE TABLE [" & tname & "] ("
Dim bulkCopy As New SqlBulkCopy(con1, SqlBulkCopyOptions.Default, tran)
bulkCopy.DestinationTableName = "[" & tableName & "]"
For j = 0 To table.Columns.Count - 1
If j <> table.Columns.Count - 1 Then
qry1 = qry1 & "[" & table.Columns(j).ColumnName & "] nvarchar(max),"
Else
qry1 = qry1 & "[" & table.Columns(j).ColumnName & "] nvarchar(max))"
End If
bulkCopy.ColumnMappings.Add(j, j)
Next
cmd1 = New SqlCommand(qry1, con1)
cmd1.Transaction = tran
cmd1.ExecuteNonQuery()
bulkCopy.WriteToServer(table)
bulkCopy.Close()
BulkInsertDataTable = True
End Function
答案 0 :(得分:0)
您可以在 SSIS 中创建一个流程来导入数据。
您可以查看下面的链接。
http://www.sqlshack.com/using-ssis-packages-import-ms-excel-data-database/
由于
答案 1 :(得分:0)
对于ETL(提取传输和加载)程序,加载的数据量可能需要以较小的块处理,而不是一次性读取。这降低了程序的整体内存需求,但这确实需要额外的逻辑来处理从一个数据块到下一个数据块的转换。程序需要有一种方法来确定在完成部分加载后仍需要加载哪些数据。通过这样做,程序应该避免遇到的内存不足异常。