38 messaggi dal 04 marzo 2012
Devo aggiornare ed inserire dei record in varie tabelle di MySQL e fin qui tutto ok, ma ho alcuni dubbi su certe cose:
1) devo leggere un record dove trovo un numeratore, recuperare il numero e poi incrementarlo riesco a farlo in un solo colpo e memorizzare il valore in una variabile o devo prima fare una select e poi un update?
2) Nel contempo vorrei bloccare quel record mentre lo leggo e lo aggiorno in quanto non vorrei che altri recuperino lo stesso numeratore, come posso fare a bloccare il record provvisoriamente e poi sbloccarlo?
3) vorrei utilizzare anche la commit visto che devo aggiornare più di una tabella, come posso fare?

Ringrazio anticipatamente.
129 messaggi dal 09 febbraio 2017
Ciao,
premetto che sono stato recentemente su queste questioni e ci ho pestato parecchio la testa ...

1 ) Con una select scrivi il numeratore dentro esempio una text box, successivamente lo leggi e incrementi di uno, facendo l' update nel database e scrivendo il valore aggiornato al interno di un altra text box.

Guarda come ho fatto , ovviamente ci sono altri metodi, ma questo mi è venuto a logica , sembra la via più facile.

    Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        '----------------------------------------------------------------------------------------------------------------
        ' Bottone incrementa contatore - T E S T 
        Dim con2 As SqlConnection
        Dim cmd2 As SqlCommand
        con2 = New SqlConnection("***")
        con2.Open()
        ' Query per la gestione del incremento - contatore
        'cmd2 = New SqlCommand("UPDATE NumeroOrdine1", con2)
        ' Query per la stampa della tabella 
        cmd2 = New SqlCommand("SELECT NumeroOrdine FROM NumeroOrdine1", con2)
        Dim dr As SqlDataReader
        dr = cmd2.ExecuteReader()
        dr.Read()
        TextBox1.Text = dr(0).ToString
        con2.Close()
        TextBox2.Text = ((TextBox1.Text) + 1)
        ' ----------------------------------------------------------------------------------------------------------------
    End Sub


    Protected Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Dim con3 As SqlConnection
        Dim cmd3 As SqlCommand
        con3 = New SqlConnection("***")
        con3.Open()
        cmd3 = New SqlCommand("UPDATE NumeroOrdine1 SET NumeroOrdine=" + TextBox2.Text + "WHERE NumeroOrdine='" + TextBox1.Text + "'", con3)
        cmd3.ExecuteNonQuery()
        con3.Close()
        ' ----------------------------------------------------------------------------------------------------------------
        Dim con4 As SqlConnection
        Dim cmd4 As SqlCommand
        con4 = New SqlConnection("***")
        con4.Open()
        cmd4 = New SqlCommand("SELECT NumeroOrdine FROM NumeroOrdine1", con4)
        Dim dr As SqlDataReader
        dr = cmd4.ExecuteReader()
        dr.Read()
        TextBox3.Text = dr(0).ToString
        con4.Close()
    End Sub



2 ) Questa è la questione più complessa, si tratta di accesso concorrente e tutte queste storie .
La soluzione potrebbe essere , ti faccio sempre l' esempio mio, sito di e commerce, devo assegnare il numnero ordine, lo assegno subito appena inizia l' ordine, poi se non lo conclude, l' utente dopo tanto prende un altro numero , o se non lo paga comunque nel db ci sarù una colonna Status.
Dunque cerca di assegnare subito e fare subito l' update al utente , senza pensare a bloccare ecc, fai subito i passaggi, poi pensa bene a come ragionare / strutturare il database.

3 ) Non ho usato commit

Comunque ti ripeto, pensaci bene che sono questioni complesse , ci arriverai con un po di ragionamento.

Spero di esserti stato utile.

Emanuel Pirovano
Web Developer

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.