SQLクエリはManagement Studioでは動作しますが、プログラムでは動作しません

次のクエリを考えてみましょう。

SELECT     LP.project_id, LP.title, LP.type, LU.NAME, LP.reference, LP.status, LP.correspondence, LP.source, LP.deadline, LP.mstat, LP.num_pages, LP.done, 
                      LP.ss_notes
FROM         LogiCpsProjects AS LP LEFT OUTER JOIN
                      LogiCpsProjectAssignments AS LPA ON LP.project_id = LPA.project_id LEFT OUTER JOIN
                      LogiCpsUsers AS LU ON LPA.writer_id = LU.ID
WHERE     (LP.status <> 'Closed') AND (LP.status <> 'Cancelled') AND (LP.type LIKE '%' + @type + '%') AND (LP.status LIKE '%' + @status + '%') AND 
                      (LP.source LIKE '%' + @source + '%') AND (CAST(LP.mstat AS VARCHAR(50)) LIKE '%' + @mstat + '%')
ORDER BY LP.project_id

このクエリでは、@type、@status、@source、@mstatという4つのパラメータに基づいて検索を実行しようとしています。問題はこのクエリがSql Server Management Studioと同じように動作することです。たとえば、型パラメータに「Article」と入力し、空白のままにしておくと、type = 'Article'のすべてのレコードが返され、type = 'Article 'status =' Working 'とすると、type =' Article '、status =' Working 'などのすべてのレコードが返されます。単純検索では、ユーザーはすべてのパラメータを空白にしたり、四。 MSではうまく動作しますが、実際のプログラムではうまく動作しません。

すべてのパラメータを空白のままにしておくと、同じクエリでSqlDataSourceを使用していますが、1つのパラメータを入力すると何も返されず、4つのパラメータをすべて入力すると返されません空白のパラメータ。パラメータを送信するには、4つのドロップダウンリストを使用しています。それらのすべてがこのように見えます。

        
All
Details Pending
Working
Awaiting Feedback
Project Complete (AFB)
Revision Required Client
Revision Required Editor
To be Cancelled
Cancelled
Requirements Not Clear
Hold
Closed
    

最初の項目はALLとして定義され、値とテキストは ""(空の文字列)に設定されているので、ALLを選択すると、その特定のパラメータのすべてのレコードを意味します。

私が間違っていることは何ですか?

0

1 答え

すべてのパラメータにnullまたは空の文字列を送信するかどうかに注意してください。 SQLステートメント "% '+ null +'% ''を選択して管理スタジオを実行すると、結果がnullであることがわかります。これはあなたが探しているものではありません。

1
追加された
彼の記述に基づいて保存されたprocのように聞こえる。しかし、彼は管理スタジオでそれを実行し、それが保存されているかどうかにかかわらず同じ結果を得ることができます。コードをステップ実行して実際にクエリを実行して、実際にクエリを実行していたのではなく、送信されているクエリを実行していることを本当に確認してください。
追加された 著者 Brandon Moore,
+1これがストアドプロシージャの場合、ヌルでSSMSから呼び出すことができ、同じ結果が得られるかどうかを確認することができます。
追加された 著者 Mr Moose,