Newsgroup: it.comp.lang.visual-basic
Titolo: Come gestire il semaforo?

Salve a tutti, sto sperimentando per la prima volta la gestione di un DB 
mySQL da interfaccia creata con 
VB.NET
. Passando da Access il colpo è stato 
durissimo, ma alla fine i problemi che pensavo di avere con la connessione 
al DB, si sono rivelati invece con 
VB.NET
 stesso! Essendo rimasto inchiodato 
a VBA per molti anni, mi sono scontrato con innumerevoli potenzialità e 
funzioni che per ora mi stanno bloccando con i test. Insomma ho tutto da 
imparare, però lavorare su di un DB in questo modo è davvero tutto un altro 
mondo!
Piano piano sto risolvendo ogni problema che mi si para davanti, l'ultimo 
era la lettura di un valore di un DataGridView, mamma mia quello che ho 
dovuto fare! ^_^
Ora però ho un errore sulla "gestione dei semafori", cosa che proprio non ho 
capito cosa sia. Vi scrivo di seguito il testo delle routine interessate, 
calcolate che la maschera è costituita da una semplice datagridview con dei 
pulsanti che fanno diverse operazioni, tra cui la "Aggiorna" e la "Elimina" 
che una volta eseguite, se poi si chiude la maschera si provoca l'errore.
Public Class Form1
    Dim ds As DataSet
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles MyBase.Load
        Dim i As Integer
        Dim mysqlconn As MySql.Data.MySqlClient.MySqlConnection
        Dim da As MySql.Data.MySqlClient.MySqlDataAdapter
        ds = New DataSet()
        mysqlconn = New MySql.Data.MySqlClient.MySqlConnection()
        mysqlconn.ConnectionString = "Database=test;Data 
