存储过程不返回任何内容

时间:2012-01-25 12:19:31

标签: c# sql-server-2005 stored-procedures

这可能是我的一个简单的失败,但我无法弄清楚在哪里或如何。 我一直在编写一个正在做很多事情的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,我会得到一个有效的结果。

有人注意到我忘记了什么吗?

2 个答案:

答案 0 :(得分:3)

您忘了执行命令。

cmd.Execute(); // to get a resultset

cmd.ExecuteNonQuery(); // to get output parameters but no resultset 

应该根据您是否需要结果集来进行。

答案 1 :(得分:2)

您必须在命令对象上使用ExecuteNonQuery。 SqlCommand Executenonquery

    connectionRFID.Open();
    cmd.ExecuteNonQuery(); // this missing from your code 
   textBox1.Text = (String)paramOut.Value;