2016-07-07 2 views
-1

私はvb.NETとデータベースAS DATABASE1.SDFを使用してデータベースアップデータを作成しています。私はDATAGridviewのDATABASEを動的に更新したいと思います。私はSQLCECOMMANDBUILDERを使用していますが、私は "DataAdapter.SelectCommandプロパティを初期化する必要があります"というエラーが出ています。 ここをクリックしてください自分のコードは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

すべての大文字で書くことを控えてください - まず、読むのは面倒で難しいですし、2番目にはあなたの聴衆に叫ぶ**と思っています。 –

答えて

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に電話するとデータアダプタが機能します。保存するたびに新しいものを作成せず、コマンドを取得したり割り当てたりすることもありません。

+0

Thanx。私はこの問題を解決しました。しかし、あなたの解決策はありがたいことです。私の帽子に申し訳ありません、それは壊れています。 –

関連する問題