Private _ds As DataSet = New DataSet
Private _da As OleDbDataAdapter = New OleDbDataAdapter
Private Sub populateGrid()
' Αλλαξε το ConnectionString. Στο παράδειγμα παίζω με SqlServer
Dim cn As OleDbConnection = New OleDbConnection("Provider=SQLOLEDB;Data Source=(local);Initial Catalog=GeorgeDB;User ID=sa;Password=;")
' Εχω κάνει select ένα παραπάνω πεδίο που φαντάζομαι οτι είναι το primary key του APOTR.
' Αυτό είναι αναγκαίο για να μπορέσει να βρεθεί το row που θα γίνει update.
Dim cmdSelect As OleDbCommand = New OleDbCommand("SELECT APO1.APO1ID, APO1.ADESCR, APOTR.SOMEVALUE, APOTR.APOTRID FROM APO1 INNER JOIN APOTR ON APO1.APO1ID = APOTR.APO1ID", cn)
' Θα προτιμούσα να ηταν sp αλλά για ευκολία στο διάβασμα τώρα εγινε command text
Dim cmdUpdate As OleDbCommand = New OleDbCommand("UPDATE APOTR SET APOTR.SOMEVALUE = ?, APOTR.APO1ID = ? WHERE APOTRID = ?", cn)
' Πρόσεξε εδώ την τελευταία παράμετρο μέσω της οποίας κάνεις Map τις παράμετρους με το πραγματικά Columns στη βάση
' έτσι ώστε ο DataAdapter να ξέρει ποιο column πάει σε ποια παράμετρο.
cmdUpdate.CommandType = CommandType.Text
cmdUpdate.Parameters.Add("@SomeValue", OleDbType.VarChar, 50, "SOMEVALUE")
cmdUpdate.Parameters.Add("@Apo1ID", OleDbType.Integer, 4, "APO1ID")
cmdUpdate.Parameters.Add("@ApoTrID", OleDbType.Integer, 4, "APOTRID")
' Γεμίζουμε SelectCommand + UpdateCommand. Inserts και Deletes δεν γίνονται.
' Αν θέλεις να κάνεις και Inserts/Deletes θα πρέπει να φτιάξεις commands και για
' αυτά και να τα αναθέσεις στο _da.InsertCommand και _da.DeleteCommand αντίστοιχα.
_da.SelectCommand = cmdSelect
_da.UpdateCommand = cmdUpdate
Try
_da.Fill(_ds, "GeorgeTable")
' GeorgeTable είναι το mapping name με το οποίο εμφανίζεται το
' table που γεμίζουμε στο DataSet
Catch ex As OleDbException
MessageBox.Show(ex.Message)
End Try
DataGrid1.SetDataBinding(_ds, "GeorgeTable")
' Θα μπορούσες να βάλεις .DataSource, .DataMember
' DataGrid1.DataSource = _ds
' DataGrid1.DataMember = "GeorgeTable"
End Sub
Private Sub saveDataSet()
Try
_da.Update(_ds, "GeorgeTable")
Catch ex As OleDbException
MessageBox.Show(ex.Message)
End Try
End Sub