От новичка до гуру: Курсы программирования на CyberDuff

Sql Самая большая ошибка

У меня проблема с SQL-запросом. Когда нам нужно найти более одного поля, мы используем оператор И, но когда одно из полей пусто, оно не показывает значения. Например.:-

Select * from table_name 
where Party_name='"+ textbox.text &"' 
And No='"+ Textbox2.text &"'"

когда одно из полей пусто, оно не показывает никакого значения. Пожалуйста, помогите мне!

17.09.2014

  • Вы говорите, что когда поле пусто, вы не хотите фильтровать это поле? Используйте некоторую логику, чтобы определить это, и не добавляйте ее в строку SQL, когда она пуста. 17.09.2014

Ответы:


1

Вот как вы можете реализовать дополнительные фильтры:

Dim sql = <sql>
              SELECT *
              FROM MyTable
              WHERE (@Column1A IS NULL OR Column1 = @Column1B)
              AND (@Column2A IS NULL OR Column2 = @Column2B)
          </sql>

command.CommandText = sql.Value

Dim filter1 = If(TextBox1.TextLength = 0, CObj(DBNull.Value), TextBox1.Text)
Dim filter2 = If(TextBox2.TextLength = 0, CObj(DBNull.Value), TextBox2.Text)

With command.Parameters
    .Add("@Column1A", OleDbType.VarChar, 50).Value = filter1
    .Add("@Column1B", OleDbType.VarChar, 50).Value = filter1
    .Add("@Column2A", OleDbType.VarChar, 50).Value = filter2
    .Add("@Column2B", OleDbType.VarChar, 50).Value = filter2
End With

Во-первых, обратите внимание на использование литерала XML, чтобы сделать код SQL более читаемым. Во-вторых, обратите внимание на использование параметров для вставки значений в код, а не на объединение строк.

Что касается собственно фильтрации, давайте посмотрим на одну пару параметров:

@Column1A IS NULL OR Column1 = @Column1B

Если TextBox1 пусто, то и @Column1A, и @Column1B получают значение NULL. Это означает, что первое условие истинно, и каждая строка соответствует, фактически игнорируя этот фильтр. Если TextBox1 не пусто, то первое условие ложно, и будут соответствовать только те строки, для которых второе условие истинно, таким образом соблюдается этот фильтр.

Стоит отметить, что вам нужны четыре параметра, поскольку вы используете Access. Поставщики Jet и ACE OLE DB используют позиционные параметры, даже если вы используете имена. Это означает, что один OleDbParameter не может использоваться более чем для одного параметра SQL. Если бы вы использовали SQL Server, то двух параметров было бы достаточно, потому что каждый из них можно было бы использовать дважды, т.е.

Dim sql = <sql>
              SELECT *
              FROM MyTable
              WHERE (@Column1 IS NULL OR Column1 = @Column1)
              AND (@Column2 IS NULL OR Column2 = @Column2)
          </sql>

command.CommandText = sql.Value

Dim filter1 = If(TextBox1.TextLength = 0, CObj(DBNull.Value), TextBox1.Text)
Dim filter2 = If(TextBox2.TextLength = 0, CObj(DBNull.Value), TextBox2.Text)

With command.Parameters
    .Add("@Column1", SqlDbType.VarChar, 50).Value = filter1
    .Add("@Column2", SqlDbType.VarChar, 50).Value = filter2
End With
17.09.2014
  • Большое спасибо, это работает.......... 17.09.2014
  • Новые материалы

    Основы Spring: Bean-компоненты, контейнер и внедрение зависимостей
    Как лего может помочь нашему пониманию Когда мы начинаем использовать Spring, нам бросают много терминов, и может быть трудно понять, что они все означают. Итак, мы разберем основы и будем..

    Отслеживание состояния с течением времени с дифференцированием снимков
    Время от времени что-то происходит и революционизирует часть моего рабочего процесса разработки. Что-то более забавное вместо типичного утомительного и утомительного процесса разработки. В..

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

    Игра в прятки с данными
    Игра в прятки с данными Я хотел бы, чтобы вы сделали мне одолжение и ответили на следующие вопросы. Гуглить можно в любое время, здесь никто не забивается. Сколько регионов в Гане? А как..

    «Раскрытие математических рассуждений с помощью Microsoft MathPrompter и моделей больших языков»
    TL;DR: MathPrompter от Microsoft показывает, как использовать математические рассуждения с большими языковыми моделями; 4-этапный процесс для улучшения доверия и рассуждений в математических..

    Раскройте свой потенциал в области разработки мобильных приложений: Абсолютная бесплатная серия
    Глава 6: Работа в сети и выборка данных Глава 1: Введение в React Native Глава 2: Основы React Native Глава 3: Создание пользовательского интерфейса с помощью React Native Глава 4:..

    Все о кейсах: Camel, Snake, Kebab & Pascal
    В программировании вы сталкивались с ними при именовании переменной, класса или функции. Поддержание согласованности типов и стилей случаев делает ваш код более читабельным и облегчает совместную..