晚安朋友,
我正在將一個檔案從重型 excel (200 MB) 上傳到 oracle,我正在使用 BackgroundWorker1 在后臺處理它,但是我無法計算執行時間或執行 oraclebulkcopy 能夠回圈和更新計數器并將其傳遞給進度條。
我正在嘗試:
for i: 0 to row_file_excel
BackgroundWorker1.reportprogress (i)
next
但它沒有回傳所需的結果,我必須將 row_file_excel 替換為加載 oraclebulkcopy 所需的時間,但我不知道如何找到作業時間。
如果無法獲得時間,我還能做什么?
我將不勝感激
太感謝了,
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 = 10.10.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
for i: 0 to row_file_excel '***here I want to calculate the execution time of the load (bulkCopy.WriteToServer(dr))******
BackgroundWorker1.reportprogress(i)
next
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
uj5u.com熱心網友回復:
我從來沒有使用過,OracleBulkCopy所以我不會嘗試撰寫詳細的代碼示例。我剛剛閱讀了相關檔案,所以我可以指出我認為你應該做的事情。
當您檢索資料時,您可以獲得要匯入的記錄總數并將其分配給Maximum您的ProgressBar. 您可以設定NotifyAfter屬性并處理每次復制許多行時要通知RowsCopied的物件的事件。OracleBulkCopy您指定的數字越小,引發事件的頻率越高,您的進度就越細,但您越會減慢整個程序。您將通過在每個事件上復制的行數來增加Value您的。ProgressBar
我不確定e事件處理程式的引數將為您提供什么。如果它提供了到目前為止復制的行數,那么您可以將其分配給Value屬性。如果它不提供計數,那么您只需將值添加NotifyAfter到Value屬性中即可。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/417830.html
標籤:
上一篇:VisualStudio幫助VisualBasic中的Weekday功能?
下一篇:unity跳轉腳本延遲
