zoukankan      html  css  js  c++  java
  • [转] Visual Basic使用OLE Automation方法访问Oracle数据库

    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这些目录删除掉,就能解决。不然找死你也找不到原因。
  • 相关阅读:
    java JDBC (一)
    java 线程(七)等待与唤醒
    java 线程(六)死锁
    java 线程(五)线程安全 Lock接口
    java 线程(四)线程安全 同步方法
    查询计算机启动了多长时间的工具
    查询计算机启动了多长时间的工具
    百度同步盘无法登陆,报错155010,对策
    百度同步盘无法登陆,报错155010,对策
    锁屏工具,解决三星S7迷你锁屏后不能通过指纹解锁的问题
  • 原文地址:https://www.cnblogs.com/lauer0246/p/1350983.html
Copyright © 2011-2022 走看看