2013-05-20 103 views
0

我寫了下面的代碼過濾誰通過郵寄或電子郵件想要一個簡報的人:選擇在TINYINT領域使用-1 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() 

不幸的是,它返回一個空的DataGrid,而當我選擇newsletternew選項,它顯示完整的表格。 「每封電子郵件通訊」和「每封郵件通訊」字段都是tinyint字段,其值可以是-1(表示在應用程序中選中)和0(未選中)。

我真的不明白爲什麼它不工作..我希望任何人都可以幫忙。

回答

1

您需要使用反引號代替列名中的單引號。考慮這個WHERE條件:

WHERE 'Newsletter per e-mail' =-1 

它比較字符串常量Newsletter per e-mail-1。比較結果始終爲false。試試這個:

WHERE `Newsletter per e-mail` = -1 

現在它指的是列名而不是字符串常量。

最後,儘可能避免需要反引號的列名(這幾乎是所有時間)。正如你所看到的,它們往往會導致麻煩。

+0

它修復了這個問題,謝謝!對於像我這樣的初學者來說,它就是這樣一個細節,我甚至沒有注意到兩者之間存在差異。謝謝你的幫助! –