我正在从ASP.NET调用存储过程来获取一些数据以便存储在数组中。问题是,为了返回我需要的值,我首先必须调用另一个存储过程并将结果转储到临时表中。这会在SQL端生成正确的记录,但是当我在ASP中调用它时,它会将最后一条记录的索引作为int返回。因此,即使SQL生成正确的结果,ASP在调用存储过程时也无法访问它们。
以下是我设置SQL的方法:
IF OBJECT_ID('#temp') IS NOT NULL
BEGIN
DROP TABLE #temp
END
CREATE TABLE #temp
(
EventID nvarchar(50),
RunDate date,
SectionCode nvarchar(50),
SectionMapCode nvarchar(50),
DispSort int,
Capacity nvarchar(50),
Attendance int,
PctCap int,
HeatColor nvarchar(50)
)
DECLARE @runDate date = GETDATE()
--Insert results from killsheet sproc into temp table
INSERT #temp Exec GameDayReporting.dbo.uspGetEventKillSheetDetailedReport @EventID, @runDate;
select Capacity from #temp;
SQL输出:
ASP电话:
string option = TempData["option"].ToString();
var secCapacity = db.uspGetSecCapacityNew(option);
ViewData["Capacity"] = secCapacity;
System.Diagnostics.Debug.WriteLine("capacity " + secCapacity);
ASP输出:
capacity 261
注意secCapacity
如何等于261,这是SQL结果中的最后一个行号。
那么如何访问实际的查询结果而不是数据的大小?
答案 0 :(得分:0)
没有冒犯,但似乎你正在添加一层不需要存在的复杂性。本节:
DECLARE @runDate date = GETDATE()
--Insert results from killsheet sproc into temp table
INSERT #temp Exec GameDayReporting.dbo.uspGetEventKillSheetDetailedReport @EventID, @runDate;
select Capacity from #temp;
您正在使用单个proc插入SQL Server中的临时对象。为什么不直接返回那个依赖的proc?它是一个内存密集型的内存操作还是需要临时存储的东西?如果不是,我会得到结果集。使用返回结果集来处理临时存储可能会有问题。特别是当你处理一层处理返回的.NET时:
除非你有一些严格的规则,否则我只会用
返回数据GameDayReporting.dbo.uspGetEventKillSheetDetailedReport @EventID, @runDate
如果使用实体框架,则包装Poco对象列表,如果使用ADO.NET,则包装DataTable。
答案 1 :(得分:0)
我能够通过从ASP中分离我的存储过程而不是尝试从SQL导入特定数据来解决它。
var uspCapacity = from d in db.uspGetEventKillSheetDetailedReport(option, date)
select new
{
d.Capacity
};
var uspAttendance = from d in db.uspGetEventKillSheetDetailedReport(option, date)
select new
{
d.Attendance
};
var uspSectionMapCode = from d in db.uspGetEventKillSheetDetailedReport(option, date)
select new
{
d.SectionMapCode
};
var uspCapacityList = uspCapacity.ToArray();
var uspAttendanceList = uspAttendance.ToArray();
var uspSectionMapCodeList = uspSectionMapCode.ToArray();
我通过使用测试:
for (var i = 0; i < 3; i++)
{
System.Diagnostics.Debug.WriteLine("Capacity " + uspCapacityList[i] + " Attendance " + uspAttendanceList[i] + " Section Map Code " + uspSectionMapCodeList[i]);
}