il codice di sotto lo devi trattare come pseudo codice perchè è in basic e si riferisce ad Access
codice:
Option Strict On
Imports l = libreria.ModuloWeb
Partial Class prove_b
Inherits System.Web.UI.Page
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Connessione As OleDbConnection = Nothing
Dim Comando As OleDbCommand = Nothing
Dim Transazione As OleDbTransaction = Nothing
Dim Sql As String = ""
Try
Connessione = New OleDbConnection(StringaConnessioneTest)
Connessione.Open()
Transazione = Connessione.BeginTransaction()
Comando = New OleDbCommand
Comando.Connection = Connessione
Comando.Transaction = Transazione
Append(Comando)
'Transazione.Commit()
Transazione.Rollback()
l.MsgBox(Me, "Operazioni su database eseguite regolarmente")
Catch ex As Exception
If (Not (Transazione Is Nothing) AndAlso Not (Transazione.Connection Is Nothing)) Then Transazione.Rollback()
l.MsgBox(Me, ex)
Finally
If (Not (Connessione Is Nothing)) Then Connessione.Close()
End Try
End Sub
Private Sub Append(ByVal Comando As OleDbCommand)
'simulo la lettura di id da un TextBox
Dim id As String = "1"
'controllo se già esistente
Dim sql As String = "select count(*) from [campi] where [id] = ?"
Dim n As Integer = CInt(msole.RisultatoAggregazioneSQL(Comando, sql, msole.createParameterInteger("id", id)))
If n <> 0 Then
Throw New Exception("id già esistente")
End If
sql = "INSERT INTO [CAMPI] ([ID]) VALUES (?) "
Comando.CommandText = sql
Comando.Parameters.Clear()
Comando.Parameters.Add("id", OleDbType.Integer).Value = l.StringNullToDBNull(id)
Comando.ExecuteNonQuery()
End Sub
End Class
una versione di overload di RisultatoAggregazioneSQL è
codice:
Public Function RisultatoAggregazioneSQL(ByVal Comando As o.OleDbCommand, ByVal stringaSQL As String, ByVal ParamArray Parametri() As o.OleDbParameter) As Object
Try
Comando.CommandText = stringaSQL
Comando.Parameters.Clear()
For Each Parametro In Parametri
Comando.Parameters.Add(Parametro)
Next
RisultatoAggregazioneSQL = Comando.ExecuteScalar()
Catch er As Exception
Throw
Finally
End Try
End Function
in pratica
apro la connessione (una volta per più operazione perchè è abbastanza onerosa)
apro una transazione
faccio quello che voglio, tipicamente aggiornamenti su più tabelle
commit se non errore altrimenti Rollback
chiudo la connessione