Выберите с помощью -1 в поле tinyint на MYSQL

Я написал следующий код, чтобы отфильтровать людей, которым нужна новостная рассылка по почте или по электронной почте:

Sub loadoverviewnewsletter()
        Dim sql As String
        Dim sql1 As String
    If newslettermail = True Then
        sql = "SELECT * FROM Donateurs WHERE 'Newsletter per e-mail' =-1"
        sql1 = "SELECT * FROM Donateurs WHERE 'Newsletter per e-mail' =-1"
    ElseIf newsletterpost = True Then
        sql = "SELECT * FROM Donateurs WHERE 'Newsletter per post' =-1"
        sql1 = "SELECT * FROM Donateurs WHERE 'Newsletter per post' =-1"
    ElseIf newsletternew = True Then
        sql = "SELECT * FROM Donateurs WHERE 'Newsletter per post' =0 AND 'Nieuwsbrief per e-mail' =0"
        sql1 = "SELECT * FROM Donateurs WHERE 'Newsletter per post' =0 AND 'Nieuwsbrief per e-mail' =0"
    Else
        sql = "SELECT * FROM Donateurs"
        sql1 = "SELECT * FROM Donateurs"
    End If

    Dim adapter As New MySqlClient.MySqlDataAdapter(sql, modConnectorHandler.ServerString)
    Dim dt As New DataTable("newsletteroverview")
    adapter.Fill(dt)
    ShowDonateurs.datagrid.DataSource = dt

    ShowDonateurs.ShowDialog()
    Dim adapter1 As New MySqlClient.MySqlDataAdapter(sql1, modConnectorHandler.ServerString)
    Dim cmd1 As New MySqlClient.MySqlCommand(sql1, modConnectorHandler.mysqlconnection)
    modConnectorHandler.mysqlconnection.Open()
    Dim myreader As MySqlClient.MySqlDataReader = cmd1.ExecuteReader
    myreader.Read()
    modConnectorHandler.mysqlconnection.Close()
    OverviewNewsLetter.Close()

К сожалению, он возвращает пустую сетку данных, а когда я выбираю параметр новостной рассылки, он показывает полную таблицу. Поля "Информационный бюллетень по электронной почте" и "Информационный бюллетень по почте" являются полями tinyint, которые могут иметь значения -1 (означает, что проверено в приложении) и 0 (значит, не отмечено).

Я действительно не понимаю, почему это не работает.. Я надеюсь, что любой может помочь.

1 ответ

Решение

Вы должны использовать обратные кавычки вместо одинарных кавычек для имен столбцов. Учти это WHERE состояние:

WHERE 'Newsletter per e-mail' =-1

Это сравнивает строковую константу Newsletter per e-mail в -1, Результат сравнения всегда false, Попробуйте это вместо этого:

WHERE `Newsletter per e-mail` = -1

Теперь это относится к имени столбца, а не к строковой константе.

Наконец, по возможности избегайте имен столбцов, которые должны иметь обратную косую черту (а это почти всегда). Как видите, они, как правило, приводят к неприятностям.

Другие вопросы по тегам