c# - 用于批量上传到 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# - Windows CE 5 中的 C# 应用程序最终崩溃
- matlab - 如何在 matlab.net.http.ResponseMessage 中存储从 GET 请求到文件的数据
- javascript - React - 如何在不丢失数据的情况下过滤列表?
- laravel - 验证规则 max 至少需要 1 个参数
- javascript - 将过滤器中的数组元素与另一个数组的其他元素进行比较
- python-2.7 - 用于读取图像的嵌套 for 循环
- javascript - 时尚组合模板下拉菜单不起作用
- php - php artisan PHP 警告需要 utoload.php):无法打开流:没有这样的文件或目录
- typescript - 如何在本机反应中从假服务器获取数据?
- r - 使用蜡笔自定义彩色控制台提示