vb.net中应用OO4O

Oracle objects for OLE(OO4O)是一组软件层,其设计目的是使与微软 COM 自动化和 ActiveX 兼容的语言直接访问 Oracle 数据库,这些语言包括 Visual Basic、Visual Basic for Application (VBA)、IIS Active Server Pages(ASP)、Windows 脚本宿主和 Visual C++。这些层是直接在 Oracle Call Interface(OCI)上编写的,绕过了标准的 ODBC、OLE DB 和ADO 层。虽然使用它创建的应用程序在使用其它数据库的时候会不兼容,但是它却能够直接地地访问 Oracle 数据库,而且能够更广地访问 Oracle 数据库。
开发人员可以使用 OO4O In-Process 自动化服务器来连接 Oracle 数据库服务器,还可以通过 COM 自动化对象执行 SQL 或 PL/SQL 过程。另外还有一种使用In-Process 服务器的方法,那就是从其接口“OracleInProcServer.XOraSession”为一个会话创建一个 COM 对象并访问子对象,如下面Visual Basic 的例子所示:
Set objSession = CreateObject("OracleInProcServer.XOraSession")
Set objDatabase = objSession.OpenDatabase("","scott/tiger",0)

使用一个数据库对象可以从数据库查询记录,或者直接执行 DLL 或 DML 语句。例如,下面是一段 VBA 脚本,它可以在 Microsoft Excel 中运行并取出 EMP 表中所有的数据然后添加到工作表的表格中:
Sub GetEmployees()
    ' Use OO4O
    Set objSession = CreateObject("OracleInProcServer.XOraSession")
    Set objDatabase = objSession.OpenDatabase("", "scott/tiger", 0)

    Sql = "select * from emp"

    Set oraDynaSet = objDatabase.DBCreateDynaset(Sql, 0)

    If oraDynaSet.RecordCount > 0 Then
        oraDynaSet.MoveFirst
        For x = 0 To oraDynaSet.Fields.Count - 1
            Cells(1, x + 1) = oraDynaSet.Fields(x).Name
            Cells(1, x + 1).Format = Bold
        Next

        For y = 0 To oraDynaSet.RecordCount - 1
            For x = 0 To oraDynaSet.Fields.Count - 1
                Cells(y + 2, x + 1) = oraDynaSet.Fields(x).Value
            Next
            oraDynaSet.MoveNext
        Next
    End If

    Set objSession = Nothing
    Set objDatabase = Nothing
End Sub

虽然可能通过 Data/External 数据源函数从一个外部数据源将数据填充到一个 Excel 电子表,但是这个宏提供了更加直接的控制,允许你准确地指定数据怎样读到电子表中;而且由于宏在访问 Oracle 数据库的时候不经过额外的层,所以其速度也比较快。它还提供附加的功能,包括存储和提取大二进制对象数据(比如说图像)的能力。
OO4O套件包括一个ActiveX 控件Oracle Data Control,它可以绑定到自定义控件,比如说那些在 Visual Basic 中使用的根据用户接口迭代的自动跟踪数据的控件。
OO4O 还包括一个 OLE C++ 类库,该类库为 Visual C++ 开发人员提供一个类似的访问机制,可以被绑定到基础类上。

 

 

先看一段程序:

    Public Function excToArr(ByVal sql As String, ByVal ar As ArrayList) As ArrayList
        Dim OracleDBSession As OracleInProcServer.OraSession
        Dim OraDatabase As OracleInProcServer.OraDatabase
        Dim dataDynaset As OracleInProcServer.OraDynaset
        Dim iColCount As Integer

        Dim strSERVER As String = "****"     '連接的數據庫服務名
        Dim strUSERNAME As String = "****"   '用戶名
        Dim strPASSWORD As String = "****"   '密碼

        Dim ar1 As ArrayList

        OracleDBSession = CType(CreateObject("OracleInProcServer.XOraSession"), OracleInProcServer.OraSession)
        OraDatabase = CType(OracleDBSession.OpenDatabase(strSERVER, strUSERNAME & "/" & strPASSWORD, 0), OracleInProcServer.OraDatabase)
        dataDynaset = CType(OraDatabase.CreateDynaset(sql, &H0&), OracleInProcServer.OraDynaset)
        iColCount = CType(dataDynaset.Fields, OracleInProcServer.OraFields).Count - 1

        Dim oraField As OracleInProcServer.OraField
        Dim oraFields As OracleInProcServer.OraFields

        Do While Not dataDynaset.EOF
            ar1 = New ArrayList
            For iColNumber As Integer = 0 To iColCount
                oraFields = CType(dataDynaset.Fields, OracleInProcServer.OraFields)
                oraField = CType(oraFields(iColNumber), OracleInProcServer.OraField)
                ar1.Add(oraField.Value)
            Next
            dataDynaset.MoveNext()
            ar.Add(ar1)
        Loop
        Return ar
    End Function

 

OraSession对象 通常被使用在应用程序中,管理OraDatabase、Oraconnection、 OraDynaset对象。 Set OraSession=createobject("OracleInProcServer.XOraSession")

 

OraDatabase对象 OraDatabase对象表示对数据库服务器一个虚拟的登入。 Set OraDatabase=OraSession.DbopenDatabase("数据库别名","用户名/密码",0)

 

OraDynaset对象 OraDynaset对象允许用户浏览或更新由 SQL SELECT所返回的数据。OraDynaset 必须属于唯一的OraDatabase对象,因此如果建立一个OraDynaset对象可以使用Oradatabase 的DbCreateDynaset或CreateDynaset,两种结果一样。

 

OraField对象 OraField对象是表示在OraDynaset对象中的某一行(row)中的一个字段(column)或者数据项目(data item), 另一个角度,OraField对象间接从OraDynaset对象的OraFields的数据集合取得其中一个字段的数据,其数据类型通常为万 能变量(Variant) 设置 OraFields.value=值 付值 变量名称=Orafields.value 其Fields集合表示如下: Orafields("名称").value Orafields(i).value

 

posted on 2009-06-04 12:46  美丽心情11  阅读(1057)  评论(0编辑  收藏  举报