Visual Basic使用OLE Automation方法訪問Oracle資料庫

來源:互聯網
上載者:User
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這些目錄刪除掉,就能解決。不然找死你也找不到原因。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.