首页 > 解决方案 > 我只想知道这两个在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

标签: vb.netms-accessoledbexception

解决方案


在第二个代码片段中,您正在设置CommandTextofcmd但不设置CommandTextof command。然后command您将其传递给数据适配器。为什么首先有两个命令对象?如果cmdCommandText您设置的命令对象,那么肯定应该是您传递给数据适配器的命令对象。

连接对象在您的应用程序和数据库之间创建连接。SQL 可以通过该连接和来回传递的数据执行。

命令对象包含 SQL 代码和可选的 SQL 参数。命令总是与执行它的连接相关联。如果命令包含一个SELECT语句,那么您可以调用ExecuteScalar来检索单个值或ExecuteReader检索零个、一个或多个包含一个或多个列的记录。如果命令不包含SELECT语句,则可以调用ExecuteNonQuery.

数据适配器基本上是一组最多四个命令对象,用于执行 CRUD 操作。当您调用 时Fill,将SelectCommand执行 以将数据检索到DataTable. 当您调用Update时,InsertCommand会根据需要执行 和 以将更改从 a 保存UpdateCommand到数据库。DeleteCommandDataTable

创建数据适配器时,您可以为适配器提供现成的命令对象,也可以SelectCommand让适配器自己创建。如果您执行后者,您可以传递 SQL 代码和现有连接,或者您可以传递 SQL 代码和连接字符串,在这种情况下,适配器也会创建连接对象。数据适配器不会创建自己的InsertCommandUpdateCommand因此DeleteCommand您必须自己创建,或者在某些情况下,您可以使用命令生成器为您创建。

看看我的 ADO.NET 示例,您可能会从中受益


推荐阅读