Use*_*r59 1 .net vb.net oledb datagridview
我试图通过在文本框中输入文本然后使用SQL查询数据库然后在datagridview中显示结果来搜索数据库中的特定值.
这是代码:
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtSearch.TextChanged
Connection.Open()
Dim dataTable As New DataTable
Dim dataSet As New DataSet
dataSet.Tables.Add(dataTable)
Dim dataAdapter As New OleDbDataAdapter
Dim SQLQuery As String
SQLQuery = <sql>
SELECT *
FROM Students
WHERE StudentFirstName = @StudentFirstName
</sql> .Value
dataAdapter = New OleDbDataAdapter(SQLQuery, Connection)
dataAdapter.SelectCommand.Parameters.Add("@StudentFirstName", SqlDbType.Text).Value = txtStudentFirstname.Text
dataAdapter.Fill(dataTable)
dgrStudentDatabaseViewer.DataSource = dataTable.DefaultView
ShowItems()
Connection.Close()
End Sub
Run Code Online (Sandbox Code Playgroud)
对ShowItems()的调用刷新datagridview这里是它的代码
Private Sub ShowItems() ' the following delcleration are used for displaying the contents of the table
Dim dataAdapter As New OleDbDataAdapter
Dim DataTable As New DataTable
Dim DataSet As New DataSet
Dim SQLQuery As String = <sql>SELECT * FROM Students</sql>
DataSet.Tables.Add(DataTable)
dataAdapter = New OleDbDataAdapter(SQLQuery, Connection)
dataAdapter.Fill(DataTable) ' fills the content from the database into the table in vb net
dgrStudentDatabaseViewer.DataSource = DataTable.DefaultView
Connection.Close()
End Sub
Run Code Online (Sandbox Code Playgroud)
此刻,当我试图搜索没有任何事情发生时,datagridview的内容仍然保持原样.我知道它可能与我的SQL查询的XML文字有关,但无法弄清楚.
提前致谢.
您可以通过New一遍又一遍地创建数据库对象来实现自己的目标.如果DataAdapter是表单级变量,则必须编写更少的代码:
Public Class Form1
' declare some persistant DB objects
Private myDT As DataTable
Private myDA As OleDbDataAdapter
Private myStudentsDataView As DataView
Private dbConnStr As String = "(your connection string)"
Run Code Online (Sandbox Code Playgroud)
这些只是声明,没有它们的实例(不New).但是,在那里他们被宣布决定Scope.它们将一直存在,直到表单关闭(或者用Dim/和/或覆盖它们New).表格加载:
' initialize the objects
Dim sql = "SELECT A, B, C, D... FROM Students"
' this is the ONLY place you use NEW
' with these objects
myDT = New DataTable()
' The Adapter can create its own Connection
' and SelectCommand
myDA = New OleDbDataAdapter(sql, dbConnStr)
Dim myCB As New OleDbCommandBuilder(da)
' "teach" the DA how to Update and Add:
myDA.UpdateCommand = myCB.GetUpdateCommand
myDA.InsertCommand = myCB.GetInsertCommand
myDA.DeleteCommand = myCB.GetDeleteCommand
myDA.Fill(myDT)
myDA.FillSchema(myDT, SchemaType.Source)
myStudentsDataView = myDT.DefaultView
dgvStudents.DataSource = myStudentsDataView
Run Code Online (Sandbox Code Playgroud)
将DataAdapter需要一个连接对象的工作,但作为注解中提到的,而不是明确创建一个,该适配器可以创建自己的.它会根据需要打开和关闭它.对于SelectCommand它来说也是如此- 它将从传递的SELECT SQL语句中创建自己的.
请注意,最好按照希望列显示的顺序指定每列DataTable.重要的是,在最后的是 DataAdapter知道如何删除,插入和更新的行.只要您不破坏它或替换它,您就不必编写任何SQL来添加或更改行!
在大多数情况下,DataTable它用作DataSourceDGV:
myDGV.DataSource = myDT
Run Code Online (Sandbox Code Playgroud)
DGV将创建所需的列并将数据显示为行.当用户键入单元格时,这些更改会反映在单元格中,DataTable因此不需要任何代码将其删除.
在用户编辑数据的情况下,DataGridView您只需将更改发送回DB:
myDa.Update(myDT)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,根据以前的问题,数据来自文本控件而不是DGV.所以:
Private Sub AddStudent()
' no need to (RE)create DataAdapter
' add the data to a new row:
Dim dr = myDT.NewRow
dr.Item("FirstName") = textbox1.text
dr.Item("LastName") = textbox2.text
' etc etc
' add the new row to the datatable
myDT.Rows.Add(dr)
' with a persistent DA, this is all you need to add a row:
myDA.Update(myDT)
End Sub
Run Code Online (Sandbox Code Playgroud)
我们"教"了DataAdapter如何在表单加载中更新行,因此实际更新数据库(一旦数据在DT中)就是一行代码:myDA.Update(myDT).
该DataTable曲目各行是否是新的,更改或删除连,所以 myDA.Update(myDT)需要为每一个相应的操作.如果系统是多用户,您可以选择其他用户的更改:
myDa.Fill(myDT)
Run Code Online (Sandbox Code Playgroud)
搜索也很简单:
Private Sub Search(txt As String)
myStudentsDataView.RowFilter = String.Format("LastName = '{0}'", txt)
Run Code Online (Sandbox Code Playgroud)
要删除过滤器:
myStudentsDataView = myDT.DefaultView
Run Code Online (Sandbox Code Playgroud)
如果/当您DataAdapter无法添加,插入,更新或删除它意味着您在New某处创建了一个.不要这样做.同样,myDataView在myDT您创建新的DT或DV或更改之前,将显示所有内容RowFilter.
| 归档时间: |
|
| 查看次数: |
1693 次 |
| 最近记录: |