zoukankan      html  css  js  c++  java
  • sql server数据库如何建立数据链接到ORACLE数据库,并通过链接查询ORACLE中的表。

    来源:http://topic.csdn.net/t/20050602/13/4053886.html#

    SQL   Server到Oracle连接服务器的实现  
    作者:中国论坛网收集   来源:http://www.51one.net   加入时间:2004-8-25  
    SQL   Server到Oracle连接服务器的实现  
    作者:Jennifer  
    本文以SQL   Server   2k为例说明SQL   Server到Oracle连接服务器的具体实现过程。
    1.要求pc机上安装oralce客户端软件和sqlserver2000软件。
    2.客户端的配置tnsnames.ora文件,配置所要连接的数据库服务器(windows,unix等平台均可以)
    eg:tnsnames.ora
    ......
    TEST   =
        (DESCRIPTION   =
            (ADDRESS_LIST   =
                (ADDRESS   =   (PROTOCOL   =   TCP)(HOST   =   10.1.11.90)(PORT   =   1521))
            )
            (CONNECT_DATA   =
                (sid   =   blue)
                (SERVER   =   DEDICATED)
            )
        )
    ......
    3.配置windows的ODBC数据源:
        开始菜单—》设置—》管理工具—》数据源(ODBC)—》进入配置用户DSN或者系统DSN均可以:添加—》选择Microsoft   ODBC   for   oracle—
    》自定义数据源名称(最好跟tns中连接串同名!)—》服务器名称(必填!填写tns文件中的连接串名称)—》完成。
    4.配置sqlserver2000中的连接服务器:
        企业管理器—》安全性—》连接服务器—》右键新建连接服务器—》定义连接名称;   选其他数据源;   指定程序名称为:Microsoft   OLE   DB  
    Provider   for   Oracle;     产品名称可不填;   数据源指定刚才ODBC中定义好的数据源名称;   提供程序字符串按以下格式填写:User  
    ID=username;Password=userpasswd(或者按如下格式:UID=username;PWD=userpasswd),这里的用户名和密码对应所要连接的oracle数据库中
    的用户名和密码   —》   安全性标签页里:设置用此安全上下文进行,并录入oracle的数据库用户名和密码—》服务器选项标签页可默认—》确
    定。
    5.准备工作全部完成啦!在sqlserver企业管理器—》安全性—》连接服务器打开刚建好的连接服务器—》点击表,即可在右边窗口看到该orac
    le数据库用户拥有的的所有表名,但在这里还并不能查看表的记录,这个需要在sqserver的查询分析器中用具体sql实现!访问表时,使用格式
    为:     [连接服务器名]..[ORACLE用户].[表名]。更详细具体的使用这里不再赘述。


    创建链接服务器以访问   Oracle   数据库实例  
          确保运行   SQL   Server   的服务器上的   Oracle   客户端软件已达到提供程序所要求的级别。用于   Oracle   的   Microsoft   OLE   DB   提供程序要求   Oracle   客户端软件支持文件的版本为   7.3.3.4.0   或更高版本,并且   SQL*Net   的版本为   2.3.3.0.4。
          在运行   SQL   Server   的服务器上创建指向   Oracle   数据库实例的   SQL*Net   别名。有关更多信息,请参见   Oracle   文档。
          执行   sp_addlinkedserver   创建链接服务器,指定   MSDAORA   为   provider_name,指定用于   Oracle   数据库实例的   SQL*Net   别名为   data_   source。 

     
    以下示例假设已将一个   SQL*Net   别名定义为   OracleDB。
         sp_addlinkedserver   'OrclDB ',   'Oracle ',   'MSDAORA ',   'OracleDB '
    使用   sp_addlinkedsrvlogin   创建从   SQL   Server   登录到   Oracle   登录的登录映射。  
    以下示例通过   Oracle   登录名   OrclUsr   和密码   OrclPwd   将   SQL   Server   登录   Joe   映射到步骤   3   中定义的链接服务器:
         sp_addlinkedsrvlogin   'OrclDB ',   false,   'Joe ',   'OrclUsr ',   'OrclPwd '


          每个   Oracle   数据库实例仅有一个名称为空的目录。Oracle   链接服务器中的表必须使用四部分名称格式   OracleLinkedServerName..OwnerUserName.TableName   进行引用。例如,以下   SELECT   语句引用   Oracle   用户   MARY   在   OrclDB   链接服务器映射的服务器上所拥有的表   SALES。
    SELECT   * FROM   OrclDB..MARY.SALES


    在 Oracle   链接服务器中引用表时,请使用以下规则:  
         如果在   Oracle   中创建的表名和列名没有引用的标识符,请全部使用大写字母名称。
         如果在   Oracle   中创建的表名和列名有引用的标识符,请全部使用与   Oracle   中创建名称时相同的字母大小写格式。
         INSERT   语句应为表中的所有列提供值,即使表中的某些列为   NULL   或有默认值。


    这个我的一个连接Oracle的语句
    exec   sp_addlinkedserver     'srv_lnk ', ' ', 'MSDAORA ', '远程服务器名或ip地址 '
    go
    exec   sp_addlinkedsrvlogin   'srv_lnk ', 'false ',null, 'oarcle用户名 ', '密码 '
    go
    select   *     from   openquery(srv_lnk, 'select   *   from   sys.tt ')     --sys.tt为sys用户下的表tt
    go

    --不用时,删除链接服务器
    exec   sp_dropserver   'srv_lnk ', 'droplogins '


    按照各位大侠的指引,我测试了一下,发现取数据时报一下错误,各位大侠能否解答?
    OLE   DB   提供程序   'MSDAORA '   报错。  
    [OLE/DB   provider   returned   message:   发生了一个   Oracle   错误,但无法从   Oracle   中检索错误信息。]
    OLE   DB   错误跟踪[OLE/DB   Provider   'MSDAORA '   IDBInitialize::Initialize   returned   0x80004005:       ]。


    解决方案
    若要解决此问题,则请在使用   LIKE   语句比较   Oracle   数据库中固定长度字段中的值时,每次都使用百分号   (%)   通配符。例如:   cmd.Parameters.Add( "@p1 ",   OleDbType.Char,   3).Value   =   "a% "
      返回页首  
    更多信息
    再现现象的步骤
    1.   在   Oracle   中,创建一个名为   TestTable   的表,如下所示:   Create   Table   TestTable   (c1   char(3));
    2.   将值 "a "插入表中,如下所示:   Insert   into   TestTable   c1   values( 'a ');
    3.   打开   Microsoft   Visual   Studio   .NET。  
    4.   在   Visual   Basic   .NET   中新建一个   Windows   应用程序项目。  
    5.   确保您的项目包含一个对   System.Data   名称空间的引用,如果未包含,请添加一个对此名称空间的引用。  
    6.   将一个   Command   按钮放在   Form1   上,将其   Name   属性更改为   btnTest。  
    7.   对   System   和   System.Data   名称空间使用   Imports   语句,这样,在后面的代码中就不需要在这些名称空间中限定声明了。   Imports   System
    Imports   System.Data
    Imports   System.Data.OleDb
    8.   复制以下代码并将其粘贴到代码窗口中 "Windows   窗体设计器生成的代码 "区域之后的位置:   Private   Sub   btnTest_Click(ByVal   sender   As   System.Object,   _
    ByVal   e   As   System.EventArgs)   Handles   btnTest.Click
    Dim   sConnectionString   As   String   _
    =   "Provider=MSDAORA.1;User   ID=scott;password=tiger; "_
    "Data   Source=myOracleServer;Persist   Security   Info=False "
    Dim   mySelectQuery   As   String   _
    =   "SELECT   *   FROM   TestTable   where   c1   LIKE   ? "
    Dim   myConnection   As   New   OleDbConnection(sConnectionString)
    Dim   myCommand   As   New   OleDbCommand(mySelectQuery,   myConnection)
    'To   resolve   this   problem,   change   the   parameter
    'in   the   next   line   to   use   "% "   wildcard   character.
    myCommand.Parameters.Add( "@p1 ",   OleDbType.Char,   3).Value   =   "a "
    myConnection.Open()
    Dim   myReader   As   OleDbDataReader   =   myCommand.ExecuteReader()
    Dim   RecordCount   as   Integer
    Try
    While   myReader.Read()
    RecordCount   =   RecordCount   +   1
    MessageBox.Show(myReader.GetString(0).ToString())
    End   While
    If   RecordCount   =   0   then
    MessageBox.Show( "No   data   returned ")
    Else
    MessageBox.Show( "Number   of   records   returned: "   &   RecordCount)
    End   If
    Catch   ex   As   Exception
    MessageBox.Show(ex.ToString())
    Finally
    '   Always   call   Close   when   done   reading.
    myReader.Close()
    myConnection.Close()
    End   Try
    End   Sub
    9.   保存项目。  
    10.   从调试菜单上,单击启动以运行您的项目。  
    11.   单击该按钮。注意此时未返回任何数据。  
    12.   更改参数以使用 "% "通配符,如下所示:   myCommand.Parameters.Add( "@p1 ",   OleDbType.Char,   3).Value   =   "a% "
    13.   再次运行该项目。注意此时成功返回了数据。 


    我是在SQL   SERVER   查询分析器里执行的,并且没有加任何查询条件啊。
    还有几点不明白的地方:
    1   .确保运行   SQL   Server   的服务器上的   Oracle   客户端软件已达到提供程序所要求的级别。用于   Oracle   的   Microsoft   OLE   DB   提供程序要求   Oracle   客户端软件支持文件的版本为   7.3.3.4.0   或更高版本,并且   SQL*Net   的版本为   2.3.3.0.4。    
    如何知道是否满足以上要求
    2.使用   sp_addlinkedsrvlogin   创建从   SQL   Server   登录到   Oracle   登录的登录映射。  
    以下示例通过   Oracle   登录名   OrclUsr   和密码   OrclPwd   将   SQL   Server   登录   Joe   映射到步骤   3   中定义的链接服务器:
    sp_addlinkedsrvlogin   'OrclDB ',   false,   'Joe ',   'OrclUsr ',   'OrclPwd '
    SQL   Server   登录   Joe   ???
    SELECT   *
    FROM   OrclDB..MARY.SALES  
    如上在SQL   SERVER   查询分析器里执行,就报错。
    请谢谢。

  • 相关阅读:
    Linux Linux程序练习一
    Linux make语法
    python类的继承的两种方式
    Django中更新多个对象数据与删除对象的方法
    admin.ModelAdmin 后台管理关联对象,某个字段怎么显示值
    jQuery插件
    python Django Nginx+ uWSGI 安装配置
    Python3中urllib详细使用方法(header,代理,超时,认证,异常处理)
    爬虫
    ftplib模块
  • 原文地址:https://www.cnblogs.com/railgunman/p/1917787.html
Copyright © 2011-2022 走看看