当前位置:编程学习 > C#/ASP.NET >>

c#链接oracle 数据库问题

小女新手,用C#链接oracle database总是链接不进去。

代码如下:

 class Program      
    {
        static void Main(string[] args)
        {
            string connectionString = " User Id=HR; Password=abcdefg; Data Source=ORCL";
            OracleConnection connection = new OracleConnection(connectionString);
            connection.Open();
                Console.WriteLine("ServerVersion: " + connection.ServerVersion
                    + "\nDataSource: " + connection.DataSource);
                Console.ReadKey();

        }

namespace 里面加了Oracle.DataAccess.Client 和Oracle.DataAccess.Types,
感觉问题应该出在connectionString上面。
用户名和密码是HR,和abcdefg(这个用户名和密码可以登录iSQL*Plus,不知道是不是可以用在这里?

另外,ORCL应该是instance的名字,
通过SQL: 
select sys_context('USERENV','INSTANCE_NAME') 
from dual;
查到的。
而且在tnsnames.ora文件里面也能看到。
# tnsnames.ora Network Configuration File: C:\oracle\product\10.2.0\db_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 150.212.4.31)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
不知道这个ORCL是不是应该用在这个data source。

希望大家能帮我看看代码,分析分析~

非常感谢~~ --------------------编程问答-------------------- 你用的是ODP.NET数据提供程序吗?
貌似ORCL的连接字符串不是这样写的,和MS SQL不太一样 --------------------编程问答--------------------
引用 1 楼 aleosunny 的回复:
貌似ORCL的连接字符串不是这样写的,和MS SQL不太一样


以前写过的连接字符串,这是标准版的,貌似10G和11G版本的可以简写,具体的简写写法可以GOOGLE,不过标准版的适用于任何版本,所以保险点还是用这个吧。
"Password=登录密码;User ID=登录用户名;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=服务器IP地址、主机名)(PORT=端口号;一般默认是1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=数据库实例名;默认是orcl)))"  --------------------编程问答-------------------- 项目->添加引用->.NET->System.Data.OracleClient.dll
//首先添加两条引用
using System.Data.OracleClient;
using System.Data;

var connectionString = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)
(HOST=150.212.4.31) (PORT=1521)))(CONNECT_DATA=(SERVICE_NAME= orcl)));
User Id=HR; Password=abcdefg"; --------------------编程问答--------------------
// 前几天看到的Oracle万能连接字符串,挺好用的。

string oraclestring = @"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=你的IP)(PORT=端口))(CONNECT_DATA=(SERVICE_NAME=数据库名)));User Id=用户名;Password=密码";

            using (OracleConnection con = new OracleConnection(oraclestring))
            using (OracleCommand cmd = new OracleCommand("查询语句", con))
            {
                con.Open();
                Console.WriteLine(cmd.ExecuteScalar());
            }
--------------------编程问答--------------------
引用 2 楼 aleosunny 的回复:
引用 1 楼 aleosunny 的回复:
貌似ORCL的连接字符串不是这样写的,和MS SQL不太一样


以前写过的连接字符串,这是标准版的,貌似10G和11G版本的可以简写,具体的简写写法可以GOOGLE,不过标准版的适用于任何版本,所以保险点还是用这个吧。
"Password=登录密码;User ID=登录用户名;Data Source=(DESCRIPTION=(ADDRES……


谢谢大家~
这个字符串是不是可以在tnsnames.ora里面找到呢?我好像试过。好像也没有连接上。
谢谢指点。 --------------------编程问答--------------------
引用 3 楼 q107770540 的回复:
项目->添加引用->.NET->System.Data.OracleClient.dll
//首先添加两条引用
using System.Data.OracleClient;
using System.Data;

var connectionString = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)……


谢谢~~我一开始也是试的System.Data.OracleClient这个ADO.NET的inte易做图ce。
不过我运行的时候提示我说.NET 4.0版本这个dll已经要被弃用了。提示说最好用其他的。
于是我就使用了ODP.NET。
--------------------编程问答--------------------
引用 2 楼 aleosunny 的回复:
引用 1 楼 aleosunny 的回复:
貌似ORCL的连接字符串不是这样写的,和MS SQL不太一样


以前写过的连接字符串,这是标准版的,貌似10G和11G版本的可以简写,具体的简写写法可以GOOGLE,不过标准版的适用于任何版本,所以保险点还是用这个吧。
"Password=登录密码;User ID=登录用户名;Data Source=(DESCRIPTION=(ADDRES……


我刚才试了一下你的方法,这个HOST后面是跟什么地址呢。我跟之前装ORACLE DATABASE的Database Control management 地址 150.212.4.31这个地址显示错误是连接超时。
于是我尝试直接登录150.212.4.31em这个地址。无法登录。
我当时安装DATABASE的时候手动设置了静态IP,才装上。不知道是不是跟这个有关系?

后来我又尝试了设置这个HOST地址为我现在电脑连入internet的IP地址。这次错误显示的是无监听程序。
我之前已经用Net Configuration Assistant把监听程序给打开了。
不知道为什么还是这样。
请指教!
补充:.NET技术 ,  .NET Framework
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,