linq和存储过程
我试图在LINQ中执行一个存储过程。在SQLServer中运行时,它返回多个字段,大多数是整数和浮点字段。但是当我在LINQ中调用存储过程时,它只返回0。下面是我调用存储过程的方式:linq和存储过程,linq,stored-procedures,Linq,Stored Procedures,我试图在LINQ中执行一个存储过程。在SQLServer中运行时,它返回多个字段,大多数是整数和浮点字段。但是当我在LINQ中调用存储过程时,它只返回0。下面是我调用存储过程的方式: var meterReadings = _database.MetricDataReport("20101127"); 下面是存储过程: ALTER PROCEDURE [dbo].[MetricDataReport] @FormDate VARCHAR(8) AS SET NOCOUNT ON /*T
var meterReadings = _database.MetricDataReport("20101127");
下面是存储过程:
ALTER PROCEDURE [dbo].[MetricDataReport]
@FormDate VARCHAR(8)
AS
SET NOCOUNT ON
/*Table To Hold Finished RecordSet*/
CREATE TABLE #OutputTable
(
PkMetricMeterID INT,
FkSiteID INT,
FourWeekReading FLOAT,
LastWeekReading FLOAT,
ThisWeekReading FLOAT,
pkMeterID INT,
DecimalPlaces INT
)
CREATE TABLE #WorkingTable
(
PkMetricMeterID INT,
FkSiteID INT,
FormDate DATETIME,
Reading FLOAT,
pkMeterID INT,
DecimalPlaces INT
)
-----------------------------------
--- Process Physical Meters ---
-----------------------------------
INSERT INTO #WorkingTable (PkMetricMeterID,FkSiteID,FormDate,Reading,pkMeterID,DecimalPlaces)
SELECT
luMetricMeters.PkMetricMeterID,
LuMetricMeterList.FkSiteID,
GetReadingsAndPriceLite.FormDate,
GetReadingsAndPriceLite.CalculatedConsumption * GetReadingsAndPriceLite.ConversionFactor,
luMetricMeterList.pkMeterID,
Meters.DecimalPlaces
FROM
luMetricMeters
INNER JOIN
luMetricMeterList ON luMetricMeterList.PkMetricMeterID = luMetricMeters.PkMetricMeterID
INNER JOIN
GetReadingsAndPriceLite ON GetReadingsAndPriceLite.pkMeterID = luMetricMeterList.pkMeterID
INNER JOIN
Meters ON Meters.PkMeterID = luMetricMeterList.pkMeterID
WHERE
GetReadingsAndPriceLite.FormDate <= @FormDate AND GetReadingsAndPriceLite.FormDate >= DATEADD(wk,-4,@FormDate)
--------------------------------------------
--- Process Virtual Meters (NON KPI) ---
--------------------------------------------
---Check To See If Meter Needs Updating
DECLARE @CurrentMeterID INT
DECLARE MeterCursor Cursor FAST_FORWARD FOR
SELECT
luMetricMeterList.pkMeterID
FROM
LuMetricMeters
INNER JOIN
luMetricMeterList ON luMetricMeterList.PkMetricMeterID = luMetricMeters.PkMetricMeterID
INNER JOIN
VirtualMeterReadings ON VirtualMeterReadings.MeterID = luMetricMeterList.pkMeterID
WHERE
VirtualMeterReadings.UpdateFlag = 1
OPEN MeterCursor
FETCH NEXT FROM MeterCursor INTO @CurrentMeterID
WHILE @@Fetch_Status=0
BEGIN
EXEC UpdateVirtualReadings @CurrentMeterID
FETCH NEXT FROM MeterCursor INTO @CurrentMeterID
END
CLOSE MeterCursor
DEALLOCATE MeterCursor
INSERT INTO #WorkingTable (PkMetricMeterID,FkSiteID,FormDate,Reading,pkMeterID,DecimalPlaces)
SELECT
luMetricMeters.PkMetricMeterID,
LuMetricMeterList.FkSiteID,
VirtualMeterReadings.FormDate,
VirtualMeterReadings.Reading,
LuMetricMeterList.pkMeterID,
Meters.DecimalPlaces
FROM
luMetricMeters
INNER JOIN
luMetricMeterList ON luMetricMeterList.PkMetricMeterID = luMetricMeters.PkMetricMeterID
INNER JOIN
VirtualMeterReadings ON VirtualMeterReadings.MeterID = luMetricMeterList.pkMeterID
INNER JOIN
Meters ON Meters.PkMeterID = luMetricMeterList.pkMeterID
WHERE
VirtualMeterReadings.FormDate <= @FormDate AND VirtualMeterReadings.FormDate >= DATEADD(wk,-4,@FormDate)
SET NOCOUNT OFF
SELECT DISTINCT
[#WorkingTable].PkMetricMeterID,
#WorkingTable.FkSiteID,
ThisWeekReading = (SELECT TOP 1 Reading FROM #WorkingTable WorkingTable1 WHERE WorkingTable1.PkMetricMeterID = #WorkingTable.PkMetricMeterID AND [#WorkingTable].FkSiteID = [WorkingTable1].FkSiteID ANd workingTable1.FORMDATE = @FormDate),
LastWeekReading = (SELECT TOP 1 Reading FROM #WorkingTable WorkingTable1 WHERE WorkingTable1.PkMetricMeterID = #WorkingTable.PkMetricMeterID AND [#WorkingTable].FkSiteID = [WorkingTable1].FkSiteID ANd workingTable1.FORMDATE = DATEADD(d,-7,@FormDate)),
FourWeekReading = (SELECT AVG(Reading) FROM #WorkingTable WorkingTable1 WHERE WorkingTable1.PkMetricMeterID = #WorkingTable.PkMetricMeterID AND [#WorkingTable].FkSiteID = [WorkingTable1].FkSiteID),
#WorkingTable.pkMeterID,
#WorkingTable.DecimalPlaces
FROM
[#WorkingTable]
ORDER BY
[#WorkingTable].PkMetricMeterID,
[#WorkingTable].FkSiteID
ALTER过程[dbo].[MetricDataReport]
@FormDate VARCHAR(8)
像
不计较
/*用于保存已完成记录集的表*/
创建表#可输出
(
PkMetricMeterID INT,
FkSiteID INT,
四周阅读浮动,
上周的阅读浮动,
本周的阅读浮动,
pkMeterID INT,
小数点整数
)
创建表格#工作表格
(
PkMetricMeterID INT,
FkSiteID INT,
FormDate日期时间,
阅读浮动,
pkMeterID INT,
小数点整数
)
-----------------------------------
---过程物理仪表---
-----------------------------------
插入#工作表(PkMetricMeterID、FkSiteID、FormDate、Reading、pkMeterID、DecimalPlaces)
选择
luMetricMeters.PkMetricMeterID,
LuMetricMeterList.FkSiteID,
GetReadingsAndPriceLite.FormDate,
GetReadingsAndPriceLite.CalculatedConsumption*GetReadingsAndPriceLite.ConversionFactor,
luMetricMeterList.pkMeterID,
米。小数点
从…起
光度计
内连接
luMetricMeterList.PkMetricMeterID=luMetricMeters.PkMetricMeterID上的luMetricMeterList
内连接
GetReadingsAndPriceLite.pkMeterID=luMetricMeterList.pkMeterID上的GetReadingsAndPriceLite
内连接
Meters ON Meters.PkMeterID=luMetricMeterList.PkMeterID
哪里
GetReadingsAndPriceLite.FormDate=DATEADD(wk,-4,@FormDate)
--------------------------------------------
---过程虚拟仪表(非KPI)---
--------------------------------------------
---检查仪表是否需要更新
声明@CurrentMeterID INT
将仪表或光标快进声明为
选择
luMetricMeterList.pkMeterID
从…起
光度计
内连接
luMetricMeterList.PkMetricMeterID=luMetricMeters.PkMetricMeterID上的luMetricMeterList
内连接
VirtualMetaReadings.MeterID=luMetricMeterList.pkMeterID上的VirtualMetaReadings
哪里
VirtualTerreadings.UpdateFlag=1
开式流量计
从MeterCursor获取下一个到@CurrentMeterID
而@@Fetch\u Status=0
开始
执行更新虚拟读数@CurrentMeterID
从MeterCursor获取下一个到@CurrentMeterID
终止
闭式流量计
释放计量器
插入#工作表(PkMetricMeterID、FkSiteID、FormDate、Reading、pkMeterID、DecimalPlaces)
选择
luMetricMeters.PkMetricMeterID,
LuMetricMeterList.FkSiteID,
VirtualTerreadings.FormDate,
虚拟阅读,阅读,
LuMetricMeterList.pkMeterID,
米。小数点
从…起
光度计
内连接
luMetricMeterList.PkMetricMeterID=luMetricMeters.PkMetricMeterID上的luMetricMeterList
内连接
VirtualMetaReadings.MeterID=luMetricMeterList.pkMeterID上的VirtualMetaReadings
内连接
Meters ON Meters.PkMeterID=luMetricMeterList.PkMeterID
哪里
VirtualMetaReadings.FormDate=DATEADD(wk,-4,@FormDate)
抵消
选择不同的
[#工作表].PkMetricMeterID,
#WorkingTable.FkSiteID,
ThisWeekReading=(从#WorkingTable WorkingTable1中选择前1个读数,其中WorkingTable1.PkMetricMeterID=#WorkingTable.PkMetricMeterID和[#WorkingTable]。FkSiteID=[WorkingTable1]。FkSiteID和WorkingTable1.FORMDATE=@FORMDATE),
LastWeekReading=(从#WorkingTable WorkingTable1中选择前1个读数,其中WorkingTable1.PkMetricMeterID=#WorkingTable.PkMetricMeterID和[#WorkingTable].FkSiteID=[WorkingTable1].FkSiteID和WorkingTable1.FORMDATE=DATEADD(d,-7,@FORMDATE)),
FourWeekReading=(从#WorkingTable WorkingTable1中选择平均(读数),其中WorkingTable1.PkMetricMeterID=#WorkingTable.PkMetricMeterID和[#WorkingTable].FkSiteID=[WorkingTable1].FkSiteID),
#WorkingTable.pkMeterID,
#工作表小数位数
从…起
[#工作台]
订购人
[#工作表].PkMetricMeterID,
[#工作表].FkSiteID
我对这方面的了解不够,看不出问题出在哪里,但您可能希望首先使用一个简单得多的存储过程来实现这一点。只返回一个简单列表的东西
另外,请看一下如何将存储过程与LINQtoSQL结合使用