获取存储过程值

时间:2016-09-09 20:26:58

标签: sql asp.net stored-procedures

我有一个表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中?

1 个答案:

答案 0 :(得分:0)

在LinqToSQL中有类似的问题。设置完成后,在程序中选择@sequence_id即可完成工作:

在您的SP之后:

SELECT @sequence_id = ScoSequence 
FROM dbo.RhSeq
WHERE ScoTable = @table
AND ScoColonne = @colonne

添加:

SELECT @sequence_id

然后当然:

db.Database.SqlQuery<int>...