这个帖子发在.net板块,求这里的oracle达人.http://topic.csdn.net/u/20110715/14/0cbaea62-91ed-45dd-8bb1-2e3d36a8adbf.html?seed=2143356063&r=74425049#r_74425049不知道怎么表述我这个问题了.本人是新手,不太懂oracle数据库.需求是这样的,C#开发一个客户端.
其中需要链接Oracle数据库.界面上有四个框,分别是Oracle数据库的IP地址,数据库名称(SID),用户名和密码.
然后我根据这四个变量组合oracle的链接字符串.头大啊,开发完毕需要安装oracle客户端.
后来去oracle官方网站上下载了客户端,设置了环境变量.
但是需要设置tnsnames.ora的内容,里面需要添加SID解析的东西.比如:# TNSNAMES.ORA Network Configuration File:C:\oracle\ora90\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.orcl =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.155)(PORT = 1521))
    )
    (CONNECT_DATA =
       (SID = orcl)
    )
  )但是用户设置的SID不一样,不能每次都去让用户手动添加这个解析吧??然后上网查了,可以动态写链接,无需修改上述文件.
帖子地址:
http://hi.baidu.com/ygysh88/blog/item/f33a1454f248d455d109064a.html写法变为: 
//connection.Append("Server=" + txtDataBaseIP.Text.Trim() + ";");
//connection.Append("Data Source=" + txtDataBaseName.Text.ToString().Trim() + ";");
//connection.Append("User Id=" + txtDataBaseUserName.Text.ToString().Trim() + ";");
//connection.Append("Password=" + txtDataBasePwd.Text.ToString().Trim() + ";");////(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)))(CONNECT_DATA =(SID = orcl)))
//connection.Append("Server=" + txtDataBaseIP.Text.Trim() + ";");
connection.Append("Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=" + txtDataBaseIP.Text.Trim() + ")(PORT =1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=" + txtDataBaseName.Text.Trim() + ")));");
//connection.Append("Data Source=(DESCRIPTION=(ADDRESS_LIST=(PROTOCOL=TCP)(HOST=" + txtDataBaseIP.Text.Trim() + ")(PORT=1521))(CONNECT_DATA=(SID=" + txtDataBaseName.Text.Trim() + ")));");
connection.Append("User Id=" + txtDataBaseUserName.Text.ToString().Trim() + ";");
connection.Append("Password=" + txtDataBasePwd.Text.ToString().Trim() + ";");  
但是后面的写法链接数据库的时候提示:ORA-12541:TNS:无监听程序前面的写法就很正常.但是需要设置tnsnames.ora文件.
麻烦各位懂oracle的老大,是否有无需设置tnsnames.ora文件,用C#直接链接oracle数据库的办法??
多谢了.

解决方案 »

  1.   

    检查一下连接串
    connection.Append("Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=" + txtDataBaseIP.Text.Trim() + ")(PORT =1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=" + txtDataBaseName.Text.Trim() + ")));");
    上面的;号是多余的
      

  2.   

    你先看下服务里面的监听有没有启动的。你用什么连接oracle呢,是用VS自带的oracleClient还是用oracle的odp.net。我用ODP.NET没问题。oracleClient在VS2010里会提示过时,如果你用PL/SQL 能连接DB,那可能是连接字符有问题。