首页 新闻 赞助 找找看

System.InvalidCastException: 无法将类型为“Oracle.DataAccess.Client.OracleConnection”的对象强制转换为类型“System.Data.OracleClient.OracleConnection”。

0
悬赏园豆:80 [待解决问题]

System.InvalidCastException: 无法将类型为“Oracle.DataAccess.Client.OracleConnection”的对象强制转换为类型“System.Data.OracleClient.OracleConnection”。

 

nhibernate配置文件...

问题补充: 准确来说是spring.net配置文件 <objects xmlns="http://www.springframework.net" xmlns:db="http://www.springframework.net/database"> mytudousi所说的,connection.connection_string,后面一长串字母是你自己定义的吗?
kingab的主页 kingab | 初学一级 | 园豆:135
提问于:2010-11-05 12:43
< >
分享
所有回答(2)
0
<?xml version="1.0" encoding="utf-8"?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<!-- properties -->
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="connection.driver_class">NHibernate.Driver.OracleClientDriver</property>
<property name="connection.connection_string">5F6A7BD18A9291C0F43F24EC771338FD39658833238D2E36ACE5EE13BAD2F125817C0F77AF436EFF6C85C8AFAA776F5CD7751DB9DFAFD50B</property>
<property name="show_sql">false</property>
<property name="dialect">NHibernate.Dialect.OracleDialect</property>
<property name="use_outer_join">true</property>
<mapping assembly="CZTSDM.Domain" />
<mapping assembly="CZTSDM.DAL" />
</session-factory>
</hibernate-configuration>

 

 

代码:

/// <summary>
/// session工厂
/// </summary>
private static ISessionFactory _sessionFactory = null;


/// <summary>
/// NHibernate Seesion产生工厂
/// </summary>
private static ISessionFactory SessionFactory
{
get
{
if (_sessionFactory == null)
{
Configuration cfg
= new Configuration();
Configuration myConfiguration
= cfg.Configure();
cfg.SetProperty(
"connection.connection_string", DESEncrypt.Decrypt( cfg.GetProperty("connection.connection_string")));
cfg.SetProperty(
"hibernate.connection.connection_string", cfg.GetProperty("connection.connection_string"));
_sessionFactory
= myConfiguration.BuildSessionFactory();
}
return _sessionFactory;
}
}
/// <summary>
/// 测试连接性
/// </summary>
/// <param name="StrCont"></param>
/// <returns></returns>
private static ISession SessionFactoryByForm(string StrCont)
{
Configuration cfg
= new Configuration();
Configuration myConfiguration
= cfg.Configure();
cfg.SetProperty(
"connection.connection_string", StrCont);
cfg.SetProperty(
"hibernate.connection.connection_string", StrCont);
ISessionFactory psessionFactory
= myConfiguration.BuildSessionFactory();
return psessionFactory.OpenSession();
}
 
如果是用nhibernate的话,楼主代码中应该不会出现和Oracle相关的连接的....
mytudousi | 园豆:450 (菜鸟二级) | 2010-11-05 12:53
0

NHibernate 使用 System.Data.OracleClient.dll ,而你使用了 Oracle.DataAccess.dll 。

Launcher | 园豆:45045 (高人七级) | 2010-11-05 13:02
我加载了Oracle.DataAccess.dll 为什么还不行了?
支持(0) 反对(0) kingab | 园豆:135 (初学一级) | 2010-11-05 13:10
@kingab:NHibernate默认使用 System.Data.OracleClient.dll 中的 OracleConnetion 来创建 DbConnection 实例,Oracle.DataAcess.dll中OracleConnection 也继承自 DbConnection,因此Oracle.DataAcess.dll中OracleConnection可以转换成 DbConnection,但是无法转换成System.Data.OracleClient.dll 中的 OracleConnetion,因为它们是两个不同的类型.
支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2010-11-05 13:27
默认使用System.Data.OracleClient.dll ,系统是可以运行的,只是在一张数据量大的表中,新插入数据时,很慢.. 所以想换用Oracle.DataAcess.dll,看看是否效率会高一点.. 不知道需要怎么配置?
支持(0) 反对(0) kingab | 园豆:135 (初学一级) | 2010-11-05 14:32
Galactica,你好! 想请教一下,在hibernate中可否不用MS默认的驱动访问数据库? 而是采用Oracle的驱动?
支持(0) 反对(0) kingab | 园豆:135 (初学一级) | 2010-11-05 14:49
@kingab:没用过NHibernate,不知道咋配,个人觉得吧,插入慢,先不要指着换类库,而是应该写两个简单的程序,一个用微软的OracleClient,一个用Oracle的ODP,运行一下插入的代码,看看是否有明显的速度差别。还有你是一次插一条,还是一次插多条,是不是多个线程都在执行插入,等等,这些都有优化的余地。
支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2010-11-05 15:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册