ASP.net SQL Query проблема с использованием повторителя - PullRequest
2 голосов
/ 19 апреля 2011

Это мой запрос в хранимой процедуре.Я использую ретранслятор для отображения информации.Проблема в том, что если я ищу, скажем

Ename = Джим
ELocation = Центр Смита
ECity = Атланта

через построитель запросов, я получаюдва результата, которые у меня есть, которые соответствуют этому.Но когда я связываю свой источник данных с ретранслятором и добавляю параметры, затем пытаюсь выполнить запрос, мой репитер пуст.Переменные передаются из элементов управления Textbox.Также, если я передаю только одну переменную, скажем, как title, она работает просто отлично.Но когда я пытаюсь передать две или более переменных, я ничего не получаю.Кто-нибудь есть какие-либо идеи о том, что делать?

    @title varchar(150),
    @venue varchar(150),
    @city varchar(100),
    @state varchar(50),
    @country varchar(100),
    @desc varchar(150),
    @date smalldatetime = null
AS

SELECT     EID, EName, EDate, EDEnd, ELocation, ECity, EState, EDesc, EWebsite
FROM         esc
WHERE     (@title IS NULL OR EName LIKE '%' + @title + '%') 
           AND (@venue IS NULL OR ELocation LIKE '%' + @venue + '%')
           AND (@city IS NULL OR ECity LIKE '%' + @city + '%') 
           AND (@state IS NULL OR EState LIKE '%' + @state + '%') 
           AND (@country IS NULL OR ECountry = @country) 
           AND (@desc IS NULL OR EDesc LIKE '%' + @desc + '%') 
           AND (@date IS NULL OR EDate = @date)

Сжатый код при нажатии кнопки .:

        SqlConnection conn = null;
        try
        {
            conn = new SqlConnection("");
            SqlCommand command = new SqlCommand();
            command.Connection = conn;

            command.CommandText = "seesc";
            command.CommandType = CommandType.StoredProcedure;

            SqlParameter title = new SqlParameter();
            title.ParameterName = "@title";
            title.SqlDbType = SqlDbType.VarChar;
            title.Direction = ParameterDirection.Input;
            title.Value = TitleTextBox.Text;

            //other parameters declared here

                command.Parameters.Add(title);
                //other parameters added here

                conn.Open();
                SqlDataReader reader = command.ExecuteReader();
                if (reader.HasRows)
                {
                    evrep.DataSource = reader;
                    evrep.DataBind();
                }
        }
        catch { }

1 Ответ

0 голосов
/ 19 апреля 2011

В самом запросе есть опечатка.

       AND (@city IS NULL OR ECity LIKE '+' + @city + '%') 
       AND (@state IS NULL OR EState LIKE '+' + @state + '%')

должно быть

       AND (@city IS NULL OR ECity LIKE '%' + @city + '%') 
       AND (@state IS NULL OR EState LIKE '%' + @state + '%')

Кроме того, когда

       title.Value = TitleTextBox.Text;

используется параметр не будет нулевым, но будет иметь значение пустой строки. Это не выполнит условие

       AND (@country IS NULL OR ECountry = @country) 
...