So ... I've got some static class with some method which returns some data to my Data Tables.
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()
That is only example code , it fails on any linq2sql , SqlAdapter Fill commands.
Here is details :
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:
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 ?