2016-12-27 10 views
0

サイズが80MBの大規模なExcelファイルからデータをインポートしようとしていますが、 VB.NETを使用してSQL Serverテーブルに200万行。SQL ServerのExcelファイルから大きなデータをインポートする方法

BulkCopyメソッドを使用してデータをSQLサーバーテーブルにコピーしました。しかし、大きな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

@AndrewMorton、それは私のCSVファイルからデータを読み取っている間にエラーが発生します。 csvData = File.ReadAllText(targetPathwithName) – rahul16590

答えて

0

、ロードされるデータの量は、むしろすべてを一度に読み出すより小さなチャンクで処理することを必要とするかもしれません。これは、プログラムの全体的なメモリ要件を低減しますが、データの1つのチャンクから次のチャンクへの移行を処理するために余分なロジックが必要になります。プログラムには、部分的な読み込みが完了した後で、まだどのデータを読み込む必要があるかを判断する手段が必要です。これにより、プログラムは遭遇したメモリ不足の例外を回避する必要があります。

関連する問題