C# 存储过程不返回任何内容
这可能是我的一个简单的失败,但我只是不知道在哪里或如何。 我一直在编写一个windows服务,它正在做很多事情。其中之一是通过存储过程从MS Sql 2005数据库插入和获取数据 下面的代码是windows服务的一部分,现在也是windows窗体的一部分,两者都产生相同的空结果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);
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;