2012-03-16 10 views
4

ちょっと、私はそれに送られたパラメータを持たないストアドプロシージャからデータを戻す例も見つけようとしています。それはデータを表示しますが。ms sqlストアドプロシージャは出力なしでデータを返します

私はどのように私のコードから以下を使用して取得できますか?

Dim myCommandSQL As New SqlCommand 
    Dim myReaderSQL As SqlDataReader = Nothing 
    Dim intX As Integer = 0 
    Dim connSql As SqlConnection 

    Try 
     connSql = New SqlConnection("Server=sqlprod;" & _ 
            "Database=ISS3_PROD;" & _ 
            "User ID=xxx;" & _ 
            "Password=xxx;" & _ 
            "Trusted_Connection=False;") 
     connSql.Open() 

     myCommandSQL.CommandType = CommandType.StoredProcedure 
     myCommandSQL.CommandText = "Select_Prod" 

     Dim sqlParReturn1 As System.Data.SqlClient.SqlParameter = myCommandSQL.Parameters.Add("@return_value", SqlDbType.VarChar) 

     sqlParReturn1.Direction = ParameterDirection.Output 
     myCommandSQL.ExecuteNonQuery() 

     MsgBox(sqlParReturn1) 

     connSql.Close() 
     myCommandSQL.Dispose() 

@return_value私は何が起こるか見るためにそこに置いたが、何も返されなかった。

助けがあれば助かります。

デビット

答えて

3

コマンドにパラメータを割り当てる場合、ストアドプロシージャにはパラメータが必要です。さらに、方向をOutputと指定した場合は、ストアドプロシージャでそのパラメータをOUTPUTとマークする必要があります。

パラメータを使用しないストアドプロシージャの結果を取得する場合は、sqlParReturn1を含むすべての行を削除します。また、あなたのコマンドは "非問い合わせ"ではありません - はデータを照会するです。 ADOのDataReaderを使用してデータを読みMSDN documentationをここで

Using connSql As SqlConnection = New SqlConnection(...) 
    connSql.Open() 
    Using myCommandSQL As SqlCommand = connSql.CreateCommand() 
     myCommandSQL.CommandType = CommandType.StoredProcedure 
     myCommandSQL.CommandText = "Select_Prod" 
     Using reader As SqlDataReader = myCommandSQL.ExecuteReader() 
      If reader.HasRows Then 
       While reader.Read() 
        // loops through the rows returned 
       End While 
      End If 
     End Using 
    End Using 
End Using 
+0

ありがとうございます!今はうまく動作します。 – StealthRT

2

されています:それを得るために、あなたがこれを行う必要があります(私はまた、いくつかのより良い練習の技術を使用してコードをリファクタリング)。私は彼らの例がこれをとてもうまく説明していると思うので、ここで例をコピーして貼り付けただけです。 SQLの設定を置き換えるだけで、ExecuteReaderを呼び出してから、whileループを実行して、reader.Readが行を見つけます。ループ内だけで、ord3またはcolumnnamesを使用してreader.Get...で列にアクセスできます。

Private Sub HasRows(ByVal connection As SqlConnection) 
    Using connection 
     Dim command As SqlCommand = New SqlCommand(_ 
      "SELECT CategoryID, CategoryName FROM Categories;", _ 
      connection) 
     connection.Open() 

     Dim reader As SqlDataReader = command.ExecuteReader() 

     If reader.HasRows Then 
      Do While reader.Read() 
       Console.WriteLine(reader.GetInt32(0) _ 
        & vbTab & reader.GetString(1)) 
      Loop 
     Else 
      Console.WriteLine("No rows found.") 
     End If 

     reader.Close() 
    End Using 
End Sub 
関連する問題