1

次の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として表示されます。問題は、データバインドが発生すると、グリッドがデータなしでレンダリングされることです。グリッドビューに、設定した行なしのテキストが表示されます。アイデア?

4

3 に答える 3

1

このパラメータを追加してみましたか?

CancelSelectOnNullParameter

このような:

sd.CancelSelectOnNullParameter = false;
于 2011-08-29T20:07:46.470 に答える
1

sd.CancelSelectOnNullParameter = false;

于 2011-08-29T20:05:55.583 に答える
0

これを各引数に追加してみましたか?

sd.SelectParameters["@phone"].ConvertEmptyStringToNull = true;

ConvertEmptyStringToNullがパラメーター値をNULLまたはDbNull.Valueに変換するかどうかはわかりませんが、NULLの代わりにDbNull.Valueを使用してみてください。

編集:考え直して、パラメータが利用可能な場合にのみパラメータを含めるのはどうですか?

if (!String.IsNullOrEmpty(strEmail))
    sd.SelectParameters.Add("@email", strEmail);

nullの場合は完全に除外するだけなので、このソリューションは機能すると思います。

于 2011-08-29T19:55:16.983 に答える