【问题标题】:Displaying the result set of a Db view in asp.net core view在 asp.net 核心视图中显示 Db 视图的结果集
【发布时间】:2020-06-28 16:38:31
【问题描述】:

我正在从我的 asp.net 核心应用程序执行一个存储过程。该过程从 db 视图执行 select 语句。 db 视图内部连接 ​​3 个表。当我执行以下代码时,结果集作为 int 抛出异常,因为剃刀视图需要 List,我需要将其作为列表接收,以便将其传递给剃刀视图并显示表格。我将不胜感激。

视图模型:

public class ViewModel
    {
        public int TimeKey { get; set; }
        public int FiscsalYear { get; set; }
        public string LocationNum { get; set; }
        public string Location { get; set; }
    }

查看:

@model List<FactWorkOrdersViewModel>
@{
    ViewBag.Title = "Stored Procedure Test";
}

<div class="container">
    <table class="table table-hover">
        <thead>
            <tr>
                <th colspan="5"><h3>Stored Procedures results</h3></th>

            </tr>
            <tr>
                <th>TimeKey</th>
                <th>Fiscal Year</th>
                <th>Location Number</th>
                <th>Location</th>
            </tr>
        </thead>
        <tbody>
            @foreach (var item in Model)
            {
            <tr>
                <td>
                    @item.TimeKey
                </td>
                <td>
                    @item.WorkOrderAltKey
                </td>
                <td>
                    @item.FiscsalYear
                </td>

                <td>
                    @item.LocationNum
                </td>
                <td>
                    @item.Location
                </td>

            </tr>
            }
        </tbody>
    </table>
<div>

控制器:

public IActionResult SPTest(ReportViewModel model)
    {
        DbConnection connection = db.Database.GetDbConnection();

            using (DbCommand cmd = connection.CreateCommand())
            {
                cmd.CommandText = "ExecuteReport";
                cmd.CommandType = System.Data.CommandType.StoredProcedure;

                cmd.Parameters.Add(new SqlParameter("@ReportId", model.ID));

                if (connection.State.Equals(ConnectionState.Closed))
                {
                    connection.Open();
                }

                var result = cmd.ExecuteScalar();

                //var result = cmd.ExecuteNonQuery();

                if (connection.State.Equals(ConnectionState.Open))
                {
                    connection.Close();
                }
                return View(result);

            }

【问题讨论】:

    标签: sql-server .net-core entity-framework-core


    【解决方案1】:

    这可能是重复的。 更多信息请参考What is the difference between ExecuteScalar, ExecuteReader and ExecuteNonQuery?

    简短回答:您需要 ExecuteReader 而不是 ExecuteScalar。 ExecuteScalar 返回第一行的第一列值。 ExecuteReader 将返回我们可以遍历并显示在您的页面上的行列表。

    【讨论】:

      【解决方案2】:

      我想通了,谢谢@Amogh

      public IActionResult SPTest(ReportViewModel model)
              {
                  List<ViewModel> viewModel = new List<ViewModel>();
      
                  using (SqlConnection conn = new SqlConnection("server=ServerName;database=DBName; user id=user_id; password=password; MultipleActiveResultSets=true"))
                  {
                      conn.Open();
      
                      SqlCommand cmd = new SqlCommand("ExecuteReport", conn)
                      {
                          CommandType = CommandType.StoredProcedure
                      };
      
                      cmd.Parameters.Add(new SqlParameter("@ReportId", model.ID));
      
                      using (SqlDataReader rdr = cmd.ExecuteReader())
                      {
                          while (rdr.Read())
                          {
                              foreach (var item in rdr)
                              {
                                  ViewModel vm = new ViewModel
                                  {
                                      TimeKey = (int)rdr.GetValue(0),
                                      FiscsalYear = (int)rdr.GetValue(2),
                                      LocationNum = (string)rdr.GetValue(5),
                                      Location = (string)rdr.GetValue(6)
                                  };
      
                                  viewModel.Add(vm);
                              }
                          }
                      }
                  }
      
                  return View(viewModel);
              }
      

      【讨论】:

        猜你喜欢
        • 2021-02-17
        • 2019-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-24
        • 2010-10-13
        相关资源
        最近更新 更多