2011-01-09 104 views
0

我使用NHibernate与Web应用程序和Oracle 10g XE,目前我得到了以下错误:NHibernate的连接字符串问题

ORA-06413: Connection not open.

我的猜测是它与我的连接字符串的问题。下面是我的Web.config Hibernate配置:

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
    <session-factory name="MyProject.MyAssembly"> 
     <property name="connection.driver_class">NHibernate.Driver.OracleClientDriver</property> 
     <property name="connection.connection_string">Data Source=(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE)));User ID=myid;Password=mypassword</property> 
     <property name="show_sql">true</property> 
     <property name="dialect">NHibernate.Dialect.Oracle10gDialect</property> 
     <property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property> 
     <property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property> 
     <mapping assembly="Domain" /> 
    </session-factory> 
</hibernate-configuration> 

我使用下面的连接字符串也试过:

<property name="connection.connection_string"> 
    User ID=myid;Password=mypassword;Data Source=localhost 
</property> 

这导致以下错误:

ORA-12154: TNS:could not resolve the connect identifier specified.

任何人都可以提供任何见解,我可能在这里做错了吗?

编辑

我创建了相同的解决方案中一个控制台应用程序项目。我创建了一个具有相同设置的hibernate.cfg.xml文件,并将其添加到该项目中。我可以坚持没有问题的对象。

我已经将数据库从Oracle 10g切换到MySQL,并且它在Web应用程序中正常工作。为什么Oracle 10g只能在控制台应用程序中运行,而不能在Web应用程序中运行?

+0

看看这个:http://www.dba-oracle.com/t_ora_06413_connection_not_open.htm – Falcon 2011-01-09 22:31:04

回答

1

显然,Oracle 10g在64位系统上有点挑剔。最好的选择似乎是切换到MySQL。

0

我今天遇到这个错误,发现有趣的事情。 我试图用XE客户oracle.dataaccecc.dll作为参考及本声明

 sessionFactory = new NHibernate.Cfg.Configuration().Configure(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "NHibernate\\Oracle.cfg.xml")).BuildSessionFactory(); 
     

之前,我进入了这几行:

 
OracleConnection conn = new OracleConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings["connString"].ConnectionString); 
      conn.Open(); 
conn.Close(); 

所有的一切都开始工作。