【问题标题】:Crystal Reports with SQL Server 2005: Setting Transaction Isolation Level带有 SQL Server 2005 的 Crystal Reports:设置事务隔离级别
【发布时间】:2009-11-18 15:50:58
【问题描述】:

有没有办法在 Crystal Reports 查询 SQL Server 2005 数据库时指定transaction isolation level而不诉诸以下任何一种方法:

  • 将报表的查询封装在一个存储过程中,该过程在查询本身之前执行SET TRANSACTION ISOLATION LEVEL...
  • 在 Crystal Reports 中手写 SQL 查询以执行SET TRANSACTION ISOLATION LEVEL...

【问题讨论】:

  • 你用什么连接服务器? (即通过 SqlClient、ODBC、OleDb 的 ADO.NET?JDBC?等)
  • @chadhoc:我正在尝试通过 Crystal Reports 应用程序来完成这项工作。我不是在编写代码来使用您提到的数据库连接库。我希望 Crystal Reports 在 使用数据库连接库时自动配置其数据库连接。
  • 废话,我很害怕 - 不幸的是,我不会在那里提供太多帮助。我认为如果您通过 C.R. 使用 ODBC,您可以选择进行一些注册表更新,或者在系统上创建一个 DSN 来指定您要使用的 iso 级别,但如果您使用其他任何东西(即OleDb、JDBC 等)我不会提供太多帮助。

标签: sql-server crystal-reports isolation-level transaction-isolation


【解决方案1】:

我能够将它嵌入到 Command 对象中:

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ

--Command objects need to return a value
SELECT GetDate()

这个 Command 对象是我在 Database Expert 中“编写”的查询的补充

能否详细说明设置 ISOLATION LEVEL 的必要性?

【讨论】:

  • 感谢您的回答!该命令是否会在实际查询之前执行 并在同一连接中执行(事务隔离级别基于逐个连接的连接)?我尝试将此添加到新报表中,Crystal Reports 给了我“您当前的链接配置包含多个起点”警告,从而让我想知道哪个先执行。
  • 我希望设置事务隔离级别,因为我们的一份报告有一个长时间运行的查询(约 2 分钟),该查询从常用表中选择所有行。因为这会锁定(共享锁定)这个常用表中的每一行,所以在查询完成之前没有其他人能够更新它。
  • 老实说,我不知道它何时会执行相对于“主”查询。这是你可以测试的东西吗?另一个想法:也许您可以为报告生成的查询创建一个特殊帐户并设置此帐户隔离级别。
  • 我不认为可以在每个用户的基础上指定事务隔离级别。您是否有示例说明我将如何为特定报告的用户配置此功能?
  • 我没有。我什至不确定你能做到,但我想我会提到它作为一个想法。 DBA 应该能够回答这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-12
  • 2015-09-25
  • 2013-11-20
  • 1970-01-01
  • 2011-12-17
  • 2018-02-02
相关资源
最近更新 更多