2016-07-07 11 views
-1

Ich erstelle einen Datenbank-Updater mit vb.NET und der Datenbank AS DATABASE1.SDF. Ich wollte die Datenbank in DATAGridview dynamisch aktualisieren. Für UPDATE SQL COMMAND verwende ich einen SQLCECOMMANDBUILDER ABER ich bekomme einen Fehler da "Die DataAdapter.SelectCommand -Eigenschaft muss initialisiert werden." Hier ist mein Code:ERSTE SCHRITTE beim Aktualisieren der Datenbank in vb.NeT

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 
+0

Bitte verzichten Sie darauf, in alle CAPS zu schreiben - vor allem ist es ärgerlich schwer zu lesen, und zweitens gilt es als ** schreien ** an Ihr Publikum, die einfach nur unhöflich und beleidigend ist. –

Antwort

0

Sie es falsch zu machen. Erstens, wie die Fehlermeldung besagt, haben Sie nicht die SelectCommand des Datenadapters festgelegt, die Sie an den Konstruktor des Befehlsgenerators übergeben. Hier ist der relevanten Schnipsel aus dem Code:

Dim update As New SqlCeDataAdapter 

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

Wie Sie sehen können, nirgendwo bieten Sie eine SQL-Anweisung SELECT so wie der Befehl Builder sollte wissen, wie die anderen Befehle zu bauen?

Zweitens, auch wenn der Adapter richtig konfiguriert wurde, das ist falsch:

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

Sie müssen nicht die Befehle aus dem Befehl Builder erhalten und weisen Sie auf die Eigenschaften des Datenadapters. Der einzige Grund dafür ist, wenn Sie sie bearbeiten möchten, was Sie nicht tun. Die richtige Methode zum Erstellen eines Befehlsgenerators ist in der Zeile unmittelbar nach dem Erstellen des Datenadapters, z.

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

Das ist es. Sie erstellen es einmal und nur einmal und dann funktioniert der Datenadapter nur, wenn Sie Update aufrufen. Es gibt kein neues erstellen jedes Mal, wenn Sie speichern und es gibt keine Befehle erhalten und zuweisen.

+0

Danke. Ich habe das Problem bereits gelöst. Aber danke für deine Lösung. Entschuldigung für meine Kappen, es ist beschädigt. –