在MVC中使用SQL Store过程,与ExecuteScalar相反?

时间:2017-09-22 15:11:41

标签: sql-server asp.net-mvc

我试图在视图中显示SQL存储过程的多列/结果。 目前,我的控制器看起来像这样

    public class StatusController : Controller
{
    // GET: Status

    dbEntities  db = new dbEntities();

    public ActionResult Index()
    {

        db.Database.Connection.Open();
        var tdaydate = DateTime.Now;
        var command = db.Database.Connection.CreateCommand();
        command.CommandText = "dbo.pr_stored_procedure";
        command.Parameters.Add(new SqlParameter { ParameterName = "@day", SqlDbType = System.Data.SqlDbType.DateTime, Value = tdaydate });
        command.CommandType = System.Data.CommandType.StoredProcedure;

       var test = (command.ExecuteScalar());

        ViewBag.res = test;
        return View();
    }

}

我的观点有以下一行

@model IEnumerable<dbentity.Models.SP_Stored-ProcedureRESULTS>

@{
ViewBag.Title = "index";
}

<h2>index</h2>

<p>
@Html.ActionLink("Create New", "Create")
</p>
<table class="table">
<tr>
    <th>
        @Html.DisplayNameFor(model => model.rooms)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.ooo)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.rent)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.occupied)
    </th>
          etc
    <th></th>
</tr>

<tr>
    <td>
    @ViewBag.res;
        </td>
</tr>
@*@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.rooms)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ooo)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.rent)
        </td>
etc
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.rooms}) |
            @Html.ActionLink("Details", "Details", new { id=item.rooms }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.rooms })
        </td>
    </tr>
}*@

注意:FOREACH循环被注释掉了,因为它丢失了错误,我正在调试。

现在,这将返回第一列的值(应该使用ExecuteScalar命令),但是我需要做什么才能获得所有其他列/结果,以便我可以在视图中显示它们。 / p>

我尝试添加:

System.Data.SqlClient.SqlDataAdapter SqlDbAdapter = new
System.Data.SqlClient.SqlDataAdapter();
System.Data.DataSet SQLDataSet = new System.Data.DataSet();
SqlDbAdapter.SelectCommand = SqlDbCommand;
SqlDbAdapter.Fill(SQLDataSet);
SQLDataSet.Tables[0].TableName = "PR_Foo";

if (SQLDataSet.Tables.Count != 0) {
   Result1 = int.Parse(SQLDataSet.Tables[SQLDataSet.Tables.Count - 1].Rows[0][0].ToString());
   Result2 = int.Parse(SQLDataSet.Tables[SQLDataSet.Tables.Count - 1].Rows[0][1].ToString());
etc
}

到我的控制器(在command.CommandType = System.Data.CommandType.StoredProcedure; line之后),但VS抱怨SqlDbAdapter.SelectCommand = SqlDbCommand行(具体来说,SqlDBCommand ...&#34; SqlDbCommand dos不存在在当前的背景下#34;)

enter image description here

有人能告诉我如何存储22个不同的结果/列,以便我可以在视图中调用它们吗?

感谢

1 个答案:

答案 0 :(得分:1)

您是否尝试过ExecuteReader()并重复搜索结果? ExecuteScalar将尝试返回结果第一行的第一列。

将您的问题简化为最简单的复制可能会帮助您更快地找到答案。