猿问

C#从存储过程中读取输出值

一段时间以来,我一直在尝试RETURN从我的存储过程中读取值,但没有成功,在我之前的帖子中有人指出我应该使用OUTPUT并且有人提供了一些代码来说明我将如何做到这一点,因为我以前没有使用OUTPUT过。

我现在正在尝试将OUTPUT值添加到我的 C# 代码中。

  • 如果投票不存在则返回 0

  • 如果投票存在则返回 1

该代码当前抛出错误:

System.Data.SqlClient.SqlException:过程或函数“Votes”需要参数“@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

    }

}


阿波罗的战车
浏览 57回答 1
1回答

莫回无

您缺少输出参数。TSQL 看起来像:command = new SqlCommand($@"EXECUTE dbo.Votes @VotedMember = @p_VotedMember,                                              @VotedBy = @p_VotedBy,                                              @p_votecount = @votecount output",                           StaticObjects._connection);在 C# 中var pVotecount = command.Parameters.Add("@p_votecount", SqlDbType.Int);pVotecount.Direction = ParameterDirection.Output;其中 @p_是区别于存储过程参数名称的参数名称。如果使用存储过程返回值(不是最佳实践),调用将如下所示:command = new SqlCommand($@"EXECUTE @p_votecount = dbo.Votes @VotedMember = @p_VotedMember,                                              @VotedBy = @p_VotedBy",                           StaticObjects._connection);在这两种情况下都不@p_votecount应该。ReturnValue 仅与 CommandType.StoredProcedure 一起使用。ParameterDirection.OutputParameterDirection.ReturnValue
随时随地看视频慕课网APP
我要回答