忙碌的DataReader打破我的网站 [英] Busy DataReader breaking my Web Site

查看:94
本文介绍了忙碌的DataReader打破我的网站的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以...我有一些的静态类一些其中的一些数据返回给我的数据表的方法。

So ... I've got some static class with some method which returns some data to my Data Tables.

麻烦的是的多路访问以这种方法。当设置为不同的客户端会话的同时调用此方法 DataReaded失败与我需要关闭当前命令(DataReader的)错误之前开始新的。我甚至试过使用锁定但这并没有作出任何意义。

The trouble is multi-access to this method. When to different Client Sessions call this method in the same time DataReaded fails with error that I need to close current command (DataReader) before start new one. I even tried to use Lock but this didn't made any sense.

    private RepGroupsDataSourcelocker = Object()
    public RepGroupsDataSource() : array[(string * int)]
        lock(RepGroupsDataSourcelocker)
            def res = linq<#from pr in _Rep_Permission
                    from rg in _Rep_Group
                    where (pr.ID_User == System.Web.HttpContext.Current.User.Identity.Name)
                    where (rg.RepGroup_ID == pr.ID_RepGroup)
                    order by rg.nOrder
                    select (rg.RepGroup_Name, rg.RepGroup_ID)
                    #>
            res.Take(7).ToArray()

这仅仅例如code,它没有任何LINQ2SQL,SqlAdapter填充命令。

That is only example code , it fails on any linq2sql , SqlAdapter Fill commands.

下面是详细信息:

System.InvalidOperationException was unhandled by user code
      Message = There is a designated this command Command open DataReader, which requires the prior close.
      Source = System.Data
      StackTrace:
           in System.Data.SqlClient.SqlInternalConnectionTds.ValidateConnectionForExecute (SqlCommand command)
           in System.Data.SqlClient.SqlConnection.ValidateConnectionForExecute (String method, SqlCommand command)
           in System.Data.SqlClient.SqlCommand.ValidateCommand (String method, Boolean async)
           in System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
           in System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
           at System.Data.SqlClient.SqlCommand.ExecuteReader (CommandBehavior behavior, String method)
           in System.Data.SqlClient.SqlCommand.ExecuteDbDataReader (CommandBehavior behavior)
           in System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader (CommandBehavior behavior)
           in System.Data.Common.DbDataAdapter.FillInternal (DataSet dataset, DataTable [] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
           in System.Data.Common.DbDataAdapter.Fill (DataTable [] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior)
           in System.Data.Common.DbDataAdapter.Fill (DataTable dataTable)
           in Flow_WEB_Nemerle.SQLModule.GetReport (String Param1, Int32 Param2, Int32 Group, Int32 DayOfMonth, String ContactHour, Int32 MyCase, Boolean ForDia, Int32 step, Int32 maximumRows, Int32 startRowIndex) in D: \ SVN \ FlowServer \ trunk \ FS WEB \ Flow_WEB_Nemerle2 \ SQLReportModule.n: line 96
      InnerException:

我怎样才能避免这种麻烦不会为它创建一个Windows服务/ WCF。我想非常快的解决方案...也许我需要与方法动态类?

How can I avoid this troubles without creating a Windows Service / WCF for it. I want really fast solution ... Maybe I need dynamic class with methods ?

推荐答案

该网站的服务器用于处理请求的多个线程。如果它们都使用相同的数据库连接,这是该网站一个瓶颈。

The web server uses several threads for handling requests. If they all use the same database connection, that is a bottle neck for the site.

您应该使用每个请求一个单独的数据库连接。这样,还有就是线程之间没有并发问题,并且不创建一个unneccesary瓶颈。

You should use a separate database connection for each request. That way there is no concurrency problems between the threads, and you don't create an unneccesary bottle neck.

这篇关于忙碌的DataReader打破我的网站的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