2014-02-07 29 views
0

我正在運行以下SQL查詢以從數據表中填充組合框。如果SQL不返回任何內容,則將預定義行返回到組合框中

如果查詢返回什麼話,我想retuen的3行

我試着插入Refresh行後以下,也是da.fill(dt)但之後它只是返回空白預先定義的列表字段

If da.fill(dt) = nothing then 
dt.rows.add("list1") 
dt.rows.add("list2") 
dt.rows.add("list3") 
end if 

上GotFocus事件SQL代碼

Private Sub Op1_GotFocus(sender As Object, e As EventArgs) Handles Op1.GotFocus 

    Dim search As String = txtUnitCode.Text 
    Dim da As New OleDb.OleDbDataAdapter("", "") 
    Dim dt As New DataTable 
    Dim conn As String 

    conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Main.aClients & "" 

    da.SelectCommand.Connection.ConnectionString = conn 
    da.SelectCommand.CommandText = "SELECT Name FROM Operations WHERE (UnitCode = " & search & ") AND (OpIsDead = False)" 
    da.Fill(dt) 
    Op1.DataSource = dt 
    Op1.DisplayMember = "Name" 
    Op1.Refresh() 

End Sub 

回答

2
OleDbDataAdapter.Fill

返回一個整數,爲t他統計你的命令檢索到的行。
如果沒有行,則其值爲零。所以,可能是你應該在代碼

If da.fill(dt) = 0 then 
    dt.rows.add("list1") 
    dt.rows.add("list2") 
    dt.rows.add("list3") 
end if 

作爲一個方面說明,我不知道爲什麼要在GotFocus事件來執行這樣的操作。通常這不適合從數據庫加載數據等潛在緩慢的活動。

最後,我建議不要使用字符串連接來創建查詢文本。參數化查詢是始終即使你不必擔心SQL注入

da.SelectCommand.Connection.ConnectionString = conn 
da.SelectCommand.CommandText = "SELECT Name FROM Operations " & _ 
           "WHERE (UnitCode = ?) AND (OpIsDead = False)" 
da.SelectCommand.Parameters.AddWithValue("@p1", Convert.ToInt32(search)) 
If da.fill(dt) = 0 then 
    dt.rows.add("list1") 
    dt.rows.add("list2") 
    dt.rows.add("list3") 
end if 
+0

輝煌,謝謝,似乎如果不SQL從它的複製結果的查詢返回一個值但工作的最佳解決方案。我目前在'da.fill(dt)'行之前添加代碼,但我也嘗試過之後,以及 – elmonko

+0

嗨,Ist可能你可以向我解釋這一行'da.SelectCommand.Parameters.AddWithValue(「@ p1 「,搜索)'我不確定'@ p1'位是從哪裏來的 – elmonko

+0

這是參數的名稱。在OleDb中,參數通過它們在命令文本中出現的順序(?佔位符)進行識別。但是當你爲任何DbCommand.Parameters集合添加一個參數時,你應該提供一個名稱(集合的關鍵),所以我寫了'@ p1',但是我可以寫任何東西,但是要尊重佔位符的順序 – Steve

相關問題