Передача пустых значений параметров SQL в виде SelectParameters, связанных с Gridview - PullRequest
1 голос
/ 29 августа 2011

Следующий 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 для поиска имени или адреса электронной почты, он возвращает ТОЛЬКО те строки, я думаю, что мой 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();

строковые переменные передаются как ноль, когда ноль. Когда я наблюдаю коллекцию sd.SelectParameters в отладчике, я вижу значение параметра как ноль, когда и где это необходимо. Проблема в том, что когда происходит привязка данных, сетка отображается без данных. Я просто получаю gridview без строк текста, который я установил. Идеи?

Ответы [ 3 ]

1 голос
/ 30 августа 2011

sd.CancelSelectOnNullParameter = false;

1 голос
/ 30 августа 2011

Вы пытались добавить этот параметр?

CancelSelectOnNullParameter

Как это:

sd.CancelSelectOnNullParameter = false;
0 голосов
/ 29 августа 2011

Вы пытались добавить это к каждому аргументу:

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

Я не знаю, преобразует ли ConvertEmptyStringToNull значение параметра в NULL или DbNull.Value, но вы можете попробовать использовать DbNull.Value вместо NULL.

РЕДАКТИРОВАТЬ : Если подумать, как насчет включения параметров только тогда, когда они доступны:

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

Я думаю, что это решение будет работать, потому что вы просто исключаете его, когда оно нулевое.

...