无法将存储过程保存到数组

时间:2017-07-12 17:30:16

标签: c# asp.net sql-server stored-procedures

我正在使用asp.net来处理从某个表返回列的SQL查询。通常我要做的是设置一个等于存储过程函数调用的变量,并在最后添加.ToArray(),这是我想要在这里做的但是我收到一条错误消息int does not contain a definition for toarray... < / p>

我很困惑,因为我遵循了我在程序的另一部分中使用的相同语法来进行类似的操作。之前它运作良好,但我无法弄清楚为什么它现在想与我对抗。

这是我的SQL:

IF OBJECT_ID('#temp') IS NOT NULL
    BEGIN
        DROP TABLE #temp
    END

--Create temp table to store data
CREATE TABLE #temp 
(
EventID nvarchar(50),
RunDate date,
SectionCode nvarchar(50),
SectionMapCode nvarchar(50),
DispSort int,
Capacity int,
Attendance int,
PctCap int,
HeatColor nvarchar(50)
)

DECLARE @runDate date = GETDATE()

INSERT #temp  Exec GamedayReporting.dbo.uspGetEventKillSheetDetailedReport @EventID, @runDate;

select Capacity from #temp;

这将返回我想要的SQL,但是当我在我的控制器中调用它时,我得到了上面发布的错误。

这是我的C#代码:

 public ActionResult Dropdown()
    {
        // add your code after post method is done
        var selectedOption = Request["eventId"];
        var date = DateTime.Today;
        var myQuery = db.uspGetEventKillSheetDetailedReport(selectedOption, date).ToArray();
        ViewData["query"] = myQuery;
        System.Diagnostics.Debug.WriteLine(myQuery);
        TempData["option"] = selectedOption;
        return RedirectToAction("Map");
    }

    public ActionResult Map()
    {
        var secAttendance = db.uspGetSectionAttendance("option").ToArray();
        var secCapacity = db.uspGetSecCapacity("option");
        var secMapCode = db.uspGetSectionMapCode("option");



}
    public JsonResult GetDropdownList()
    {


        var ids = db.uspGetAllEventIds().ToArray();
        ViewData["ids"] = db.uspGetAllEventIds().ToArray();

        return Json(new { data = ids }, JsonRequestBehavior.AllowGet);
    }

所以Dropdown()GetDropdownList()工作正常,但我遇到Map()的问题。

基本上我想从我的SP返回的列中将它存储到一个数组中,但它不会让我。有人能帮我解决这个问题吗?

更新

我将.ToArray()更改为.toString().toArray(),这让我超越了编译器错误,但在将其登录到控制台后,我发现它正在返回char而不是string。所以我把整行改为

string secAttendance = new string(db.uspGetSectionAttendance("option").ToString().ToArray());

并将结果输出到控制台,发现它返回0.

0来自SQL中的返回值,我不明白。它将获取正确的列,但不会将正确的数据发送到ASP。

以下是我的SQL输出的屏幕截图:

enter image description here

1 个答案:

答案 0 :(得分:0)

错误是正确的。输出中必须只有一行,一列值。您正在选择

select Capacity from #temp;

返回单个值作为int。 它不能直接转换为数组。 相反,如果你想要一个数组,你可以创建一个空白

Array<int> a = new Array<int>[1] 

然后将此输出推送到该数组。