使用RegisterAsyncTask参数查询

时间:2016-03-14 23:34:34

标签: c# asp.net asynchronous webforms task

@ Micha-kun向我指出了一个很好的例子,说明如何使用没有参数或直接的SQL查询来执行存储过程。但是,如果我需要做3个没有参数的存储过程2和1个带参数的存储过程怎么办?

private Task LoadDataAsync()
{
  var t1 = ExecuteQueryAsync(databaseConnection, "exec FirstGraders ");
  var t2 = ExecuteQueryAsync(databaseConnection, "exec SecondGraders ");
  var t3 = ExecuteQueryAsync(databaseConnection, "exec ThirdGraders ");
  return Task.Factory.ContinueWhenAll(new[] { t1, t2, t3 }, _ => {
    gv1.DataSource = t1.Result;
    gv1.DataBind();
    gv2.DataSource = t2.Result;
    gv2.DataBind();
    gv3.DataSource = t3.Result;
    gv3.DataBind();
  });
}

所以在上面的示例中,假设存储的proc exec ThirdGraders接受@teacher的字符串(sql server中的varchar)参数 - 我是否仍然可以使用{{1}给出的工作示例3}}只将参数添加到1个存储过程?

1 个答案:

答案 0 :(得分:0)

你尝试过这样的事吗?

private Task<DataSet> ExecuteSqlQueryAsync(string connectionString, string sqlQuery, Dictionary<string, object> parameters = null)
{
    return Task.Factory.StartNew(
    () =>
    {
        try
        {
            connstring = System.Configuration.ConfigurationManager.AppSettings[connectionString].ToString();
            dbconn = new SqlConnection(connstring);
            cm = new SqlCommand(sqlQuery, dbconn);
            dbconn.Open();
            cm.CommandTimeout = 0;
            if (params != null) {
                foreach(var pair in parameters)
                {
                    cm.Parameters.AddWithValue(pair.Key, pair.Value);
                }
            }

            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();
        }
    });
}

我还没试过这段代码。如果失败,修复滋扰。然后在你的代码中你可以使用这样的东西:

var t1 = ExecuteSqlQueryAsync(cnx, "SELECT * FROM SomeTable"); // Without params
var t2 = ExecuteSqlQueryAsync(
            cnx, 
            "SELECT * FROM SomeTable WHERE Property1 = @Value",
            new Dictionary<string, object> 
                {
                    {"@Value", 12}
                }); // With params