sql-server - 既不支持隔离级别也不支持它的加强

标签 sql-server database sql-server-2008

使用

Microsoft SQL Server 2008 (SP1)

尝试像这样创建交易:

OleDbConnection con;
OleDbTransaction transaction = null;
...
transaction = con.BeginTransaction(IsolationLevel.Snapshot);

并得到错误:

System.Data.OleDb.OleDbException (0x8004D008): Neither the isolation level nor a strengthening of it is supported.
   at System.Data.OleDb.OleDbTransaction.ProcessResults(OleDbHResult hr)
   at System.Data.OleDb.OleDbTransaction.BeginInternal(ITransactionLocal

transaction) at System.Data.OleDb.OleDbConnectionInternal.BeginTransaction(IsolationLevel isolationLevel) at System.Data.OleDb.OleDbConnection.BeginTransaction(IsolationLevel isolationLevel)

我确保在 SQL Server Management Studio 中运行以下命令:

ALTER DATABASE mydb SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
ALTER DATABASE mydb  SET ALLOW_SNAPSHOT_ISOLATION ON;
ALTER DATABASE mydb  SET READ_COMMITTED_SNAPSHOT ON;
ALTER DATABASE mydb  SET MULTI_USER;

有什么我想念的吗?

最佳答案

用 SqlClient 替换 OleDb(正如 Oded 在评论中所建议的那样)。

或者,在开始事务之前执行此 SQL 命令:

SET TRANSACTION ISOLATION LEVEL SNAPSHOT;

关于sql-server - 既不支持隔离级别也不支持它的加强,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9726958/

相关文章:

sql - 用逗号或 "AND"连接数据库表列的所有值

mysql - 不确定 SQL Select 查询

SQL 比较集,第二部分 : How to join sets of sets

MySQL删除具有引用不存在ID的参数的行

c++ - 从 MySQL DB 缓存数据 - 技术和适当的 STL 容器?

mysql - SQL Server Management Studio 查看和更改表

sql-server - SQL 查询中的两个转义字符

c++ - QSqlQueryModel 提示我的数据库没有打开

sql - 根据条件计算

java - 我需要为 Java 代码创建一个独立的数据库(最好是 SQL Server)