VbNet - MySql 5.7 - Funzioni per gestione record

di il
4 risposte

VbNet - MySql 5.7 - Funzioni per gestione record

Salve a tutti.

Ho creato due funzioni.

Una funzione generica per l'inserimento, la modifica e la cancellazione dei record e un'altra per il recupero dei record.

La comodità è che non devo dichiarare ogni volta i vari oggetti, dataset, dataadapter, command, datatable etc.., connection etc…

Volevo farvele vedere e se per cortesia, mi date qualche consiglio per migliorarle, grazie.

la prima è per l'inserimento, modifca e cancellazione di record

ho scelto la formattazione c#…non ho trovato vbnet.

Public Function fCommandMySql(ByVal cnString As String, ByVal command As String, Optional ByVal NomeArchivio As String = "") As Integer
        Dim con As New MySqlConnection
        Dim result As Integer 
        If cnString <> "" Then
            con.ConnectionString = cnString
            Dim cmd As New MySqlCommand
            Try
                con.Open()
                With cmd
                    .CommandTimeout = 600000
                    .Connection = con
                    .CommandText = command
                    result = cmd.ExecuteNonQuery
                    If result > 0 And InStr(command.ToUpper, "INSERT") > 0 Then
                        result = cmd.LastInsertedId
                    End If
                End With
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
            con.Close()
            con.Dispose()
        End If
        
        Return result
    End Function

dei piccoli esempi:

per l'inserimento : fCommandMySql(StringadiConnessione,"Insert into Tabella set Campo1=Valorecampo1…","Archivio_Clienti")

per l'inserimento : fCommandMySql(StringadiConnessione,"INSERT INTO table_name (column1, ...) VALUES (value1, ...)","Archivio_Clienti")

per la modifica : fCommandMySql(StringadiConnessione,"Update  Tabella set Campo1=Valorecampo1 where Codice=123,"Archivio_Clienti")

per la cancellazione : fCommandMySql(StringadiConnessione,"DELETE FROM table_name WHERE condition","Archivio_Clienti")

nel caso di aggiunta (Insert) mi ritorna l'ultimo Id

ora vi faccio vedere quella per il recupero dei record 

Public Function fGetRecordMysql(ByVal ConnessioneStr As String, ByVal SqlString As String) As DataTable
        Try
            fGetRecordMysql = Nothing

            Dim conn As New MySqlConnection
            If Not conn Is Nothing Then conn.Close()
            conn.ConnectionString = ConnessioneStr
            conn.Open()

            Dim cmd As New MySqlCommand
            cmd.Connection = conn


            Dim adp As MySqlDataAdapter = New MySqlDataAdapter(SqlString, conn)
            adp.SelectCommand.CommandTimeout = 600000
            Dim dt As DataTable = New DataTable()
            adp.Fill(dt)

            conn.Close()
            conn.Dispose()



            cmd.Dispose()
            adp.Dispose()
		    
			return dt  
        
		Catch ex As Exception
            MsgBox("fGetRecordMysql" & " " & ex.Message)
            Return Nothing
        End Try
    End Function

…mi date qualche suggerimento ?

Grazie

4 Risposte

  • Re: VbNet - MySql 5.7 - Funzioni per gestione record

    Idea buona ma non funziona.

    Nel senso, per funzionare anche funziona, MA … 
    Se la devi usare per inserire diciamo 10 record, ok, MA se ne devi inserire 10000, i tempi sono dallte 10 alle 100 volte maggiori che non:
    1. aprire la connessione
    2. inserire/modificare TUTTI i record
    3. chiudere la connessione

    Oltre al fatto che l'approccio funziona fintanto che devi lavorare su un'unica tabella.
    MA se devi lavorare su due o piu' tabelle che devono rimanere sempre consistenti tra di loro, non fuziona piu.

    Quindi: idea buona ma con un'infinita' di limitazioni.
    Basta conoscerele e farne un uso circostanziato.

  • Re: VbNet - MySql 5.7 - Funzioni per gestione record

    Grazie per avermi risposto.

    In realtà se devi inserire più di un record, puoi dare il comando multiplo per l'inserimento di più record :

    INSERT INTO table_name (column_list)
    VALUES
        (value_list_1),
        (value_list_2),
        ...
        (value_list_n);
  • Re: VbNet - MySql 5.7 - Funzioni per gestione record

    Aggiungo che nel caso della SELECT non è detto che si desideri ottenere sempre un DataTable. Potrebbe essere preferibile un DataReader.

    Poi userei per i vari oggetti il costrutto Using…End Using.

  • Re: VbNet - MySql 5.7 - Funzioni per gestione record

    Si, vero. In realtà la funzione per il recupero dei record ritorna una struttura (qui invece ho postato la versione semplificata che ritorna solo il datatable) , dove al suo interno è dichiarato anche l'oggetto DataReader.

    quindi avrò :

    dim dtTmp as DataTable=fGetRecordMysql(….).dt

    dim drTmp as DataReader=fGetRecordMysql(….).dr

    Grazie per avermi risposto.

    Ciao

Devi accedere o registrarti per scrivere nel forum
4 risposte