I am just learning to use Parallel.Invoke()
and am trying to wrap my mind around returning multiple DataSets()
For example, let's take the sample syntax below - how could I use the method ExecuteSqlQuery()
for each one of the 3 DataSets()
I need returned?
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Parallel.Invoke(
new Action(GetFirstGraders),
new Action(GetSecondGraders),
new Action(GetThirdGraders)
);
}
}
private void GetFirstGraders()
{
datasetttt1stgrade = FirstGraders();
gv1.DataSource = datasetttt1stgrade;
gv1.DataBind();
}
private void GetSecondGraders()
{
datasetttt2ndgrade = SecondGraders();
gv2.DataSource = datasetttt2ndgrade;
gv2.DataBind();
}
private void GetThirdGraders()
{
datasetttt3rdgrade = ThirdGraders();
gv3.DataSource = datasetttt3rdgrade;
gv3.DataBind();
}
public DataSet FirstGraders()
{
datasetttt = new DataSet();
SqlQueryBuilder = new StringBuilder();
SqlQueryBuilder.Append("exec FirstGraders ");
datasetttt = ExecuteSqlQuery(databaseConnection, SqlQueryBuilder.ToString());
datagridInfo.DataSource = datasetttt;
datagridInfo.DataBind();
}
public DataSet SecondGraders()
{
datasetttt = new DataSet();
SqlQueryBuilder = new StringBuilder();
SqlQueryBuilder.Append("exec SecondGraders ");
datasetttt = ExecuteSqlQuery(databaseConnection, SqlQueryBuilder.ToString());
datagridInfo.DataSource = datasetttt;
datagridInfo.DataBind();
}
public DataSet ThirdGraders()
{
datasetttt = new DataSet();
SqlQueryBuilder = new StringBuilder();
SqlQueryBuilder.Append("exec ThirdGraders ");
datasetttt = ExecuteSqlQuery(databaseConnection, SqlQueryBuilder.ToString());
datagridInfo.DataSource = datasetttt;
datagridInfo.DataBind();
}
public DataSet ExecuteSqlQuery(string connectionString, string sqlQuery)
{
try
{
connstring = System.Configuration.ConfigurationManager.AppSettings[connectionString].ToString();
dbconn = new SqlConnection(connstring);
cm = new SqlCommand(sqlQuery, dbconn);
dbconn.Open();
cm.CommandTimeout = 0;
datasetttt = new DataSet();
da = new SqlDataAdapter(cm);
da.Fill(datasetttt, "Data");
return datasetttt;
}
catch (Exception exception) { throw exception; }
finally
{
dbconn.Close();
cm.Dispose();
da.Dispose();
}
}
My Target Framework for this project is Net Framework 4
Why don't you use async/await methods and register them into the page in async mode? http://www.asp.net/web-forms/overview/performance-and-caching/using-asynchronous-methods-in-aspnet-45
UPDATE: I will share a sample of doing async processes using ASP.NET WebForms in 4.0. First I define an extension method utility for generating instances of PageAsyncTask:
Then, in the aspx file, you need to mark the page with the Async property as true:
Then, in your code-behind, just create a Task and register it like this sample:
Try this solution and see if it will work in your instance.
Software Cafe
(Please note this is a direct copy/paste in case the site goes down at any time)
I do not have a compiler on this machine, but something similar to this should allow you to return a dataset for each stored procedure, or this should at least be a good starting point. Ideally you would want to use a
using()
statement for each connection to ensure it disposes properly, but again this is a starting point