2012-01-25 9 views
0

これは私の一部では単純な失敗かもしれませんが、どこでどのように判断できません。 私はたくさんのことをしているWindowsサービスをコーディングしてきました。その1つは、ストアドプロシージャを使用して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

あなたはなぜあなたが選択操作にトランザクションを使用しているコマンド –

+1

を実行しませんでしたか? –

+0

@Baboonそれは、サービスが実行されるSPを作った私ではない。私のSP名を入力し、入力として与えて出力として得るものを提供した会社のデータベースマネージャー。同じように動作するテスト目的のために自分自身(これは展示されているもの)を作りました。 – GoD1x

答えて

3

このコマンドを実行するのを忘れました。

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

または

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

あなたが結果セットを望んでいるか否かに応じて、それを行う必要があります。

+0

'ExecuteNonQuery'にする必要があります –

+0

彼はまだ結果セットを取得しようとしているかどうかによって異なります –

+0

彼はそうではありません。ストアドプロシージャコードが表示されます。 –

2

コマンドオブジェクトでExecuteNonQueryを使用する必要があります。 SqlCommand Executenonquery

connectionRFID.Open(); 
    cmd.ExecuteNonQuery(); // this missing from your code 
    textBox1.Text = (String)paramOut.Value; 
関連する問題