Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 存储过程不返回任何内容_C#_Sql Server 2005_Stored Procedures - Fatal编程技术网

C# 存储过程不返回任何内容

C# 存储过程不返回任何内容,c#,sql-server-2005,stored-procedures,C#,Sql Server 2005,Stored Procedures,这可能是我的一个简单的失败,但我只是不知道在哪里或如何。 我一直在编写一个windows服务,它正在做很多事情。其中之一是通过存储过程从MS Sql 2005数据库插入和获取数据 下面的代码是windows服务的一部分,现在也是windows窗体的一部分,两者都产生相同的空结果 try { SqlCommand cmd = new SqlCommand("U_RfId_ProductNumberGet", connectionRFID);

这可能是我的一个简单的失败,但我只是不知道在哪里或如何。 我一直在编写一个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。我尝试将其更改为只返回resultset而不是标量输出参数,然后对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
附带说明:如果我通过SQLManagementStudio执行SP,我会得到一个有效的结果


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

您忘记执行命令了

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


应根据是否需要结果集来执行此操作。

您忘记执行此命令

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


应根据是否需要结果集来执行此操作。

必须对命令对象使用ExecuteOnQuery


必须对命令对象使用ExecuteOnQuery


您没有执行命令为什么要在选择操作上使用事务?@Baboon将运行服务的SP不是由我创建的。这是一家公司的数据库管理器,该公司向我提供了SP名称以及作为输入提供的内容和作为输出获取的内容。我已经制作了自己的(即显示的)用于测试目的,以相同的方式运行。您没有执行命令为什么要在选择操作上使用事务?@Baboon不是我制作了服务将运行的SP。这是一家公司的数据库管理器,该公司向我提供了SP名称以及作为输入提供的内容和作为输出获取的内容。我自己做了一个(展示中的那个)用于测试目的,它的作用是一样的。这取决于他是否仍在试图得到一个结果集。是的,就是这样。。。我一直在胡乱处理不同类型的执行,但不小心删除了它。在我删除它之后,我将参数的大小改为50而不是40,因为我注意到输出参数是42。这也会有什么影响吗?根据我的经验,不同大小的字符串只会切断一些数据,但不会导致不执行。是的,只是将其改回40,它只显示较少的字符串。我不知道是什么改变了它——因为我以前尝试过ExecuteOnQuery。我想我做了一些小的改变,在这期间我没有注意到/这取决于他是否仍在努力获取结果集是的,就是这样。。。我一直在胡乱处理不同类型的执行,但不小心删除了它。在我删除它之后,我将参数的大小改为50而不是40,因为我注意到输出参数是42。这也会有什么影响吗?根据我的经验,不同大小的字符串只会切断一些数据,但不会导致不执行。是的,只是将其改回40,它只显示较少的字符串。我不知道是什么改变了它——因为我以前尝试过ExecuteOnQuery。我想我做了一些小的改变,在这期间我没有注意到/
    connectionRFID.Open();
    cmd.ExecuteNonQuery(); // this missing from your code 
   textBox1.Text = (String)paramOut.Value;