簡體   English   中英

獲取存儲過程值

[英]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)

我有一個存儲過程,給定ScoTableScoColonne ,將遞增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中,如果我在存儲過程中右擊(在服務器資源管理器),然后選擇“執行”,我輸入值ScoTableScoColonne設置和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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM