次のSQLクエリは、SQLManagementStudioで完全に機能します。
DECLARE @phone AS varchar(25)
SET @phone = NULL
DECLARE @firstname AS varchar(25)
SET @firstname = NULL
DECLARE @lastname AS varchar(25)
SET @lastname = NULL
DECLARE @email AS varchar(300)
SET @email = NULL
SELECT id, lead_code, first_name + ' ' + last_name AS [name], lead_status, lead_source, date_entered, city, state, zip, gender, home_phone, call_back
FROM leads
WHERE (home_phone = @phone OR @phone IS NULL) AND
(first_name = @firstname OR @firstname IS NULL) AND
(last_name = @lastname OR @lastname IS NULL) AND
(email = @email OR @email IS NULL)
ORDER BY date_entered DESC
これがsprocのトップです:
ALTER PROCEDURE dbo.custom_LeadsGetAllLeadsSimpleSearchParams
(
@phone varchar(25) = null,
@firstname varchar(25) = null,
@lastname varchar(25) = null,
@email varchar(300) = null
)
AS
SELECT id.....
このように実行すると、DB内の2100行すべてが得られ、SETコマンドの1つを変更して名前または電子メールアドレスを検索すると、それらの行だけが返されます。SQLは(おそらく素晴らしいとは言えませんが)機能していると思います。
問題は.NET部分にあります。
ページの後ろのコードから私はこれをやっています:
sd.SelectCommandType = SqlDataSourceCommandType.StoredProcedure;
sd.SelectCommand = "custom_LeadsGetAllLeadsSimpleSearchParams";
sd.SelectParameters.Add("@phone", strPhone);
sd.SelectParameters.Add("@firstname", strFirstName);
sd.SelectParameters.Add("@lastname", strLastName);
sd.SelectParameters.Add("@email", strEmail);
gvLeads.DataBind();
nullの場合、文字列変数はnullとして渡されます。デバッガーでsd.SelectParametersコレクションを見ると、必要なときに必要な場所でパラメーター値がnullとして表示されます。問題は、データバインドが発生すると、グリッドがデータなしでレンダリングされることです。グリッドビューに、設定した行なしのテキストが表示されます。アイデア?