vb.net - 我只想知道这两个在vb.net中的区别?使用数据适配器和使用 oledb 命令?
问题描述
Private Sub Contestant_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim command As String
Dim dsSET As New DataSet
Dim connect As OleDb.OleDbConnection = New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\athan\Documents\PAGEANT.accdb")
command = "SELECT * from Contestant "
Dim da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(command, connect)
comSTR = "SELECT * from Contestant "
dsSET.Clear()
da.Fill(dsSET, "contest")
dgvContestant.DataSource = dsSET
dgvContestant.DataMember = "contest"
End Sub
我不明白上面的代码,但它仍然从数据库中获取数据并将其加载到 datagridview。
下面是另一个代码,但会引发此错误:“未为命令对象设置命令文本。”
Private Sub Contestant_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim dsSET As New DataSet
Dim connect As OleDb.OleDbConnection = New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\athan\Documents\PAGEANT.accdb")
Dim cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand
With cmd
.Connection = connect
.CommandText = "SELECT * from Contestant "
Dim da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(command, connect)
.Connection.Open()
.ExecuteNonQuery()
da.Fill(dsSET, "contest")
dgvContestant.DataSource = "contest"
.Connection.Close()
End With
End Sub
解决方案
在第二个代码片段中,您正在设置CommandText
ofcmd
但不设置CommandText
of command
。然后command
您将其传递给数据适配器。为什么首先有两个命令对象?如果cmd
是CommandText
您设置的命令对象,那么肯定应该是您传递给数据适配器的命令对象。
连接对象在您的应用程序和数据库之间创建连接。SQL 可以通过该连接和来回传递的数据执行。
命令对象包含 SQL 代码和可选的 SQL 参数。命令总是与执行它的连接相关联。如果命令包含一个SELECT
语句,那么您可以调用ExecuteScalar
来检索单个值或ExecuteReader
检索零个、一个或多个包含一个或多个列的记录。如果命令不包含SELECT
语句,则可以调用ExecuteNonQuery
.
数据适配器基本上是一组最多四个命令对象,用于执行 CRUD 操作。当您调用 时Fill
,将SelectCommand
执行 以将数据检索到DataTable
. 当您调用Update
时,InsertCommand
会根据需要执行 和 以将更改从 a 保存UpdateCommand
到数据库。DeleteCommand
DataTable
创建数据适配器时,您可以为适配器提供现成的命令对象,也可以SelectCommand
让适配器自己创建。如果您执行后者,您可以传递 SQL 代码和现有连接,或者您可以传递 SQL 代码和连接字符串,在这种情况下,适配器也会创建连接对象。数据适配器不会创建自己的InsertCommand
,UpdateCommand
因此DeleteCommand
您必须自己创建,或者在某些情况下,您可以使用命令生成器为您创建。
看看我的 ADO.NET 示例,您可能会从中受益。
推荐阅读
- python - 如何在不修改程序的情况下让请求打印出发送的原始 HTTP 请求?
- android - Jetpack Compose:使用 Modifier.selectable 时,如何防止可组合布局在滚动时可选?
- python - 在 Python 中将 15 分钟的数据重采样为 5 分钟的间隔
- svm - 无法理解 SVM 中的双重求和
- vue.js - v-if 中的路由器链接正在工作,但 url 没有改变
- jquery - Lua 中是否有像 jQuery 那样的“this”类型的选择器?
- angular - Angular + Capacitor:输入未与键盘对齐
- java - 如何使用 Jackson 将 json 对象的属性解析为地图
- python - 用 plotly 连接线之间的间隙
- python - Tensorflow TextVectorization 层:如何定义自定义标准化函数?