を働いていない。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()
ステートメントに当たっています。
返された結果は、パラメータが指定されていないストアドプロシージャを実行した場合のように、フィルタが適用されていない完全なデータセットです。
ご協力いただければ幸いです。ありがとう!
は 'Command.Type'を指定してみてください...私が行ったときに、彼らが適切に処理されるように...また
Using
文の中で、あなたの接続とコマンドのをラップ信じるText
として設定されています。.. 。例えば: 'cmd.CommandType = CommandType.StoredProcedure' ...デフォルトでは' Text'と設定されています...あなたの接続とコマンドを 'Using'ステートメントにラップして、終了時に正しく処理されるようにします。また、保存されたprocのパラメータをデフォルトにしますか? – Codexerなぜあなたはそのような置き換えを使用していますか?私はそれが問題だと思う。パラメータを使用する場合は、単一引用符をダブルに置き換える必要はありません。これは最近、パラメータを使用していなかったコードの外観を持っていますが、今はそうです。交換を取り外します。 SQLプロファイラを使用して、実際に何が渡されているかを確認します。 zagglerが提案するようにコマンドタイプも変更してください。 –
例外をスローするのではなく、ブレークポイントを使用する必要があります。しかし、私はあなたが「〜で」を置き換えるためだと思います。パラメータを使用しているときにこれを行う必要はありません。私はあなたが前に連結していたと仮定し、後でパラメータでそれを適切に行うことに決めました。 –