【问题标题】:Where to put the await key word in stored procedure in c#c#中存储过程中的await关键字放在哪里
【发布时间】:2019-07-16 05:07:05
【问题描述】:

我想实现一个async 函数。我的问题是;我不知道在下面的代码中将 await 关键字放在哪里:

public async Task<List<ManualReadTag>> GetManuallyReadTags(ParameterManualTags model)
{
    var db = new ApplicationDbContext();
    using (var cnxn = db.Database.Connection)
    {
        cnxn.Open();

        var cmd = cnxn.CreateCommand();
        cmd.CommandText = "GetManualReadForDedicated";
        cmd.CommandType = CommandType.StoredProcedure;

        var dtFrom = cmd.CreateParameter();
        dtFrom.ParameterName = "@DateFrom";
        dtFrom.DbType = DbType.Date;
        dtFrom.Direction = ParameterDirection.Input;
        dtFrom.Value = model.DateFrom;

        var dTo = cmd.CreateParameter();
        dTo.ParameterName = "@DateTo";
        dTo.DbType = DbType.Date;
        dTo.Direction = ParameterDirection.Input;
        dTo.Value = model.DateTo;

        var lane = cmd.CreateParameter();
        lane.ParameterName = "@Lane";
        lane.DbType = DbType.Int32;
        lane.Direction = ParameterDirection.Input;
        lane.Value = model.Lane;

        var plaza = cmd.CreateParameter();
        plaza.ParameterName = "@Plaza";
        plaza.DbType = DbType.String;
        plaza.Direction = ParameterDirection.Input;
        plaza.Value = model.Plaza;

        cmd.Parameters.Add(dtFrom);
        cmd.Parameters.Add(dTo);
        cmd.Parameters.Add(lane);
        cmd.Parameters.Add(plaza);

        try
        {
            using (var reader = cmd.ExecuteReader())
            {
                var result = ((IObjectContextAdapter) db)
                    .ObjectContext
                    .Translate<ManualReadTag>(reader)
                    .ToList();
                return result;
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            MessageBox.Show(ex.Message);
            return null;
        }
    }
}

此代码有效,我只需要输入 await 关键字,这样我就可以使用 async。 请您指出正确的方法吗?

【问题讨论】:

    标签: c# .net stored-procedures async-await


    【解决方案1】:

    你可以试试ExecuteReaderAsync

    await cmd.ExecuteReaderAsync()
    

    【讨论】:

      【解决方案2】:

      到处都有异步 API。并且不要忘记处理所有一次性用品。

      public async Task<List<ManualReadTag>> GetManuallyReadTagsAsync(ParameterManualTags model)
      {
          var db = new ApplicationDbContext();
          using (var cnxn = db.Database.Connection)
          {
              using (var cmd = cnxn.CreateCommand())
              {
                  cmd.CommandText = "GetManualReadForDedicated";
                  cmd.CommandType = CommandType.StoredProcedure;
      
                  var dtFrom = cmd.CreateParameter();
                  dtFrom.ParameterName = "@DateFrom";
                  dtFrom.DbType = DbType.Date;
                  dtFrom.Direction = ParameterDirection.Input;
                  dtFrom.Value = model.DateFrom;
      
                  var dTo = cmd.CreateParameter();
                  dTo.ParameterName = "@DateTo";
                  dTo.DbType = DbType.Date;
                  dTo.Direction = ParameterDirection.Input;
                  dTo.Value = model.DateTo;
      
                  var lane = cmd.CreateParameter();
                  lane.ParameterName = "@Lane";
                  lane.DbType = DbType.Int32;
                  lane.Direction = ParameterDirection.Input;
                  lane.Value = model.Lane;
      
                  var plaza = cmd.CreateParameter();
                  plaza.ParameterName = "@Plaza";
                  plaza.DbType = DbType.String;
                  plaza.Direction = ParameterDirection.Input;
                  plaza.Value = model.Plaza;
      
                  cmd.Parameters.Add(dtFrom);
                  cmd.Parameters.Add(dTo);
                  cmd.Parameters.Add(lane);
                  cmd.Parameters.Add(plaza);
      
                  await cnxn.OpenAsync();
      
                  using (var reader = await cmd.ExecuteReaderAsync())
                  {
                      var result = ((IObjectContextAdapter)db)
                          .ObjectContext
                          .Translate<ManualReadTag>(reader)
                          .ToList();
                      return result;
                  }
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-02
        • 1970-01-01
        • 1970-01-01
        • 2012-03-12
        • 2016-03-06
        • 2010-09-18
        相关资源
        最近更新 更多