2011-08-10 18 views
0

クエリで変更された変数@Testを取得するにはどうすればよいですか?ADO.NETのクエリで変更されるSQL変数を取得

 const string query = @"SET @Test = 2;"; 

     using (var connection = new SqlConnection(conStr)) 
     { 
      connection.Open(); 
      var command = new SqlCommand(query, connection); 

      command.Parameters.AddWithValue("@Test", 1); 
      var r = command.ExecuteReader(); 
      // command.Parameters["@Test"].Value == 1 
      // r hasn't any variables     
     } 

を追加しました: 私はどちらansversが助ける

 const string query = @"SET @Test = 2;"; 

     using (var connection = new SqlConnection(conStr)) 
     { 
      connection.Open(); 
      var command = new SqlCommand(query, connection); 

      SqlParameter par = command.Parameters.Add("@Test", SqlDbType.NVarChar, 15); 
      par.Direction = ParameterDirection.Output; 

      command.ExecuteNonQuery(); 
      // par.Value now contain 2 
     } 

ストアドプロシージャを作成withoute、この問題を解決しました!

+0

に変更されている必要があります:あなたはあなたのコマンドを実行したら、今

var command = new SqlCommand("MyQuery", connection); command.CommandType = CommandType.StoredProcedure; var param = command.CreateParameter(); param.Name = "@Test"; param.Type = DbType.Int; param.Direction = ParameterDirection.InputOutput; param.Value = 1; 

それが変わったかどうか知りたいですか? – Jethro

+0

質問は何ですか? – V4Vendetta

+0

私はそれを明確にするためにコードの一部を抽出します。私は複雑なクエリを持っています! –

答えて

2

まず、あなたのストアドプロシージャにパラメータが続いてOUTPUT

CREATE PROC MyQuery 
    @Test INT OUTPUT 
AS 
SET @Test = 2 

としてマークする必要があります代わりにAddWithValueを使用しての、C#のコードを構築するとき、すなわちマーキング、SqlParameterのあなたの創造で、より明確にしますそれは入出力としてです。あなたはのparamの値を読み取ることができ

command.ExecuteNonQuery(); // Could also be ExecuteReader, if you have a resultset too! 

、あなたは@Testパラメータ理由を変更している場合は2

if(param.Value == 2) 
{ Console.WriteLine("WooHoo"); }