按 ID 列过滤

Filtering by ID column

我正在尝试通过 ID (PID) 列从 visual studio 中的 Ms access DB 中过滤 table,但我不知道如何将 int 转换为字符串,或将其转换为字符串工作。

有什么想法请。

    con.ConnectionString = dbProvider & dbSource
    con.Open()

    If PIDfindTextBox.Text = "" Then
        MessageBox.Show("Please enter a Patient ID number")
    Else
        PatienrocordBindingSource.Filter = "((PID,'system.string') like '" & PIDfindTextBox.Text & "')"
        If PatienrocordBindingSource.Count <> 0 Then
            With dataGridView1.DataSource = PatienrocordBindingSource
            End With
        Else
            MessageBox.Show("Searched Patient ID was not found")
            PatienrocordBindingSource.Filter = Nothing
        End If
    End If
End Sub

你的代码很混乱。它打开一个数据库连接然后设置一个绑定源过滤器,这不是真正的事情进展

绑定源是位于数据模型(例如数据table(不是数据库中的table)和UI元素(例如数据网格视图或其他控件。绑定源可以过滤它在模型中找到的数据。 None 这与首先用数据填充模型有关,这通常是通过将其从数据库中拉出来完成的

您或许可以完全避免与数据库连接交互;如果您使用 OledbDataAdapter,您可以从数据库中提取数据并将其加载到程序内存中的数据table中

因此,您可以选择在何处过滤数据。您要么将整个数据库加载到程序的内存中,然后使用 bindingsource 过滤器根据需要只显示一个 - 所有数据都存在于 datatable 中,只有一部分通过 bindingsource ..

或者你只把部分数据从数据库中下载出来,放入datatable,然后你就不需要在bindingsource中过滤了

您还可以采用混合方法,例如将 10 条记录加载到数据中table,然后在绑定源中过滤


选择您的方案 - 大多数人选择中间方案,您只需下载所需的数据。那里有很多示例,但作为一个粗略的模板,我搜索数据库 table 并提取结果如下所示:

Dim da as New OleDbDataAdapter("SELECT * FROM Person WHERE Id =?", "connection string here")
da.SelectCommand.Parameters.AddWithValue("id", Convert.ToInt32(idTextbox.Text))
Dim dt as New DataTable
da.Fill(dt)
bindingsource.DataSource = dt

如果您的数据中有 10 行table并且想过滤到某个 ID

bindingsource.Filter = "[Id] = " & idFilterTextBox.Text

您不需要同时使用这两种方法;使用适合您的上下文的那个