2016-04-07 2 views
0

を働いていない。VB.NET - ストアドプロシージャの実行が、パラメータが、私は次のコードのビットを持っている

Dim SQLCon As New SqlConnection 
Dim cmd As New SqlCommand 
Dim ds As New DataSet 

SQLCon.ConnectionString = ConfigurationSettings.AppSettings("myConnString") 
SQLCon.Open() 
cmd.CommandType = CommandType.StoredProcedure 

'run the stored procedure based on the view selected 
If rdolstView.Items(0).Selected Then 
    cmd = New SqlCommand("spCondensedView", SQLCon) 
ElseIf rdolstView.Items(1).Selected Then 
    cmd = New SqlCommand("spExtendedView", SQLCon) 
End If 

'filter by what the user searched for 
If ddlSearchBy.SelectedValue = "Member" Then 
    cmd.Parameters.AddWithValue("@MbrNum", txtSearchFor.Text) 
ElseIf ddlSearchBy.SelectedValue = "Assistant" Then 
    cmd.Parameters.AddWithValue("@AssignedAsst", ddlUWAssistants.SelectedValue) 
ElseIf ddlSearchBy.SelectedValue = "Rep" Then 
    cmd.Parameters.AddWithValue("@Rep", txtSearchFor.Text) 
ElseIf ddlSearchBy.SelectedValue = "Dept Assistant" Then 
    cmd.Parameters.AddWithValue("@DeptAsst", txtSearchFor.Text) 
ElseIf ddlSearchBy.SelectedValue = "Creator" Then 
    cmd.Parameters.AddWithValue("@Creator", txtSearchFor.Text) 
End If 

Dim da As New SqlDataAdapter(cmd) 
da.Fill(ds) 
SQLCon.Close() 

私の問題は、パラメータが動作していないようだということです。両方のストアドプロシージャは、任意のパラメータ(@MbrNum,@AssignedAsst@Rep@DeptAsst、または@Creator)を取り、WHERE句でそれをフィルタリングする必要があります。

SQL Server Management Studioでストアドプロシージャを手動で実行すると、これが正常に動作することを確認しました。私はまた、If/ElseIfの文が真であると正しく検証していることを確認しました。だから私のコードは間違いなくAddWithValue()ステートメントに当たっています。

返された結果は、パラメータが指定されていないストアドプロシージャを実行した場合のように、フィルタが適用されていない完全なデータセットです。

ご協力いただければ幸いです。ありがとう!

+1

は 'Command.Type'を指定してみてください...私が行ったときに、彼らが適切に処理されるように...またUsing文の中で、あなたの接続とコマンドのをラップ信じるTextとして設定されています。.. 。例えば: 'cmd.CommandType = CommandType.StoredProcedure' ...デフォルトでは' Text'と設定されています...あなたの接続とコマンドを 'Using'ステートメントにラップして、終了時に正しく処理されるようにします。また、保存されたprocのパラメータをデフォルトにしますか? – Codexer

+1

なぜあなたはそのような置き換えを使用していますか?私はそれが問題だと思う。パラメータを使用する場合は、単一引用符をダブルに置き換える必要はありません。これは最近、パラメータを使用していなかったコードの外観を持っていますが、今はそうです。交換を取り外します。 SQLプロファイラを使用して、実際に何が渡されているかを確認します。 zagglerが提案するようにコマンドタイプも変更してください。 –

+0

例外をスローするのではなく、ブレークポイントを使用する必要があります。しかし、私はあなたが「〜で」を置き換えるためだと思います。パラメータを使用しているときにこれを行う必要はありません。私はあなたが前に連結していたと仮定し、後でパラメータでそれを適切に行うことに決めました。 –

答えて

2

を指定してください。Command.Type ...コマンドオブジェクトを作成するときにこれを設定してください。

cmd.CommandType = CommandType.StoredProcedure 

は、デフォルトでは

関連する問題