oracle的oo4o
最近這個項目是vb.net和oracle。因為客戶的要求,沒有採用傳統的odbc,而是oracle提供的oo4o,全稱是Oracle Objects for OLE (OO4O)。從日本的資料看,這個效率最高,推薦使用。但是我看到的英文和中文,推薦的是odbc。到底誰好就不管了。這裡記下如何使用,和結果。
測試得到的連線速度是這樣的:1萬左右的記錄,插入或者修改的速度,大概是1個小時,平均167條/分,一條記錄大概0.36秒。
oo4o首先要進行安裝,在這裡去下載
http://www.oracle.com/technology ... dows/ole/index.html
這個很有用哦。官方網站,還有很多資料。
安裝完畢後,首先在vb.net中參照:oracle inpro server xxxxx type library。 中間的xxxxx是版本號碼
工程參照中能看到OracleInProcServer
相關類:
OraSession 會話
OraDatabase 資料庫
OraDynaset 動態集
程式中如下:
Imports OracleInProcServer
Private Shared objOraSess As OraSession
Private Shared objOraDb As OraDatabase
Private Shared data As OraDynaset
資料庫的串連
1)建立oracle的會話
objOraSess = CreateObject("OracleInProcServer.XOraSession")
2)串連資料庫
objOraDb = objOraSess.OpenDatabase(oracle伺服器名, 使用者名稱 & "/" & 口令, 0&)
說明:oracle伺服器名就是你在oracle監聽中設定的tns名稱。
OpenDatabase這個方法查不到。只有記住。
以後所有的操作都是由串連資料庫的物件的方法來完成。可以直接看定義,和協助就能找到了。
這裡說一下錯誤存放地點。串連資料庫的物件沒有建立的時候,錯誤都是放在會話物件的LastServerErrText(錯誤資訊)這樣的屬性中。而執行 sql這些的時候,串連資料庫物件已經建立,就是放在他的LastServerErrText屬性中。會話物件這個屬性沒有內容了。
執行sql文的方法
objOraDb.ExecuteSQL(Sql文)
檢索的方法
data = objOraDb.DbCreateDynaset(SQL文, 0) 注意:方法DbCreateDynaset也是在vb.net中不能直接找到的。
得到的這個動態集的功能和datatable的強大功能不能相比。但是有很多基本的。檢索是.FindFirst等,得到列名是. FieldName(列索引),得到列值.Fields(列索引或者列名).value。注意這個value也是查不到的,但是可以用,也必須用,大小不 敏感。.Delete可以刪除,另外也可以追加,修改,拷貝。以及看當前處於第幾條記錄等等。
例如:
Dim iCount As Integer
Dim iColLoop As Integer
Dim iRowLoop As Integer
Dim data As OraDynaset
Dim dRow As DataRow
Dim tQuaryTable As DataTable
tQuaryTable = New DataTable
data = objOraDb.DbCreateDynaset(“select * from xxxxx ”, 0)
建立離線資料表
iCount = data.Fields.Count
For iColLoop = 0 To iCount - 1
tQuaryTable.Columns.Add(New DataColumn(data.FieldName(iColLoop)))
Next
iRowLoop = 0
追加內容
While Not data.EOF
dRow = tQuaryTable.NewRow()
For iColLoop = 0 To iCount - 1
dRow.Item(iColLoop) = Gf_Null2Sp(data.Fields(iColLoop).value)
Next
tQuaryTable.Rows.Add(dRow)
iRowLoop = iRowLoop + 1
data.MoveNext()
End While
tQuaryTable是一個datatable。這個就是把動態集的內容轉到離線資料表datatable中去。
其他的要注意,重新安裝oo4o後,有可能會出現Imports OracleInProcServer沒有名字空間的錯誤。如果參照正確了。把obj,bin這些目錄刪除掉,就能解決。不然找死你也找不到原因。