2017-03-16 61 views
0

我第一次嘗試創建從C#運行的存儲過程時產生了以下結果。C#&SQL Server存儲過程 - 必須聲明標量變量@SellerLocationID

然而,在調用中,我得到的錯誤

必須聲明標@SellerLocationID

我都試過,包括聲明

declare @SellerLocationID int = 0; 

內部和外部的存儲程序。

在這兩種情況下,我都會收到相同的錯誤。

我需要做些什麼來解決這個錯誤?

C#(調用代碼)

var sqlUserName = new SqlParameter("@SellerLocationID", SellerLocationID); 

var results = unitofwork.DBContext().Database 
           .SqlQuery<dynamic> 
           ("Exec GetClientOrdersForSupplier @SellerLocationID", SellerLocationID).ToList(); 

T-SQL:

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[GetClientOrdersForSupplier] 
    @SellerLocationID int 
AS 
BEGIN 
    SET NOCOUNT ON; 

    SELECT 
     l.LocationName, u.UserID, u.FirstName, u.LastName, 
     MAX(o.OrderSubmittedDate) as LastOrderPlaced 
    FROM 
     sw.Locations l 
    JOIN 
     sw.Users u ON u.locationid = l.locationid 
    LEFT JOIN 
     sw.locationproviders lp ON u.LocationID = lp.BuyerLocationID 
    LEFT JOIN 
     sw.orders o ON o.CreatedUserID = u.UserID 
    WHERE 
     lp.sellerlocationid = @SellerLocationID 
    GROUP BY 
     l.LocationName, u.UserID, u.FirstName, u.LastName 
    ORDER BY 
     UserID 
END 
+2

您沒有在.Query方法中提供您的SqlParameter對象。它應該看起來像.Query(「Exec GetClientOrdersForSupplier @SellerLocationID」,sqlUserName) – mallan1121

+1

謝謝,它似乎是一個變量的命名問題。我錯誤地使用了sqlUserName,而不是將它重命名爲sqlSellerLocationID並將它傳遞給查詢方法。 – Vahe

回答

1

到.Query調用需要的SqlParameter對象時,要指定一個名爲參數:

var sqlUserName = new SqlParameter("@SellerLocationID", SellerLocationID); 

var results = unitofwork.DBContext().Database 
           .SqlQuery<dynamic> 
           ("Exec GetClientOrdersForSupplier @SellerLocationID", sqlUserName).ToList();