【问题标题】:Cannot save a stored procedure into an array无法将存储过程保存到数组中
【发布时间】:2017-12-17 06:21:30
【问题描述】:

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

我很困惑,因为我遵循了在程序的另一部分中用于类似事情的相同语法。以前很好用,现在想不通为什么要和我打架。

这是我的 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 输出的屏幕截图:

【问题讨论】:

  • int does not contain a definition for toarray 错误信息说明了一切;你不能打电话给ToArray()。如何计划使用最终结果?
  • @Win 我要将整个列从 SP 存储到一个数组中,然后将数组发送到我的视图以在函数中使用

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


【解决方案1】:

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

select Capacity from #temp;

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

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

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

【讨论】:

  • 这不是给我一个价值吗?我需要整列
  • 在这种情况下,您可以将值放在单独的变量中,检查其类型是否为数组。如果没有,请创建一个数组。如果它已经是一个数组,那么你很好。换句话说,您可以检查接收到的输出的长度。
  • 嗯。 C# 希望我在尝试此解决方案之前为 Array 定义一个类。好像不太对。
  • 不,它没有。这看起来像实体框架代码。请检查生成文件中 db.uspGetSectionAttendance_Result 的返回类型。您可以将实体框架文件打开到记事本中以检查它的存储过程。因此,当您可能添加了存储过程时,实体框架可能会将返回类型推断为 int。
  • 是的,它正在返回 public virtual int。我应该在将其存储到数组之前将其解析为字符串,然后将其解析回 int 吗?这似乎相当多余。由于我从现有数据库中获取数据,我无法完全更改整个列的数据类型
猜你喜欢
  • 1970-01-01
  • 2015-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
  • 2014-12-08
  • 2017-09-01
  • 1970-01-01
相关资源
最近更新 更多