VB.Net 如何將 Oracle 的 DataSet 資料 匯入 Access MDB 中
VB.Net 如何將 Oracle 的 DataSet 資料 匯入 Access MDB 中
如何將 Oracle 開啟 Dataset 中的 資料 匯入至 Access MDB Table 中呢 ?
方法其實有很多種 , 底下介紹一種方式給大家參考看看
l DataSet -> XML -> MDB Table
' ================================================================
請先加入參考 Oracle.DataAccess
Imports Oracle.DataAccess.Client
Imports System.Runtime.InteropServices
Public Class Form1
' Oracle SID 登錄資訊 , 請自行調整
Private strDSN As String = "資料來源"
Private strUID As String = "使用者"
Private strPWD As String = "密碼"
' Oracle ODP.Net 連線字串
Private strCn As String = "Data Source=" & strDSN & ";User Id=" & strUID & ";Password=" & strPWD
' SQL 語法 , 查詢資料用 ( Select ) , 請自行調整
Private strQry As String = "Select CustName,Tel,Address From Customer"
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
Dim cn As New OracleConnection(strCn) ' 建立 OracleConnection 執行個體
Dim da As New OracleDataAdapter(strQry, cn) ' 建立 OracleDataAdapter 執行個體
Dim ds As New DataSet ' 建立 Dataset 執行個體
Dim strMdbFile As String = "C:\TestDB.mdb" ' Access MDB 路徑 + 檔名 , 請自行調整
da.Fill(ds, "資料表名稱") ' 將資料填至資料集 ( 將會是 MDB 的 Table 名稱 )
CreateMDB(strMdbFile) ' 建立 Access MDB 檔案
DataSet_To_Access_MDB_Table(ds, strMdbFile) ' 將 DataSet 資料填至 MDB 中
End Sub
' 建立 Access MDB 檔案
Private Sub CreateMDB(ByVal strMDB As String)
' 根據 ProgID 建立 ADOX.Catalog 執行個體
Dim cat As Object = Activator.CreateInstance(Type.GetTypeFromProgID("ADOX.Catalog"))
' 使用 Catalog 的 Create 方法 , 透過 Jet OLEDB Driver 建立 Access MDB 資料庫
cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strMDB)
' 釋放 COM 物件所使用的資源
Runtime.InteropServices.Marshal.ReleaseComObject(cat)
End Sub
' 將 DataSet 中資料匯入至 Access MDB 中 ( 自動建立資料表格結構 )
Private Sub DataSet_To_Access_MDB_Table(ByRef ds As DataSet, ByVal strMDB As String)
' Windows 的暫存檔路徑位置 + XML 資料暫存檔
Dim strXML As String = Environment.GetEnvironmentVariable("Temp") & "\XMLdata.xml"
' 將 DataSet 寫成 XML 檔案。( 結構描述 + XML 資料)
ds.WriteXml(strXML, XmlWriteMode.WriteSchema)
' 根據 ProgID 建立 Access.Application ( Access ) 執行個體
Dim objApp As Object = Activator.CreateInstance(Type.GetTypeFromProgID("Access.Application"))
With objApp
.OpenCurrentDatabase(strMDB) ' 開啟 MDB 資料庫檔案
.ImportXML(strXML, 1) ' 建立資料結構 ( Table ) , 並匯入 XML 資料 ( 1 = acStructureAndData )
.CloseCurrentDatabase() ' 關閉資料庫
.Quit() ' 關閉 Access 執行個體
End With
' 釋放 COM 物件所使用的資源
Runtime.InteropServices.Marshal.ReleaseComObject(objApp)
' 刪除 XML 資料暫存檔
System.IO.File.Delete(strXML)
End Sub
End Class
' ================================================================
PS : 以上 Sample 以 ODP.Net 寫成
可自行調整成 System.Data.OracleClient 或 System.Data.OleDb 的寫法