Vb.net 如何使TextBox更改事件筛选器GridView指向SQL Server?
我有下面适用于MS Access的代码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
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
事件中重置的计时器。这样,如果用户相当快地输入多个字符,就可以避免额外的过滤器。大约半秒钟是个好主意。