2016-05-08 3 views
0

ストアドプロシージャから値を取得するための関数を作成しています。次のように ストアドプロシージャのコードは次のとおりです。VB.NET SqlParameterオブジェクトストアドプロシージャのコーディング時にvalueプロパティの値を受け付けません

create procedure [dbo].[sp_get_drivers_violations_count] 
@driver_id int, 
@counter int output 
As 
Begin 

Select @counter = Count(fk_violation_id) from link_violations_drivers Where fk_driver_id = @driver_id; 
Return @counter; 

End 

次のように私は私のVB.Netプログラムで使用するコードは次のとおりです。

Public Function SpGetDriversViolationsCount2(Id As Int32) As Int32 
     Dim SqlCon As SqlConnection = New SqlConnection With {.ConnectionString = New ConnectionStrings.ConnectionStrings().MsSqlConString} 

     Dim SqlCmd As SqlCommand = New SqlCommand("sp_get_drivers_violations_count", SqlCon) 

     SqlCmd.CommandType = CommandType.StoredProcedure 

     Dim RetValue As SqlParameter = SqlCmd.Parameters.Add("RetValue", SqlDbType.Int, 11) 

     RetValue.Direction = ParameterDirection.ReturnValue 

     Dim SpParameterId As SqlParameter = SqlCmd.Parameters.Add("@driver_id", SqlDbType.Int, 11) 

     SpParameterId.Direction = ParameterDirection.Input 

     Dim counter As SqlParameter = SqlCmd.Parameters.Add("@counter", SqlDbType.Int, 11) 

     counter.Direction = ParameterDirection.Output 

     SpParameterId.Value = Id 

     Dim ReturnValue As UInt32 

     SqlCon.Open() 

     Dim DataReader As SqlDataReader = SqlCmd.ExecuteReader() 

     Do While DataReader.Read 
      ReturnValue = DataReader.GetInt32(0) 
     Loop 
     DataReader.Close() 

     SqlCon.Close() 

     Return ReturnValue 

    End Function 

コードがthisハウツーを使用して作成されました。 NUnitを使って関数をデバッグしようとしている間、私は "SpParameterId"オブジェクトに気付きました。たとえ値を明示的に代入しても、その値プロパティには値が割り当てられません。ありがとうございました。

+0

そのコードを行単位でステップ実行すると、 'SpParameterId.Value = Id'行を実行した後、' SpParameterId.Value'の値は何ですか? – jmcilhinney

答えて

0

パラメータの収集は、例えばコールの後、出力と戻り値のパラメータに返された値へのアクセスを提供

object rv = SqlCmd.Parameters["RetValue"].Value; 

注これらの値は、DataReaderオブジェクトがされた後まで、アクセスできない(ハイテクREFに応じて)いること閉まっている。

実際には、私は通常、ストアからスカラー値を選択して保存してから、簡単にSqlCommand.ExecuteScalar()を呼び出しますが、それは単なる個人的な好みです。

関連する問題