存储过程不返回任何内容
本文关键字:任何内 返回 存储过程 | 更新日期: 2023-09-27 18:21:27
这对我来说可能是一个简单的失败,但我只是不知道在哪里或如何。我一直在编写一个windows服务,它正在做很多事情。其中之一是通过存储过程插入MS Sql 2005数据库并从中获取数据。
下面的代码是windows服务的一部分,现在也是windows窗体,两者都会产生相同的空结果。
try
{
SqlCommand cmd = new SqlCommand("U_RfId_ProductNumberGet", connectionRFID);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
//SqlParameter paramProd = new SqlParameter();
SqlParameter paramOut = new SqlParameter();
paramOut.ParameterName = "@ProductInformation";
paramOut.Direction = System.Data.ParameterDirection.Output;
paramOut.SqlDbType = System.Data.SqlDbType.VarChar;
paramOut.Size = 50;
cmd.Parameters.Add(paramOut);
cmd.Parameters.AddWithValue("@ProductNumber", content); //content = "1" for testing
connectionRFID.Open();
textBox1.Text = (String)paramOut.Value;
//cmd.Parameters["@ProductInformation"].Value.ToString();
connectionRFID.Close();
}
catch (Exception ex)
{ textBox1.Text = ex.Message;
connectionRFID.Close();
}
然后是代码正在调用的SP。我已经尝试将其更改为只返回结果集而不是标量输出参数,然后对SP的调用就可以工作了,但我更喜欢使用标量值。
CREATE PROCEDURE U_RfId_ProductNumberGet
@ProductInformation varchar(50) OUTPUT,
@ProductNumber varchar(8)
AS
BEGIN TRAN
SET NOCOUNT ON;
BEGIN
SELECT @ProductInformation
= CAST(vareNummer AS varchar(10))
+ '-' + CAST(vareTekst AS varchar(30))
FROM VareNummerVareTekst
WHERE ProductNumber = @ProductNumber
END
COMMIT TRAN
附带说明:如果我通过SQL Management Studio执行SP,我会得到一个有效的结果。
有人注意到我忘了什么吗?
您忘记执行命令了。
cmd.Execute(); // to get a resultset
或
cmd.ExecuteNonQuery(); // to get output parameters but no resultset
应该根据是否需要结果集来执行此操作。
您必须对命令对象使用ExecuteNonQuery。SqlCommand执行非查询
connectionRFID.Open();
cmd.ExecuteNonQuery(); // this missing from your code
textBox1.Text = (String)paramOut.Value;