在vb.NeT中更新数据库时出现错误

时间:2016-07-07 04:58:43

标签: vb.net datagridview

我使用vb.NET和数据库AS DATABASE1.SDF创建数据库更新程序。我想要动态更新DATAGASE在DATAGridview中。对于更新SQL命令我使用SQLCECOMMANDBUILDER但我得到的错误是" DataAdapter.SelectCommand属性需要初始化。" 这是我的代码:

Imports System.Data.OleDb
Imports System.Data
Imports System.Data.SqlServerCe
Public Class Admin
    Dim update As New SqlCeDataAdapter
    ' sql connection strings 
    Dim SQLCon As String = "Data Source=Database1.sdf"

    Dim sqlstr As String = "Select * from Base_Plate "
    Dim sqlstr1 As String = "Select * from Alloy "
    Dim sqlstr2 As String = "Select * from Bead_Factor "
    Dim sqlstr3 As String = "Select * from Difficulty_Factor "
    Dim sqlstr4 As String = "Select * from Price_Factor "

    ' sql variable of base
    Dim adapter As New SqlCeDataAdapter(sqlstr, SQLCon)
    Dim ds As New DataSet()

    ' sql variable of alloy
    Dim adapter1 As New SqlCeDataAdapter(sqlstr1, SQLCon)
    Dim ds1 As New DataSet()

    ' sql  variable of bead
    Dim adapter2 As New SqlCeDataAdapter(sqlstr2, SQLCon)
    Dim ds2 As New DataSet()

    'sql variable of difficulty
    Dim adapter3 As New SqlCeDataAdapter(sqlstr3, SQLCon)
    Dim ds3 As New DataSet()

    'sql variable of price
    Dim adapter4 As New SqlCeDataAdapter(sqlstr4, SQLCon)
    Dim ds4 As New DataSet()

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        update.Update(ds)
        LoadGrid()

    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Me.Visible = False
        LoginForm1.Visible = True
    End Sub

    Private Sub Admin_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        LoadGrid()
        Button2.Enabled = False

    End Sub
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    End Sub
    Private Sub DataGridView1_CellValueChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged
        Button2.Enabled = True
    End Sub

    Private Sub LoadGrid()


        '************** base datagrid ********************

        adapter.Fill(ds, "Base_Plate")
        DataGridView1.DataSource = ds.Tables(0)
        DataGridView1.Rows(0).Selected = True

        '***************** alloy datagrid *********************

        adapter1.Fill(ds1, "Alloy")
        DataGridView2.DataSource = ds1.Tables(0)
        DataGridView2.Rows(0).Selected = True

        '***************** bead datagrid *********************

        adapter2.Fill(ds2, "Bead_Factor")
        DataGridView3.DataSource = ds2.Tables(0)
        DataGridView3.Rows(0).Selected = True

        '***************** difficulty datagrid *********************

        adapter3.Fill(ds3, "Difficulty_Factor")
        DataGridView4.DataSource = ds3.Tables(0)
        DataGridView4.Rows(0).Selected = True

        '***************** Price datagrid *********************

        adapter4.Fill(ds4, "Price_Factor")
        DataGridView5.DataSource = ds4.Tables(0)
        DataGridView5.Rows(0).Selected = True

        update.UpdateCommand = New SqlServerCe.SqlCeCommandBuilder(update).GetUpdateCommand
    End Sub 

1 个答案:

答案 0 :(得分:0)

你做错了。首先,正如错误消息所述,您尚未设置要传递给命令构建器构造函数的数据适配器的SelectCommand。以下是您的代码中的相关摘要:

Dim update As New SqlCeDataAdapter

update.UpdateCommand = New SqlServerCe.SqlCeCommandBuilder(update).GetUpdateCommand

正如您所看到的,您无处提供SQL SELECT语句,那么命令构建器应该如何知道如何构建其他命令?

其次,即使正确配置了适配器,也是错误的:

update.UpdateCommand = New SqlServerCe.SqlCeCommandBuilder(update).GetUpdateCommand

您不必从命令构建器获取命令并将它们分配给数据适配器的属性。这样做的唯一原因是如果你想编辑它们,你不想编辑它们。创建数据适配器后,创建命令构建器的正确方法就在线上,例如

Dim myDataAdapter As New SqlCeDataAdapter(query, myConnection)
Dim myCommandBuilder As New SqlCeCommandBuilder(myDataAdapter)

就是这样。您只需创建一次,然后只需调用Update即可使用数据适配器。每次保存都没有创建新的,并且没有获取和分配命令。