【问题标题】:Microsoft report (rdlc) blocks saving data to SQL Server databaseMicrosoft 报告 (rdlc) 阻止将数据保存到 SQL Server 数据库
【发布时间】:2014-01-20 20:45:26
【问题描述】:

我们在 ASP.NET Web 窗体应用程序(在报表查看器控件上)中有一个复杂的 rdlc 报表,它会在报表生成期间阻止表中的所有行。在创建报表期间,如果我们尝试将数据(使用 EF 5.0)保存在报表从中获取数据的同一个表中,我们会收到以下异常:

 System.Data.SqlClient.SqlException: Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding. ---> 
 System.ComponentModel.Win32Exception: The wait operation timed out

--- End of inner exception stack trace ---

at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at System.Data.Objects.ObjectContext.ExecuteStoreCommand(String commandText, Object[] parameters)
...

我们在报告创建期间尝试使用未提交的读取隔离级别(如 [1] 中所述),但这没有帮助。我们能做什么?

[1] - http://www.c-sharpcorner.com/UploadFile/ff2f08/prevent-dead-lock-in-entity-framework/

【问题讨论】:

    标签: c# asp.net sql sql-server entity-framework


    【解决方案1】:

    您可以尝试将WITH(NOLOCK) 添加到 SSRS 查询中每个 FROM 语句的末尾:

    SELECT * 
    FROM table1 WITH(NOLOCK)
    

    不过,这相当于使用READ UNCOMMITTED,所以您可能看不出有任何区别。

    【讨论】:

    • 在调试和分析之后,报告生成似乎阻止了用户的应用程序。实际上,长请求(在报表查看器中创建报表)会阻止应用程序。它甚至没有进入数据库。
    猜你喜欢
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    相关资源
    最近更新 更多