ORA-01453: SET TRANSACTION must be first statement of transaction

 

参考:

http://blog.csdn.net/levine2008/archive/2009/09/01/4505887.aspx

http://social.msdn.microsoft.com/Forums/en/adodotnetdataproviders/thread/86e72cff-8c35-4994-8774-03535c06a744

 

suspect is the oracle oci.dll version. If below version 10.2 will cause this problem.
But if you want to solve this problem without update your oci.dll.
you just change this code 
ts=conn.BeginTransaction(IsolationLevel.ReadCommitted)
 to
ts=
conn.BeginTransaction( )

Do not set the IsolationLevel,

 

  成员名称 说明
由 .NET Compact Framework 支持 Chaos 无法改写隔离级别更高的事务中的挂起的更改。 
由 .NET Compact Framework 支持 ReadCommitted 在正在读取数据时保持共享锁,以避免脏读,但是在事务结束之前可以更改数据,从而导致不可重复的读取或幻像数据。 
由 .NET Compact Framework 支持 ReadUncommitted 可以进行脏读,意思是说,不发布共享锁,也不接受独占锁。 
由 .NET Compact Framework 支持 RepeatableRead 在查询中使用的所有数据上放置锁,以防止其他用户更新这些数据。防止不可重复的读取,但是仍可以有幻像行。 
由 .NET Compact Framework 支持 Serializable 在 DataSet 上放置范围锁,以防止在事务完成之前由其他用户更新行或向数据集中插入行。 
由 .NET Compact Framework 支持 Snapshot 通过在一个应用程序正在修改数据时存储另一个应用程序可以读取的相同数据版本来减少阻止。表示您无法从一个事务中看到在其他事务中进行的更改,即便重新查询也是如此。 
由 .NET Compact Framework 支持 Unspecified 正在使用与指定隔离级别不同的隔离级别,但是无法确定该级别。 

当使用 OdbcTransaction 时,如果不设置 IsolationLevel 或者将 IsolationLevel 设置为 Unspecied,事务将根据基础 ODBC 驱动程序的默认隔离级别来执行。

 

 

 

你可能感兴趣的:(ORA-01453: SET TRANSACTION must be first statement of transaction)