[英]Fetch stored procedure value
我有一個表格RhSeq
,其中包含以下各列:
ScoTable (PK, varchar(20),not NULL)
ScoColonne (PK, varchar(50), not NULL)
ScoSequence (int, not NULL)
ScoDescription (varchar(100), not NULL)
我有一個存儲過程,給定ScoTable
和ScoColonne
,將遞增ScoSequence
並返回遞增的ScoSequence
值:
編輯-這是完整的存儲過程
CREATE PROCEDURE [dbo].[usp_RhSeqNextVal]
@table VARCHAR (20), @colonne VARCHAR (30), @sequence_id INT OUTPUT
AS
SET NOCOUNT ON
SET @sequence_id = -1
DECLARE @transaction AS BIT
SET @transaction = 0;
IF 0 = @@TRANCOUNT
BEGIN
BEGIN TRAN
SET @transaction = 1;
END
UPDATE dbo.RhSeq
SET ScoSequence = CASE WHEN Right(@colonne,1) = '-' THEN
ScoSequence - 1
ELSE
ScoSequence + 1
END
WHERE ScoTable = @table
AND ScoColonne = @colonne
SELECT @sequence_id = ScoSequence
FROM dbo.RhSeq
WHERE ScoTable = @table
AND ScoColonne = @colonne
IF 1 = @transaction
BEGIN
COMMIT TRAN
END
在Visual Studio中,如果我在存儲過程中右擊(在服務器資源管理器),然后選擇“執行”,我輸入值ScoTable
和ScoColonne
設置和sequence_id
為null,它執行罰款,返回新增加sequence_id
值。 因此,存儲過程沒有問題。
我遇到的問題是當我嘗試在代碼中獲取返回的sequence_id
。
SqlParameter param1 = new SqlParameter("@ScoTable", "MyTable");
SqlParameter param2 = new SqlParameter("@ScoColonne", "MyColumn");
SqlParameter param3 = new SqlParameter("@sequence_id", DBNull.Value);
var numeroSequence = db.Database.SqlQuery<RhSeq>("usp_RhSeqNextVal @ScoTable,@ScoColonne, @sequence_id", param1, param2,param3).ToList();
我得到一個錯誤
System.Data.Entity.Core.EntityCommandExecutionException:類型為“ ScoTable”的成員在數據讀取器中沒有具有相同名稱的對應列
據我了解,錯誤來自RhSeq
,因為存儲過程僅返回sequence_id
,它是一個int
,因此無法使用它創建RhSeq
對象。 我嘗試將結果轉換為int
,但仍然無法正常工作。
如何將存儲過程返回的sequence_id
存儲到我的var numeroSequence
?
在LinqToSQL中有類似的問題。 設置完成后,在過程中選擇@sequence_id:
在您的SP之后:
SELECT @sequence_id = ScoSequence
FROM dbo.RhSeq
WHERE ScoTable = @table
AND ScoColonne = @colonne
加:
SELECT @sequence_id
然后,當然:
db.Database.SqlQuery<int>...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.