如果SQL不返回任何内容,则将预定义的行返回到组合框中

如果SQL不返回任何内容,则将预定义的行返回到组合框中,sql,vb.net,Sql,Vb.net,我正在运行以下SQL查询以从数据表填充组合框 如果查询不返回任何内容,那么我想返回一个预定义的3行列表 我尝试在刷新行之后以及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

我正在运行以下SQL查询以从数据表填充组合框

如果查询不返回任何内容,那么我想返回一个预定义的3行列表

我尝试在
刷新
行之后以及
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
返回一个整数,该整数是您的命令检索到的行数。
如果没有行,则其值为零。所以也许你应该编码

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  

太棒了,谢谢。不过,如果SQL确实从查询返回值并复制结果,那么这似乎是可行的。我目前正在将代码添加到
da.fill(dt)
行之前,但我也在之后尝试过。您好,您可以向我解释这一行
da.SelectCommand.Parameters.AddWithValue(@p1),search)
我不确定
“@p1”
位来自何处。它是参数的名称。在OleDb中,参数通过其在命令文本中的显示顺序(占位符)进行识别。但是,当您向任何DbCommand.Parameters集合添加参数时,您应该提供一个名称(集合的键),因此我编写了
@p1
,但我可以编写任何内容,但不能尊重占位符的顺序。谢谢您,这一点更清楚。由于添加
If
statement如果
UnitCode
是数据库表上的整数,我们需要将
search
转换为整数,才能使用
AddWithValue