5

テーブル名の学生が(studentId、StudentName、Address、PhoneNo)を持っています

ユーザーが Combobox から StudentId のみを選択して学生の詳細を取得するためのフィルターを提供しました...そしてレポートを生成します。

学生の詳細を取得するために、次のクエリを作成しました。

(select * from Students where StudentId = stdId)

ここで stdId は、コードから渡すパラメーターです

単一のstudentIdを選択すると正常に機能します....しかし、ユーザー選択コンボボックスでは、ユーザーがコンボボックスから選択する場合、すべての学生の詳細を表示したい"ALL" 場合にも提供しましたAll

stdIdユーザーが選択した場合、何を渡す必要がありAll ますか?

C# でインライン クエリを使用しました (SQL ストアド プロシージャは使用しません)。

4

4 に答える 4

6

このようにできます。

SELECT * from Students s
WHERE s.studentId = ISNULL(@StudentId,s.studentId) 

コンボボックスで「すべて」が選択されている場合は、@studentid パラメータに null を渡します。パラメータにnullを渡すことができない場合は、-1またはcomboxオプションに含めることができないものを渡して、次のようにします:(if -1= All)

 SELECT * from Students s
 WHERE s.studentId = @StudentId or @StudentId=-1

Curt の回答を試すこともできます。

于 2012-10-24T11:16:28.367 に答える
6

ユーザーがすべてを選択した場合は、クエリを次のように渡しNULL@StudentId変更します。

select *
from Students
where (StudentId=@StudentId OR @StudentId IS NULL)
于 2012-10-24T11:08:07.460 に答える
4

ストアド プロシージャ ヘッダーで、@StudentId の定義を変更して、NULL として渡せるようにします。

ALTER PROCEDURE dbo.WhateverYourProcedureIsCalled( @StudentId int  = null )

次に、次のように WHERE 句を変更します

...

SELECT * from Students
WHERE @StudentId IS NULL OR StudentId = @StudentId

コードから、ALL が渡された場合、@StudentId パラメーターの値を設定する部分を省略できます。渡されない場合、SQL Server はデフォルトを使用します。

于 2012-10-24T11:08:34.743 に答える
1

クエリに where 句が含まれている場合は、有効なパラメーター値も指定する必要があるため、where 句が含まれているとすべての学生を取得することはできません。

コンボボックスで選択した値に基づいてクエリを区別する必要があります。次のようなことができます。

int studentId = 0;
//Where selectedValue comes from your combobox
Int32.TryParse(selectedValue, out studentId);
var query = "select * from Students";
if (studentId > 0)
{
  query = query + " where StudentId = @StudentId";
  //Remember to add studentId as parameter value
}
于 2012-10-24T11:10:30.173 に答える