using System; using System.Data; using System.Data.OleDb; namespace ExercicioADOnet { /// /// Summary description for DAL. /// public class DAL { //private const string PATH_BD = @"c:\data\Sales.mdb"; private const string CONN_STR = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..\..\contas.mdb;User ID=;Password="; public DAL(){} private OleDbConnection OpenConnection() { OleDbConnection conn = new OleDbConnection(CONN_STR); conn.Open(); return conn; } public DataSet GetContas() { OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM contas", CONN_STR); DataSet ds = new DataSet(); da.Fill(ds, "contas"); return ds; } public decimal GetSaldo(string conta){return 0;} public DataSet GetMovimentos(string conta){return null;} public DataSet GetMovimentos(int conta) { OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM movimentos WHERE conta=" + conta.ToString(), CONN_STR); DataSet ds = new DataSet(); da.Fill(ds, "movimentos"); return ds; } public decimal AddMovimento(string conta, DateTime dt, decimal montante) { return 0; } public decimal AddMovimento(int conta, DateTime dt, decimal montante) { OleDbConnection cnx = OpenConnection(); OleDbTransaction tx=cnx.BeginTransaction(); // inicia a transacção; decimal s; try { // Adicionar um movimento OleDbCommand cmd = new OleDbCommand("INSERT INTO movimentos (data, montante, conta) VALUES(?,?,?)", cnx); cmd.Transaction = tx; OleDbParameter p = cmd.Parameters.Add("data", OleDbType.Date); p.Value = dt; cmd.Parameters.Add("mont", montante); cmd.Parameters.Add("conta", conta); cmd.ExecuteNonQuery(); // não retorna registos // Actualizar o saldo OleDbCommand cmd2 = new OleDbCommand("UPDATE contas SET saldo=saldo+? WHERE id=?", cnx); cmd2.Transaction = tx; cmd2.Parameters.Add("mont", montante); cmd2.Parameters.Add("conta", conta); cmd2.ExecuteNonQuery(); // não retorna registos // obter o saldo OleDbCommand cmd3 = new OleDbCommand("SELECT saldo FROM contas WHERE id=?", cnx); cmd3.Transaction = tx; cmd3.Parameters.Add("conta", conta); s = (decimal)cmd3.ExecuteScalar(); // retorna apenas a 1ª coluna tx.Commit(); // faz o commit } catch(OleDbException ex) { // tratar a excepção!!!! if (tx != null) tx.Rollback(); return -1; } finally { // fechar a conexão cnx.Close(); } return s; } } }