首页 > 解决方案 > 用于批量上传到 oracle 的可视化或开源库用于批量上传到 oracle 的开源库

问题描述

朋友们下午好,

我正在使用 excel 文件 (xlsx) 将大量数据加载到 oracle,但在加载 160 MB excel 文件(超过 100 万条记录和 40 列)时遇到问题。高达 100MB,700K 正在加载我,它需要一点但加载。

我正在考虑停止使用 bulkCopy 库,并寻找另一种方法来做到这一点,你能告诉我是否有任何开源库可以更好或更有效地将文件上传到 oracle。

对于 160MB 的文件(超过 100 万条记录),我收到以下消息:

mscorlib.dll 中的 SYSTEM.OutOfMemoryException

清楚地表明我缺少记忆。

1-所有大容量加载方法都将文件加载到内存中吗?

2-在我分享的代码中,有没有一种方法可以读取 excel“select * from [file$]”过程的 50% 内容,然后读取另外 50% 以免出现内存问题。

3-我可以在同一台计算机上拥有 ODP.NET 32 位和 64 位,而不会产生冲突。

我正在使用 oracle ODP.NET 32 位库,因为我们无法安装 64 位库,所以我正在评估寻找可以完成这项工作的开源库。

我将不胜感激任何评论和帮助。

谢谢,问候。

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Dim _connString As String = "Data Source=(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.1.100.1)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = ORACLE))); User Id=USER; password=PASS;"
        Dim rutacarpeta As String
        Dim NombreArchivo As String
        Dim tablaBBDD As String
        'Dim ot As OracleTransaction = conn.BeginTransaction(IsolationLevel.ReadCommitted)
        Using conn As OracleConnection = New OracleConnection(_connString)
            conn.Open()
            Dim ot As OracleTransaction = conn.BeginTransaction(IsolationLevel.ReadCommitted)
            Try

                rutacarpeta = "C:\2021\"
                NombreArchivo = "FILE_0.xlsx"
                tablaBBDD = "FILE_TEST"
                Dim xlsxConn As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0 Xml;HDR=Yes;IMEX=1;';"
                xlsxConn = String.Format(xlsxConn, rutacarpeta + NombreArchivo).Trim()

                Using excel_con As OleDbConnection = New OleDbConnection(xlsxConn)
                    excel_con.Open()
                    'Dim hoja As String = excel_con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing).Rows(0)()
                    Dim command As OleDbDataAdapter = New OleDbDataAdapter ("SELECT * FROM [FILE$]", excel_con)

                    Dim dtset As new dataset
                    command.fill(dtset)
                     dim dr as datatable =dtset.tables(0)
                     row_file_excel=dr.rows.count

                    Using bulkCopy As OracleBulkCopy = New OracleBulkCopy(conn)
                        bulkCopy.BulkCopyTimeout = 90000
                        bulkCopy.DestinationTableName = tablaBBDD
                     

                   bulkCopy.WriteToServer(dr)

                        ot.Commit()

                        bulkCopy.Close()
                    End Using
                End Using

            Catch ex As Exception
                Try
                    ot.Rollback()
                Catch ex1 As Exception
                    MessageBox.Show(ex1.Message)
                End Try

                MessageBox.Show(ex.Message)

            End Try
        End Using
    End Sub

标签: c#asp.netvb.netvisual-studio

解决方案


推荐阅读