1
我现在挣扎了两天:我有一个简单的存储过程插入一行到表中并返回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);
}
(我知道我可以用一个输出参数解决它)
我在想什么......?
评论此行'cmd.Exe cuteNonQuery();'从代码和测试 – wiretext
@tinka抓住它。您正在执行两次存储过程。 – Morpheus
@tinka谢谢!那样做了。我现在编辑我的问题。再次感谢。 – gadi