2011-02-25 89 views
1

我想在LINQ中执行存储过程。在SQL Server中运行时,它会返回几个字段,大多数是整数字段和浮点字段。但是,当我调用LINQ存储过程中,所有的返回值为0。这里是我正在调用存储过程:linq和存储过程

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 

回答

0

我不对此足够了解,看看问题出在哪里,但是你可能想要使用一个更简单的存储过程首先得到这个工作。例如只返回一个简单列表的东西。

此外,看看ScottGu's blog post使用存储过程与Linq到Sql。