Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法将存储过程保存到数组中_C#_Asp.net_Sql Server_Stored Procedures - Fatal编程技术网

C# 无法将存储过程保存到数组中

C# 无法将存储过程保存到数组中,c#,asp.net,sql-server,stored-procedures,C#,Asp.net,Sql Server,Stored Procedures,我正在使用asp.net处理一个SQL查询,该查询从某个表返回一列。通常我要做的是设置一个等于存储过程函数调用的变量,并在最后添加.ToArray(),这就是我想在这里做的,但我得到一条错误消息int不包含ToArray的定义… 我很困惑,因为我在程序的另一部分中使用了相同的语法来处理类似的事情。它以前工作得很好,但我不明白为什么它现在想和我打架 以下是我的SQL: IF OBJECT_ID('#temp') IS NOT NULL BEGIN DROP TABLE #t

我正在使用asp.net处理一个SQL查询,该查询从某个表返回一列。通常我要做的是设置一个等于存储过程函数调用的变量,并在最后添加
.ToArray()
,这就是我想在这里做的,但我得到一条错误消息
int不包含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代码:

因此
Dropdown()
GetDropdownList()
工作正常,但我发现
Map()
有问题

基本上,我希望将从SP返回的列存储到数组中,但它不允许我这样做。有人能帮我解决这个问题吗

更新

我将
.ToArray()
更改为
.toString().ToArray()
,这使我克服了编译器错误,但在将其登录到控制台时,我发现它返回的是
char
,而不是
string
。所以我把整条线改成了

string secAttendance = new string(db.uspGetSectionAttendance("option").ToString().ToArray());
并将结果输出到控制台,发现返回0

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

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


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

select Capacity from #temp;
它以int形式返回单个值。 它不能直接强制转换到数组中。 相反,如果需要数组,可以创建一个空数组

Array<int> a = new Array<int>[1] 
Array a=新数组[1]

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

int不包含toarray的定义。
错误消息说明了一切;您不能调用
ToArray()
。如何计划使用最终结果?@Win我将把SP中的整个列存储到一个数组中,然后将数组发送到我的视图中,以便在函数中使用。这不就是给我一个值吗?我需要整列在这种情况下,你可以在一个单独的变量值,检查它的类型是否是数组。如果不是,则创建一个数组。如果它已经是一个数组,那么就很好了。换句话说,您可以检查接收到的输出的长度。Hmm。C#希望我在尝试此解决方案之前为数组定义一个类。似乎不对。不,不对。这看起来像实体框架代码。请在生成的文件中检查db.uspgetSectionAttention\u结果的返回类型。您可以将实体框架文件打开到记事本中,以检查其中是否存在存储过程。因此,当您可能已经添加了存储过程时,entity framework可能已经将返回类型推断为int。是的,它正在返回
公共虚拟int
。我应该在将其存储到数组之前将其解析为字符串,然后再将其解析回int吗?这似乎是多余的。因为我是从现有数据库中获取数据的,所以不能完全更改整个列的数据类型
Array<int> a = new Array<int>[1]