102 messaggi dal 04 settembre 2010
Buongiorno al forum,
stò sviluppando un programma di gestione dei database MYSQL, per attagliarlo alle mie esigenze.
Mi sono creato una classe dove gestisco l'intera gestione dei database con le Create Database, Table, StoredProcedure ecc, fin qui nessun problema, nella lettura dei dati nei datagridvew ho creato un datatable sempre nella classe che ho descritto vi posto il codice:
  Public Function MySqlDirectQuery(ByVal Testo As String) As DataTable
        Dim adapter As New MySqlDataAdapter
        Dim oTable As New DataTable

        If Not Flag Then
            Return Nothing
            Exit Function
        End If

        Try
            Testo = CheckOriginalString(Testo)
            myCommand.CommandType = CommandType.Text
            myCommand.CommandText = Testo
            adapter.SelectCommand = myCommand
            oTable.Clear()
            adapter.Fill(oTable)
            Return oTable

        Catch ex As MySqlException
            Throw
        Finally
            If Not adapter Is Nothing Then adapter.Dispose()
            If Not oTable Is Nothing Then oTable.Dispose()
        End Try
    End Function


Nei form lo richiamo con questo semplice codice:

 Dim colName As String = dtgTabella.Columns(e.ColumnIndex).Name
        Dim i As Integer = dtgTabella.CurrentRow.Index
 dt = cls.MySqlDirectQuery("SELECT * FROM " & ComboBox1.SelectedValue.ToString & "." & dtgTabella.Item(1, i).Value & "")
                dtgDati.AutoGenerateColumns = True
                dtgDati.DataSource = dt


Adesso mi sono arenato per quanto riguarda l'aggiornamento dei dati INSERT e UPDATE ho provato svariati codici per l'aggiornamento senza risultati l'ultimo codice che ho scritto è questo:

 Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
Dim da As New MySqlDataAdapter
' First process deletes.
        da.Update(dt.Select(Nothing, Nothing, DataViewRowState.Deleted))
        ' Next process updates.
        da.Update(dt.Select(Nothing, Nothing, DataViewRowState.ModifiedCurrent))
        ' Finally, process inserts.
        da.Update(dt.Select(Nothing, Nothing, DataViewRowState.Added))
 End Sub


Avrei bisogno di un aiutino, ringrazio anticipatamente
Modificato da Mau67 il 11 agosto 2021 13:33 -
Modificato da Mau67 il 11 agosto 2021 15:59 -
82 messaggi dal 19 ottobre 2005
dev.to
Mau67 ha scritto:
Buongiorno al forum,
stò sviluppando un programma di gestione dei database MYSQL, per attagliarlo alle mie esigenze.
Mi sono creato una classe dove gestisco l'intera gestione dei database con le Create Database, Table, StoredProcedure ecc, fin qui nessun problema, nella lettura dei dati nei datagridvew ho creato un datatable sempre nella classe che ho descritto vi posto il codice:
  Public Function MySqlDirectQuery(ByVal Testo As String) As DataTable
        Dim adapter As New MySqlDataAdapter
        Dim oTable As New DataTable

        If Not Flag Then
            Return Nothing    ' Questo è sufficiente, non c'è bisogno di Exit Function
            'Exit Function
        End If

        Try
            Testo = CheckOriginalString(Testo)
            myCommand.CommandType = CommandType.Text
            myCommand.CommandText = Testo
            adapter.SelectCommand = myCommand
            'oTable.Clear()     ' Questo non serve, oTable è appena stato creato ed è sicuramente vuoto.
            adapter.Fill(oTable)
            Return oTable

        Catch ex As MySqlException
            Throw
        Finally
            If Not adapter Is Nothing Then adapter.Dispose()
            If Not oTable Is Nothing Then oTable.Dispose()
        End Try
    End Function


Nei form lo richiamo con questo semplice codice:

 Dim colName As String = dtgTabella.Columns(e.ColumnIndex).Name
        Dim i As Integer = dtgTabella.CurrentRow.Index
 dt = cls.MySqlDirectQuery("SELECT * FROM " & ComboBox1.SelectedValue.ToString & "." & dtgTabella.Item(1, i).Value & "")
                dtgDati.AutoGenerateColumns = True
                dtgDati.DataSource = dt


Adesso mi sono arenato per quanto riguarda l'aggiornamento dei dati INSERT e UPDATE ho provato svariati codici per l'aggiornamento senza risultati l'ultimo codice che ho scritto è questo:

 Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
Dim da As New MySqlDataAdapter
' First process deletes.
        da.Update(dt.Select(Nothing, Nothing, DataViewRowState.Deleted))
        ' Next process updates.
        da.Update(dt.Select(Nothing, Nothing, DataViewRowState.ModifiedCurrent))
        ' Finally, process inserts.
        da.Update(dt.Select(Nothing, Nothing, DataViewRowState.Added))
 End Sub


Avrei bisogno di un aiutino, ringrazio anticipatamente
Modificato da Mau67 il 11 agosto 2021 13:33 -
Modificato da Mau67 il 11 agosto 2021 15:59 -


Ciao.
Ma al data adapter hai specificato i vari UpdateCommand, InsertCommand e DeleteCommand?
All'update è sufficiente poi passare il DataTable.

PS. Ti ho messo qualche appunto nel codice che hai postato.
102 messaggi dal 04 settembre 2010
Ciao,
No non ho inserito InsertCommand, UpdateCommand
Perché essendo gestione di database dovrei specificare i campi che chiaramente cambiano da database a database, a meno che non ci siano dei command dove non si debbano specificare.
A meno che non ci sia un modo per dichiararli.
Grazie
Modificato da Mau67 il 11 agosto 2021 21:41 -
82 messaggi dal 19 ottobre 2005
dev.to
Mau67 ha scritto:
Ciao,
No non ho inserito InsertCommand, UpdateCommand
Perché essendo gestione di database dovrei specificare i campi che chiaramente cambiano da database a database, a meno che non ci siano dei command dove non si debbano specificare.
Grazie


Ma se devi sviluppare un software di gestione di database dovresti pensare di lavorare con i metodi ExecuteXXX di ADO.NET. Avresti maggiore flessibilità ed una migliore performance.

Ad ogni modo io il DataAdapter l'ho usato poco ma mi pare di ricordare che è necessario che vengano specificati i vari xxxCommand. Nel tuo caso dovresti creare a run-time i vari command sulla base dello schema del database ed assegnarli ad DataAdapter.
102 messaggi dal 04 settembre 2010
Ok proverò perderò un po' di tempo spero di arrivare alla soluzione
Grazie
1.436 messaggi dal 27 dicembre 2005
santoni1981 ha scritto:
Mau67 ha scritto:
Ciao,
No non ho inserito InsertCommand, UpdateCommand
Perché essendo gestione di database dovrei specificare i campi che chiaramente cambiano da database a database, a meno che non ci siano dei command dove non si debbano specificare.
Grazie


Ma se devi sviluppare un software di gestione di database dovresti pensare di lavorare con i metodi ExecuteXXX di ADO.NET. Avresti maggiore flessibilità ed una migliore performance.

Ad ogni modo io il DataAdapter l'ho usato poco ma mi pare di ricordare che è necessario che vengano specificati i vari xxxCommand. Nel tuo caso dovresti creare a run-time i vari command sulla base dello schema del database ed assegnarli ad DataAdapter.



Esatto bisogna specificare le query di update, insert e delete.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.