Oracle 的驱动应该有一个安装程序,需要单独安装,并不需要将所有的文件都复制到你的目录下面。
你在使用企业库的时候,默认使用的应该是微软的 Oracle 驱动, 命名空间为 System.Data.OracleClient,使用 ODP 的话,应该是另外一个命名空间。
我考虑,你可以将企业库的配置检查一下,让企业库也使用 ODP 的程序集,在企业库的配置中应该可以的。
你检查一下。
连不上报什么错?单独测试和放到之前的项目中的运行时环境一样吗?
你的ODP.NET是Oracle宣布的全托管的代码实现吗?
单独测试只有ODP.NET,之前的项目中包含微软企业库,只有这点不一样
单独测试只有ODP.NET,之前的项目中包含微软企业库,只有这点不一样。
“ODP.NET是Oracle宣布的全托管的代码实现”这个我从哪里可以知道啊?
@小也: 不知道是否有更相似的异常堆栈信息〉?
Oracle.DataAccess.Client.OracleBulkCopy,你用 reflector 或者 ILSpy_Master 查看下该类需要设置哪些初始值。
之前的ODP.NET依赖Oracle Client组件,去年年底还是今年年初Oracle发了封邮件,宣布将发布完全采用托管代码的ODP.NET。所以你得去Oracle网站上看看。
@Launcher: 下面是通过reflector反编译出来的OracleBulkCopy方法,我觉得应该跟访问数据库驱动有关系。这么说吧,一个项目可以有两个同时存在的访问数据库驱动吗?如何让微软企业库跟Oracle.DataAccess.dll同时存在并使用呢?
public OracleBulkCopy(string connectionString)
{
this.COL_HEADER_SIZE = COL_NULLIND_SIZE + COL_LEN_SIZE;
this.SIZE_OF_CHAR = 2;
this.SIZE_OF_PTR = sizeof(IntPtr);
if (connectionString == null)
{
throw new ArgumentNullException("connectionString");
}
if (connectionString == string.Empty)
{
throw new ArgumentException(OpoErrResManager.GetErrorMesg(ErrRes.ODP_INVALID_VALUE, new string[] { "connectionString" }));
}
this.m_connection = new OracleConnection(connectionString);
this.m_ownConnection = true;
this.m_timeout = 30;
this.m_bulkCopyOptions = OracleBulkCopyOptions.Default;
}
@小也: 类型初始值异常,一般是类的静态变量的设置引发,不是由构造函数引发的。可以有多个访问书库的驱动,DbConnectionFactory 会根据不同的 Provider 来创建,不会引起冲突。你可以看一下你的连接字符串是否正确,可以尝试使用简单的 OracleConnection和OracleCommand 来执行一次简单的数据库查询任务来确定引发异常的原因是不是OracleBulkCopy特有的。