以下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没有我设置的行文本。想法?
答案 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);
我认为这个解决方案可行,因为当它为空时你只是完全排除它。