【发布时间】:2019-04-08 20:03:47
【问题描述】:
我一直试图从我的存储过程中读取 RETURN 值一段时间,但没有成功,在我之前的帖子中有人指出我应该使用 OUTPUT 并且有人提供了一些关于我将如何做的代码因为我以前没有使用过OUTPUT。
我现在正尝试将 OUTPUT 值放入我的 C# 代码中。
- 如果投票不存在则返回 0
- 如果投票存在则返回 1
代码当前抛出错误:
System.Data.SqlClient.SqlException:过程或函数“投票”需要参数“@votecount”,但未提供该参数
我在这里和谷歌上查看了很多帖子,但没有找到我的答案,所以希望这里的人能帮助我解决我哪里出错了
我的 C#
command = new SqlCommand($@"EXECUTE dbo.Votes @VotedMember = @@VotedMember,
@VotedBy = @@VotedBy",
StaticObjects._connection);
if (Context.Guild.Users.Where(x => x.Username.ToLower() == member.ToLower() ||
x.Nickname?.ToLower() == member.ToLower()).Count() > 0)
{
SqlParameter GOTWParam = new SqlParameter
{
ParameterName = "@@VotedMember",
Value = //code here
}
command.Parameters.Add(GOTWParam);
SqlParameter VotedByParam = new SqlParameter
{
ParameterName = "@@VotedBy",
Value = //code here
};
command.Parameters.Add(VotedByParam);
command.Parameters.Add("@votecount", SqlDbType.Int).Direction = ParameterDirection.Output;
command.ExecuteNonQuery();
int response = Convert.ToInt32(command.Parameters["@votecount"].Value);
switch (response)
{
case 0:
// do something
case 1:
// do something
}
}
存储过程
CREATE PROCEDURE [dbo].[Votes]
@VotedMember BIGINT,
@VotedBy BIGINT,
@votecount INT OUTPUT
AS
BEGIN TRY
BEGIN TRANSACTION t_Transaction
SET @votecount = 0
IF NOT EXISTS(SELECT 1 FROM [dbo].[GOTWVotes]
WHERE [VotedBy] = @VotedBy)
BEGIN
INSERT INTO
[dbo].[GOTWVotes] ([VotedMember],[VotedBy])
VALUES
(@VotedMember, @VotedBy)
END
ELSE
BEGIN
SELECT @votecount = COUNT(*) FROM [dbo].[GOTWVotes]
WHERE [VotedBy] = @VotedBy
END
COMMIT TRANSACTION t_Transaction
END TRY
BEGIN CATCH
SET @votecount = -1
ROLLBACK TRANSACTION t_Transaction
END CATCH
【问题讨论】:
-
代替
ParameterDirection.Output,试试ParameterDirection.ReturnValue -
你的 SP 定义是什么样的?
标签: c# sql-server stored-procedures discord