【问题标题】:How to set transaction isolation level using classic ASP?如何使用经典 ASP 设置事务隔离级别?
【发布时间】:2015-09-12 02:19:00
【问题描述】:

我有一个classic ASP 页面,想将transaction isolation level 设置为READ UNCOMMITTED。使用this documentation 我想出了以下内容:

Set conn = GetConnection
conn.IsolationLevel = adXactReadUncommitted

'conn.BeginTrans

'conn.CommitTrans

Set cmd = Server.CreateObject("ADODB.Command")
Set cmd.ActiveConnection = conn

cmd.CommandType = adCmdText
cmd.CommandText = "INSERT INTO [dbo].[A] ([IsolationLevel]) SELECT CASE transaction_isolation_level  WHEN 0 THEN 'Unspecified'  WHEN 1 THEN 'ReadUncommitted'  WHEN 2 THEN 'ReadCommitted'  WHEN 3 THEN 'Repeatable'  WHEN 4 THEN 'Serializable'  WHEN 5 THEN 'Snapshot' END AS TRANSACTION_ISOLATION_LEVEL  FROM sys.dm_exec_sessions  where session_id = @@SPID"
Set rs = cmd.Execute()

response.write(conn.IsolationLevel)

最后一个response.write 给了我正确的256 (READ UNCOMMITTED) 但是当我查询表时我只得到ReadCommitted 记录。

谁能告诉我做错了什么?


这是GetConnection 函数的主体:

FUNCTION GetConnection()
    DIM strConnectionDotNet : strConnectionDotNet = "Data Source=..."
    SET GetConnection = Server.CreateObject("adodb.connection")
    GetConnection.connectionstring="Provider=sqloledb;" & strConnectionDotNet
    GetConnection.open
END FUNCTION

【问题讨论】:

  • 为什么不将所有的 sql 移动到存储过程中呢?这将使这种事情变得简单得多。我有一个更大的问题是你为什么要使用从经典 asp 中读取未提交的内容?这通常适用于 OLTP 系统,并且这种级别的隔离通常不是一个好主意,因为它可以并且将返回丢失和/或重复的行。
  • 我无法轻松地将代码包装在SQL object 中,因为t-sql 语句是在classic asp 页面中动态构建的。对于显示此类数据(重复行、幻读等)的给定查询,可以。
  • 当您开始在代码中构建 sql 语句时,这是一个非常滑的斜坡。这让我不寒而栗。您可以通过向查询中的每个表添加 nolock 提示来实现相同的目的。我经常看到人们想要使用 uncommitted,然后在随机时间结果不准确时感到困惑。
  • 语句很复杂。我需要在许多功能中多次添加WITH (NOLOCK)。这是遗留代码 - 我不喜欢它,但我现在需要处理它。不要担心未提交的数据 - 在这个业务案例中,使用此隔离级别非常有意义。

标签: sql-server tsql asp-classic isolation-level


【解决方案1】:

正如文档中所说:

注意:IsolationLevel 设置将在下一次之前生效 调用 BeginTrans。

这是一种奇怪,但我需要以下:

conn.BeginTrans
... sql statement is executed here
conn.CommitTrans

甚至认为T-SQL 语句是SELECT。此外,在conn.CommitTrans 之后,它仍然使用默认隔离级别(在数据库上下文中指定的级别)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多