Torna al Thread
using System;
using System.Data.OleDb;
using System.Transactions;
public class Prove
{
private bool InserisciFattura(DateTime date, int year, string description)
{
// variabili di lavoro
int? maxProgressivo = 1;
bool res = false;
// inizio la transazione e faccio in modo che ogni comando sia sotto di essa
using (TransactionScope transactionScope = new TransactionScope(TransactionScopeOption.Required))
{
// istanzio la connessione
using (OleDbConnection conn = new OleDbConnection(TuaConnectionString))
{
// apro la connessione
conn.Open();
// ricavo il valore del massimo progressivo
using (OleDbCommand cmd = new OleDbCommand("SELECT MAX(N_Fatt) AS MassimoProgressivo FROM Fatture WHERE fatt_year = @fatt_year", conn))
{
try
{
cmd.Parameters.AddWithValue("@fatt_year", year);
// se tutto va bene ricavo il progressivo
maxProgressivo = (int?)cmd.ExecuteScalar();
// se l'esecuzione non torna nulla metto 1, altrimenti incremento il massimo progressivo letto
if (maxProgressivo == null)
maxProgressivo = 1;
else
maxProgressivo++;
}
catch (Exception)
{
throw new Exception("Errore durante la lettura a database");
}
}
// a questo punto ho il progressivo, qualunque esso sia, passo all'inserimento
using (OleDbCommand cmd = new OleDbCommand("INSERT INTO Fatture (Fatt_date, Fatt_description, Fatt_number, Fatt_year) VALUES (@fatt_date, @fatt_description, @fatt_number, @fatt_year)", conn))
{
try
{
cmd.Parameters.AddWithValue("@fatt_date", date);
cmd.Parameters.AddWithValue("@fatt_description", description);
cmd.Parameters.AddWithValue("@fatt_number", maxProgressivo);
cmd.Parameters.AddWithValue("@fatt_year", year);
// inserisco
cmd.ExecuteNonQuery();
// segno che è andata tutto bene
res = true;
}
catch (Exception)
{
// segno che è andata male
res = false;
}
}
conn.Close();
}
transactionScope.Complete();
}
return res;
}
}