Vb.net 如何使TextBox更改事件筛选器GridView指向SQL Server?

Vb.net 如何使TextBox更改事件筛选器GridView指向SQL Server?,vb.net,Vb.net,我有下面适用于MS Access的代码 Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged, TextBox1.Click Dim connectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Excel\Deskt

我有下面适用于MS Access的代码

Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged, TextBox1.Click

    Dim connectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Excel\Desktop\Northwind_2012.mdb"
    Dim selectCommand As String
    Dim connection As New OleDbConnection(connectionString)


    selectCommand = "Select * From MyExcelTable where Fname Like '%" & TextBox1.Text & "%'"
    Me.dataAdapter = New OleDbDataAdapter(selectCommand, connection)

    With DataGridView1
        .AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells
        .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.ColumnHeader
        .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.ColumnHeader
    End With

    Dim commandBuilder As New OleDbCommandBuilder(Me.dataAdapter)
    Dim table As New DataTable()

    table.Locale = System.Globalization.CultureInfo.InvariantCulture

    Me.dataAdapter.Fill(table)
    Me.bindingSource1.DataSource = table

    Dim data As New DataSet()

    data.Locale = System.Globalization.CultureInfo.InvariantCulture

    DataGridView1.DataSource = Me.bindingSource1
    Me.DataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.Aqua
    Me.DataGridView1.AutoResizeColumns( _
        DataGridViewAutoSizeColumnsMode.AllCells)

End Sub

我想做同样的事情,但指向一个SQL Server查询,而不是Access查询。有人知道怎么做吗?如果是,请分享

通过一些简单的测试,下面的脚本似乎可以正常工作

Imports System.Data.SqlClient

Public Class Form1
    Dim ds As New DataSet

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim con As SqlConnection = New SqlConnection("Data Source=EXCEL-PC\SQLEXPRESS; Integrated Security=true; Initial Catalog=NORTHWND")
        con.Open()
        Dim da As SqlDataAdapter = New SqlDataAdapter("SELECT * FROM Categories", con)
        da.Fill(ds, "Cat")
        DataGridView1.DataSource = ds.Tables("Cat")

    End Sub

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
        ds.Tables("Cat").DefaultView.RowFilter = "[CategoryName] LIKE '*" & TextBox1.Text & "*'"
    End Sub

End Class

明天我会研究一下计时器选项。那太聪明了!谢谢你的提示

您尝试过SQL Server吗?会发生什么?在大多数情况下,网络数据库提供者的工作方式都是相同的。你知道他们每次按键时都会触发
TextChanged
,对吗?代码几乎完全相同。唯一的变化是使用
SqlClient
类型,而不是
OleDb
类型。要找出这一点只需要很少的研究。也就是说,您还应该将查询参数化。使用Access,最糟糕的情况是你的应用程序可能会崩溃。使用SQL Server(它支持每个命令多个语句),恶意用户可能会删除数据库中的每条记录。根据您拥有的数据量,最好先检索所有数据,然后通过
BindingSource
进行筛选。这样可以避免一直返回数据,并可能反复检索相同的数据。在
TextChanged
事件上进行过滤也是一个坏主意。假设用户希望匹配“abcd”。输入该值将引发四个
TextChanged
事件,您将查询数据库四次,并多次获得相同的数据。最好使用在
TextChanged
事件中重置的
计时器。这样,如果用户相当快地输入多个字符,就可以避免额外的过滤器。大约半秒钟是个好主意。