有需求要将几个操作oracle数据库的方法写到一个事务里面,用到了TransactionScope对象。但使用的时候不是很顺利,先是说不能嵌套事务,仔细检查原来的代码中,的确有事务,那个现在要把几个操作放到一个事务里面,只写删除了单个方法的事务。随之又报了另一个错误。
using (TransactionScope scope = new TransactionScope())
{
do_ora1();
do_ora2();
do_ora3();
scope.Complete();
}
[DllNotFoundException: 无法加载 DLL“oramts.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。] System.Data.OracleClient.OracleInternalConnection.Enlist(String userName, String password, String serverName, Transaction transaction, Boolean manualEnlistment) +157 System.Data.OracleClient.OracleInternalConnection.Activate(Transaction transaction) +68 System.Data.ProviderBase.DbConnectionInternal.ActivateConnection(Transaction transaction) +33 System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) +1318 System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) +100 System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +116 System.Data.OracleClient.OracleConnection.Open() +40
在网上查原因,各式各样的都有,我是这样的解决的:
我的oracle版本是10.2,我下载了一个oramts10.dll文件,将这个文件重命名为oramts.dll后复制到oracle\product\10.2.0\db_1\BIN下。就OK了。有些人说下载msvcrtd.dll到system32下面,我试了是没有的。