using System;
using System.Data;
using System.Data.OleDb;
namespace ExercicioADOnet
{
///
/// Summary description for DAL.
///
public class DAL
{
...
#region Typed DataSet
public BDContas GetConta(int conta)
{
BDContas ds = new BDContas();
OleDbConnection cnx = OpenConnection();
//esta não é a maneira mais eficiente de ir buscar os dados já que vai necessitar de efectuar 2 SELECT
//adicionalmente deveria limitar o numero de movimentos que traz
OleDbDataAdapter da1 = new OleDbDataAdapter("SELECT * FROM contas WHERE id=" + conta.ToString(), cnx);
OleDbDataAdapter da2 = new OleDbDataAdapter("SELECT * FROM movimentos WHERE conta=" + conta.ToString(), cnx);
da1.Fill(ds, "contas");
da2.Fill(ds, "movimentos");
cnx.Close();
return ds;
}
public BDContas GetConta(string numeroConta)
{
BDContas ds = new BDContas();
OleDbConnection cnx = OpenConnection();
//esta não é a maneira mais eficiente de ir buscar os dados já que vai necessitar de efectuar 3 SELECT
//adicionalmente deveria limitar o numero de movimentos que traz
OleDbDataAdapter da1 = new OleDbDataAdapter("SELECT * FROM contas WHERE numero='" + numeroConta + "'", cnx);
OleDbDataAdapter da2 = new OleDbDataAdapter("SELECT * FROM movimentos WHERE conta=(SELECT id FROM contas WHERE numero = '" + numeroConta + "')", cnx);
da1.Fill(ds, "contas");
da2.Fill(ds, "movimentos");
cnx.Close();
return ds;
}
///
///
///
///
public void UpdateConta(BDContas dsConta)
{
//
//apenas vai considerar os novos movimentos e a actualização do saldo é calculada
//
//obter linhas adicionadas
DataSet ds = dsConta.GetChanges(DataRowState.Added);
if (ds == null)
return;
//calcular diferencial do saldo
decimal s = 0;
foreach (BDContas.movimentosRow r in ds.Tables["movimentos"].Rows)
s += r.montante;
//abrir conexão e iniciar transacção
OleDbConnection cnx = OpenConnection();
OleDbTransaction tx = cnx.BeginTransaction();
//construir DataAdpter e definir comandos SQL auxiliares vi OleDbCommandBuilder
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM movimentos", cnx);
da.SelectCommand.Transaction = tx;
OleDbCommandBuilder cb = new OleDbCommandBuilder(da);
// actualziar tabela de movimentos
da.Update(ds, "movimentos");
//actualizar saldo da conta
OleDbCommand cmd2 = new OleDbCommand("UPDATE contas SET saldo=saldo+? WHERE id=?", cnx);
cmd2.Transaction = tx;
cmd2.Parameters.Add("mont", s);
cmd2.Parameters.Add("conta", dsConta.contas[0].ID);
cmd2.ExecuteNonQuery();
//terminar transacção e fechar conexão
tx.Commit();
cnx.Close();
}
#endregion
...
}
}