现在的位置: 首页 > 综合 > 正文

[转] Visual Basic使用OLE Automation方法访问Oracle数据库

2012年10月17日 ⁄ 综合 ⁄ 共 2117字 ⁄ 字号 评论关闭
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这些目录删除掉,就能解决。不然找死你也找不到原因。

抱歉!评论已关闭.