Source=localhost;User ID=root;Password="
        mysqlconn.Open()
        da = New MySql.Data.MySqlClient.MySqlDataAdapter
        da.SelectCommand = New MySql.Data.MySqlClient.MySqlCommand("SELECT * 
FROM Anagrafica ORDER BY Cognome, Nome;", mysqlconn)
        da.Fill(ds, "Anagrafica")     'msgbox(da.Fill(ds, "Anagrafica")) fa 
vedere quante righe tira fuori la select.
        'MsgBox(ds.Tables("Anagrafica").Columns.Count)      fa vedere quante 
colonne ha la tabella
        'MsgBox(ds.Tables("Anagrafica").Rows.Count)         fa vedere quante 
righe ha la tabella
        DataGrid2.DataSource = ds.Tables("Anagrafica")
        For i = 0 To ds.Tables("Anagrafica").Columns.Count - 1
            DataGrid2.Columns(i).AutoSizeMode = 
DataGridViewAutoSizeColumnMode.Fill
        Next
        mysqlconn.Close()
    End Sub
    Private Sub Aggiorna_Click(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles Aggiorna.Click
        Dim i As Integer
        Dim Cognome As String
        Dim Nome As String
        Dim ID As Integer
        Dim strSQL As String
        Dim dataN As String
        Dim mysqlconn As MySql.Data.MySqlClient.MySqlConnection
        Dim da As MySql.Data.MySqlClient.MySqlDataAdapter
        Dim comm As MySql.Data.MySqlClient.MySqlCommand
        mysqlconn = New MySql.Data.MySqlClient.MySqlConnection()
        mysqlconn.ConnectionString = "Database=test;Data 
Source=localhost;User ID=root;Password="
        mysqlconn.Open()
        For i = 0 To ds.Tables("Anagrafica").Rows.Count - 1
            da = New MySql.Data.MySqlClient.MySqlDataAdapter
            ID = ds.Tables("Anagrafica").Rows(i)("ID")
            Cognome = ds.Tables("Anagrafica").Rows(i)("Cognome")
            Nome = ds.Tables("Anagrafica").Rows(i)("Nome")
            dataN = CStr(Format(ds.Tables("Anagrafica").Rows(i)("Nascita"), 
"yyyy")) & "-" & CStr(Format(ds.Tables("Anagrafica").Rows(i)("Nascita"), 
"MM")) & "-" & CStr(Format(ds.Tables("Anagrafica").Rows(i)("Nascita"), 
"dd"))
            strSQL = "UPDATE Anagrafica SET Cognome = '" & Cognome & "', 
Nome = '" & Nome & "', Nascita = '" & dataN & "' WHERE ID = " & ID & ";"
            comm = New MySql.Data.MySqlClient.MySqlCommand(strSQL, 
mysqlconn)
            comm.ExecuteNonQuery()
        Next
        mysqlconn.Close()
        MsgBox("Elaborazione Terminata!")
    End Sub
    Private Sub Quit_Click(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles Quit.Click
        Me.Close()
    End Sub
    Private Sub Elimina_Click(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles Elimina.Click
        Dim i As Integer
        Dim ID As String
        Dim strSQL As String
        Dim mysqlconn As MySql.Data.MySqlClient.MySqlConnection
        Dim comm As MySql.Data.MySqlClient.MySqlCommand
        'MsgBox(Me.DataGrid2.GetCellCount(DataGridViewElementStates.Selected)) 
'indica quante celle sono selezionate
        'MsgBox(Me.DataGrid2.Rows.GetRowCount(DataGridViewElementStates.Selected)) 
'indica quante righe sono selezionate
        'MsgBox(Me.DataGrid2.SelectedRows(0).Index.ToString) 
'indica il numero della riga selezionata
        'MsgBox(Me.DataGrid2.SelectedRows(0).Cells("ID").Value) 
'indica il valore della cella "ID" sulla riga selezionata
        mysqlconn = New MySql.Data.MySqlClient.MySqlConnection()
        mysqlconn.ConnectionString = "Database=test;Data 
Source=localhost;User ID=root;Password="
        mysqlconn.Open()
        For i = 0 To 
Me.DataGrid2.Rows.GetRowCount(DataGridViewElementStates.Selected) - 1
            ID = Me.DataGrid2.SelectedRows(i).Cells("ID").Value
            strSQL = "DELETE FROM Anagrafica WHERE ID = " & ID & ";"
            comm = New MySql.Data.MySqlClient.MySqlCommand(strSQL, 
mysqlconn)
            comm.ExecuteNonQuery()
        Next
        mysqlconn.Close()
        MsgBox("Elaborazione Terminata!")
    End Sub
End Class
La segnalazione di errore durante la chiusura della maschera dopo aver 
aggiornato il relativo DB tramite le routine incriminate è: 
"SemaphoreFullException non è stata gestita. L'aggiunta del conteggio al 
semaforo provocherebbe il superamento del limite massimo."
Cosa significa?
Oltre a queste c'erano anche altre 2 routine, una di inserimento, simile 
alla Aggiorna ma con un INSERT INTO nella relativa Query, ed una di Refresh 
che non faceva altro che riempire nuovamente la DataGridView con i valori 
del DB dopo i vari aggiornamenti.
Grazie mille a chiunque possa aiutarmi.
Ciao, Ciao.


Prego!
Ciao, Vincenzo 

 Un esempio.... MsgBox va sostituita con MessageBox
Questo di sicuro, come dicevo purtroppo mi sono avvicinato solo ora a 
VB.NET
 
puro, fino ad oggi ho lavorato solo ed esclusivamente con VBA di Access, la 
mia più grande preoccupazione era cercare di comunicare con un DB di MySQL, 
cosa che invece mi è riuscita tutto sommato bene, quello che non pensavo 
invece era la difficoltà di far funzionare tutti i nuovi comandi di cui 
dispone 
VB.NET
. Solo per leggere il contenuto di una cella di un 
DataGridView ho impigeato giorni di prove su prove.
Grazie ancora.
Ciao, Ciao.