当前位置:Gxlcms > 数据库问题 > 使用.NET应用程序连接Oracle数据库

使用.NET应用程序连接Oracle数据库

时间:2021-07-01 10:21:17 帮助过:4人阅读


下载地址:http://www.oracle.com/technetwork/cn/database/enterprise-edition/downloads/index.html
注:本文使用的是64位的,如果你的机子不支持64位,请下载32位的。
  • Oracle Data Access Components(ODAC)(64位)
    此组件就是.NET应用程序与Oracle连接的桥梁,.NET应用程序就是通过此组件访问Oracle数据库。
    64位下载地址:http://www.oracle.com/technetwork/cn/database/windows/downloads/index-098472-zhs.html
    32位下载地址:http://www.oracle.com/technetwork/cn/database/windows/downloads/index-101312-zhs.html
    注:本文使用的是64位的,如果你的机子不支持64位,请下载32位的。
  • Oracle SQL Developer
    此工具是PL/SQL开发的可视化工具,如果你觉得用SQLPlus比较爽,那么不用下载此工具。
    下载地址:http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html
    注:本文使用的是64位的,如果你的机子不支持64位,请下载32位的。
  • 二、开始安装必需组件

    1、Oracle的安装比较简单,直接点击“下一步”到底就完成安装了。

    2、然后,也就是最最关键的一步,配置Oracle的listener.ora文件。我的这个文件在“C:\oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN”目录下,如果你把Oracle安装在其它地方,请到相关目录查找。找到该文件后,用记事本打开,然后我们需要添加一个“SID_DESC”节点,该节点内容如下:

    (SID_DESC =
    (GLOBAL_DBNAME = ORCL)
    (ORACLE_HOME = C:\oracle\product\11.2.0\dbhome_1)
    (SID_NAME = ORCL)
    )

    然后我们需要添加一个“DEFAULT_SERVICE_LISTENER”参数配置项,并将其值设为“ORCL”。如若没有配置此项,那么接下来在调用ODAC组件时将会一直报“ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA”的错误,切记!切记!就是这个逼玩意儿,耗了我一天时间,设计这个参数的人TMD的脑残!

    DEFAULT_SERVICE_LISTENER = ORCL

    所以,最终看到的listener.ora文件的内容应该是下面这样的,注意黄色部分:

    # listener.ora Network Configuration File: C:\oracle\product\11.2.0\dbhome_1\network\admin\listener.ora
    # Generated by Oracle configuration tools.

    SID_LIST_LISTENER =
    (SID_LIST =
    (SID_DESC =
    (GLOBAL_DBNAME = ORCL)
    (ORACLE_HOME = C:\oracle\product\11.2.0\dbhome_1)
    (SID_NAME = ORCL)
    )
    (SID_DESC =
    (SID_NAME = CLRExtProc)
    (ORACLE_HOME = C:\oracle\product\11.2.0\dbhome_1)
    (PROGRAM = extproc)
    (ENVS = "EXTPROC_DLLS=ONLY:C:\oracle\product\11.2.0\dbhome_1\bin\oraclr11.dll")
    )
    )

    LISTENER =
    (DESCRIPTION_LIST =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
    (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
    )

    DEFAULT_SERVICE_LISTENER = ORCL

    ADR_BASE_LISTENER = C:\oracle

    然后,tnsnames.ora文件也应进行相应的修改,修改后如下:

    # tnsnames.ora Network Configuration File: C:\oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN\tnsnames.ora
    # Generated by Oracle configuration tools.

    ORCL =
    (DESCRIPTION =
    (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
    )
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = ORCL)
    )
    )

    3、然后重启“OracleOraDb11g_home1TNSListener”服务和“OracleServiceORCL”服务。

    4、接着我们打开sqlplus命令行工具,然后输入“/as sysdba”以管理员身份登录Oracle,接着输入“startup”以启动数据库。正常情况应该是如下图所示:

    技术分享

    可是,如果显示的是下图所示,那该怎么办呢?

    技术分享

    这里推荐一篇我在网上找到的解决方案,地址:http://blog.csdn.net/lpftobetheone/article/details/11099785。大家可以参照这篇文章所述进行修复,注意,该文章的某些地方的描述与截图不符,请大家尽量以截图为准。如果实在不明白可以在下方留言给我。

    5、Oracle安装完了,也配置完了,现在我们需要创建一个表,并插入几条数据。我个人是不喜欢在sqlplus里面写sql语句,如果你喜欢,那么请直接跳至第6步。

    1) 解压我们下载的“sqldeveloper-4.0.3.16.84-x64.zip”压缩包,然后双击里面的“sqldeveloper.exe”就运行了,然后我们点击下图所示的“新建连接”的按钮:

    技术分享

    2) 按下图所示输入,然后点击连接:

    技术分享 技术分享

    3) 然后输入如下SQL语句:

    --创建suzy用户,密码为:orcl,默认表空间为:users
    create user suzy identified by orcl default tablespace users;

    --授权suzy用户不限制其表空间的使用
    grant unlimited tablespace to suzy;

    --授权suzy用户连接权限和资源访问的权限。
    grant CONNECT,RESOURCE to suzy;
    技术分享

    4) 然后运行SQL语句:

    技术分享

    5) 然后重复第 2) 步以“suzy”的身份登录:

    技术分享

    6) 然后编写创建表的SQL语句并执行:

    技术分享

    7) 然后插入两条记录:

    技术分享

    6、接下来就是安装ODAC组件了,先将下载的ODAC组件解压到一个目录,比方我这里解压到“C:\ODAC112021Xcopy_x64”这个目录。

    7、在上一步解压的路径下打开命令行,然后输入命令“install.bat”后回车。我们看到出现了一些命令提示信息,你可以根据你的需要进行选择,这里我选择安装全部ODAC组件,并把它安装到“C:\odp.net”,接着输入如下命令,并等待其完成:

    install.bat all C:\odp.net myhome

    8、接着打开“C:\odp.net”可以看到已经创建了很多文件,然后我们在此目录下打开命令窗口,输入命令“configure.bat”,我们依旧会看到命令提示信息,然后根据提示信息输入如下命令,并等待其完成:

    configure.bat all myhome

    9、使用VS新建控制台项目,然后添加引用“C:\Windows\Microsoft.NET\assembly\GAC_64\Oracle.DataAccess\v4.0_4.112.2.0__89b483f429c47342\oracle.dataaccess.dll”。当然,如果你的VS的GAC列表里面有“Oracle.DataAccess”,你就不需要费劲地跑到C盘的GAC目录里面去找了,我是因为在我VS的GAC列表里找不到,所以才跑C盘GAC目录里面找。

    10、编写测试代码,如下:

    static void Main(string[] args)
    {
    string connectionString = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
    using (OracleConnection conn = new OracleConnection(connectionString))
    {
    string sql = "select * from testorcl";
    using (OracleCommand cmd = new OracleCommand(sql, conn))
    {
    conn.Open();
    OracleDataReader reader = cmd.ExecuteReader();
    while (reader.Read())
    {
    string id = (reader.GetValue(0) ?? String.Empty).ToString();
    string name = (reader.GetValue(1) ?? String.Empty).ToString();
    Console.WriteLine(String.Format("ID={0}, Name={1}", id, name));
    }
    }
    }
    Console.ReadKey();
    }

    其中,连接字符串配置于“App.config”文件中,如下:

    <connectionStrings>
    <add name="connstr" connectionString="Data Source=127.0.0.1;User ID=suzy;Password=orcl;" providerName="Oracle.DataAccess.Client"/>
    </connectionStrings>

    然后,将项目的目标平台设为“x64”,否则会运行失败。当然,如果你的机子是32位的就要选“x86”平台。

    技术分享

    11、运行结果如下:

    技术分享

    至此,使用.NET应用程序连接Oracle的一般步骤就是这样。当然,Oracle也提供了支持EntityFramework的相关类库,感兴趣的同学可以去Oracle官网搜搜看。

    参考文献
    • http://ora-12xyz.com/error/ORA-12504
    • http://gerardnico.com/wiki/database/oracle/listener.ora
    • http://blog.csdn.net/lpftobetheone/article/details/11099785

    使用.NET应用程序连接Oracle数据库

    标签:

    人气教程排行