将NULL SQL参数值作为SelectParameters传递给Gridview

时间:2011-08-29 19:43:41

标签: asp.net gridview selectcommand

以下SQL查询在SQL Management Studio中完美运行:

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.....

以这种方式运行它给了我数据库中的所有2100行,当我更改其中一个SET命令来搜索名称或电子邮件地址时,它返回JUST那些行,我认为我的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。问题是当数据绑定发生时,网格呈现没有数据。我只是得到gridview没有我设置的行文本。想法?

3 个答案:

答案 0 :(得分:1)

sd.CancelSelectOnNullParameter = false;

答案 1 :(得分:1)

您是否尝试过添加此参数?

CancelSelectOnNullParameter

像这样:

sd.CancelSelectOnNullParameter = false;

答案 2 :(得分:0)

您是否尝试将此添加到每个参数:

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

我不知道ConvertEmptyStringToNull是否将参数值转换为NULL或DbNull.Value,但您可能尝试使用DbNull.Value而不是NULL。

编辑:第二个想法,只有当参数可用时才包含这些参数:

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

我认为这个解决方案可行,因为当它为空时你只是完全排除它。