返回“返回值”存储过程中的INSERT不能正确工作

本文关键字:返回值 不能 INSERT 工作 过程中 存储 存储过程 返回 | 更新日期: 2023-09-27 18:17:38

我已经为此挣扎了两天了:我有一个简单的存储过程来将一行插入到表中,如果行已经在表中并且没有进行插入,则返回100,如果插入成功则返回200。

我一直得到100的返回值,无论行存在,没有插入,或者没有这样的行,插入被执行。

问题是,如果我从过程中删除INSERT行或将其更改为SELECT,则返回值是正确的。也就是说,INSERT是罪魁祸首。

这是一个使用SQL Server Express的。net c# Windows应用程序。

编辑:正如@tinka所说(见下面他的评论),我所要做的就是注释掉cmd.ExecuteNonQuery();行,现在一切都很酷。

SO是最好的!!

ALTER PROC [dbo].[spTEST]
   @Input_For_SP NVARCHAR(10)
AS
BEGIN
    DECLARE @Count INT
    DECLARE @ReturnCode INT
    SELECT @Count = COUNT(Test_Name) 
    FROM tblTest 
    WHERE Test_Name = @Input_For_SP
    IF @Count > 0 
        SET @ReturnCode = 100
    ELSE
    BEGIN 
        SET @ReturnCode = 200
        INSERT INTO tblTest(Test_Name) VALUES (@Input_For_SP)
    END
    SELECT @ReturnCode AS ReturnValue
END

在我的Winform中,我有:

    private void button4_Click(object sender, EventArgs e)
    {
        string myTEST4_Result;
        myTEST4_Result = execute_spTEST4(textBox4.Text);
        MessageBox.Show(myTEST4_Result);
    }
    static string execute_spTEST4(string mytextBox4)
    {
        string conStr = ConfigurationManager.ConnectionStrings["MY_TEST_DATABASE"].ToString();
        SqlConnection conn = new SqlConnection(conStr);
        SqlCommand cmd = new SqlCommand("spTEST", conn);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@Input_For_SP", mytextBox4);
        conn.Open();
        //cmd.ExecuteNonQuery();                            THIS LINE WAS THE CULPRIT!!!!
        int myReturnedCode = (int)cmd.ExecuteScalar();
        string my_test4_result = myReturnedCode.ToString();
        return (my_test4_result);
    }

(我知道我可以解决它与输出参数)

我错过了什么…?

返回“返回值”存储过程中的INSERT不能正确工作

[由@tinka陈述并编辑到问题中]

返回值总是指示行存在的原因是存储过程被执行了两次

cmd.ExecuteNonQuery();
int myReturnedCode = (int)cmd.ExecuteScalar();

由于有返回值,我们需要保持对ExecuteScalar()

的调用
//cmd.ExecuteNonQuery();
int myReturnedCode = (int)cmd.ExecuteScalar();