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