Shop Notas de implementação [Exercício da Disciplina de ADAV] http://www.dei.isep.ipp.pt/~jtavares/adav/downloads/adav_proj_rreferencia.pdf
Base de Dados - Sales 1
Componente Componente Class Library Entidades de negócio Customer Product Sale Classes implementadas Customer.cs Product.cs Sale.cs Factory.cs UtilDB.cs User.cs ShopSatatusEnum.cs 2
Utilização do componente Acrescentar referência ao Componente no projecto (Windows Form, Web Site ou Consola para testes) 3
Interfaces e Classes Códigos de Status Retorno de alguns métodos // // Definição dos códigos de status que poderão ser retornados public enum ShopStatusEnum OK = 1, NOT_OK = 0, INVALID_LOGIN = -1, INVALID_KEY = -2, INVALID_CUSTOMER_ID = -3, INVALID_PRODUCT_ID = -4, INSUFICIENT_STOCK = -5, ERROR = -6 User public interface IUser ShopStatusEnum Validate(string user, string pass); 4
Interfaces e Classes 5
Interfaces e Classes Customer public interface ICustomer // devolve os dados do cliente com um dado id DataSet GetByID(string user, string pass, long clientid); // devolve os dados de todos os clientes cujo nome obedeça ao padrão de pesquisa DataSet FindByName( string user, string pass, string namepattern); // Adiciona um novo cliente e retorna o respectivo ID gerado automaticamente na BD long Add( string user, string pass, string name, string address,string phone, string fax, string email, out ShopStatusEnum status); // actualiza os dados do cliente identificado pelo id ShopStatusEnum Update( string user, string pass, long custumerid, string name, string address, string phone, string fax, string email); 6
UtilDB Código comum: usado pelas outras classes para acesso à base de dados 7
Cliente do componente 1 - ) Usar Classe Customer do componente //Instanciar classe Customer ShopClassLibrary.ICustomer customer= new ShopClassLibrary.Customer(); // chamada ao método GetByID da classe Customer.cs DataSet ds = customer.getbyid(user, pass, idcustomer); // método devolve null se não encontrar If ( ds!=null ) 8
2 - ) Usar Classe Customer do componente através da classe Factory ICustomer customer= Factory.CreateCustomerService(); public class factory public static ICustomer CreateCustomerService() return new Customer(); dd public static ISale CreateSaleService() return new Sale(); public static ISale2 CreateSale2Service() return new Sale(); 9
DAL - Classe Customer.cs public DataSet GetByID(string user, string pass, long clientid) OleDbConnection conn = null; DataSet ds = null; try // criar objecto de conexão à base de dados e abrir a conexão conn = new OleDbConnection(UtilDB.CONN); conn.open(); // validar utilizador ShopStatusEnum status = UtilDB.ValidateUser(conn, null, user, pass); if (status!= ShopStatusEnum.OK) return null; // efectuar pesquisa ds = UtilDB.GetByID(conn, null, "Customers", "CustomerID", clientid); 10
Classe Customer.cs - GetByID (cont.) catch(oledbexception ex) // tratar a excepção!!!! System.Console.WriteLine("EXCEPÇÃO no método <GetByID> da classe 'Customer': " + ex.message); finally // fechar a conexão if (conn.state == ConnectionState.Open) conn.close(); return ds; 11
Classe UtilDB.cs - GetByID static public DataSet GetByID(string table, string keyname, long key) DataSet ds = null; try // criar objecto DataSet ds = new DataSet(); // criar um Datadapter para executar o comando e devolver o dataset string ssqlcmd = "Select * From "+ table + " Where + keyname + " = "+ key.tostring(); OleDbDataAdapter oadapter = new OleDbDataAdapter(sSqlCmd, conn); oadapter.selectcommand.transaction = tx; // executar o comando e preencher um Dataset oadapter.fill(ds, table); catch(oledbexception ex) // tratar a excepção!!!! System.Console.WriteLine("EXCEPÇÃO no método 'UtilDB.GetByID': " + ex.message); ds = null; return ds; 12
UtilDB Código genérico para pesquisa por Chave /// <summary> /// Obtem um dataset resultante de uma pesquisa por chave /// </summary> /// <param name="table">tabela a pesquisar</param> /// <param name="field">campo chave a usar</param> /// <param name="key">valor da chave a pesquisar</param> /// <returns>um dataset do tipo pedido</returns> static public DataSet GetByID(string table, string keyname, long key) 13
Inserir novo cliente Validar dados de entrada Criar objecto de conexão à base de dados Validar utilizador Criar comando SQL com parâmetros Definir parâmetros Executar comando Verificar resultado Determinar ID gerado para o novo registo Devolver novo ID 14
Inserir novo cliente public long Add(string user,string pass, string name,,out ShopStatusEnum status) long customerid = -1; OleDbConnection conn = null; // validar dados de entrada if (name == null name.trim().length == 0) status = ShopStatusEnum.INVALID_ARGUMENT; return -1; 15
Inserir novo cliente try // criar objecto de conexão à base de dados e abrir a conexão conn = new OleDbConnection(UtilDB.CONN); conn.open(); // validar o utilizador // status = UtilDB.ValidateUser(conn, null, user, pass); if (status!= ShopStatusEnum.OK) return -1; 16
Inserir novo cliente // criar comando SQL a executar // string sqlcmd = "INSERT INTO Customers (Name, Address, PhoneNb, FaxNb, EMail) Values (?,?,?,?,?)"; OleDbCommand cmd = new OleDbCommand(sqlCmd,conn); // definir parâmetros cmd.parameters.addwithvalue("name", name); if (address.length == 0) cmd.parameters.addwithvalue("address", DBNull.Value); else cmd.parameters.addwithvalue("address", address); 17
Inserir novo cliente // // executar o comando // int insrows = cmd.executenonquery(); // // verificar o resultado // if (insrows == 0) // não inseriu registo status = ShopStatusEnum.NOT_OK; else 18
Inserir novo cliente else // // inseriu registo // obter novo código de id gerado pela BD OleDbCommand idcmd = new OleDbCommand("SELECT @@IDENTITY", conn); customerid = (int)idcmd.executescalar(); status = ShopStatusEnum.OK; 19
Inserir novo cliente catch (OleDbException ex) // tratar a excepção!!!! System.Console.WriteLine("EXCEPÇÃO no método <AddCustomer> da classe 'Customer': " + ex.message); status = ShopStatusEnum.ERROR; finally // fechar a conexão if (conn!= null && conn.state== ConnectionState.Open) conn.close(); return customerid; //devolver ID 20
Classe Sale 21
public class User : IUser public ShopStatusEnum Validate(string user, string pass) return UtilDB.ValidateUser(user, pass); public interface IUser ShopStatusEnum Validate(string user, string pass); // validar Login IUser c = new User(); if (c.validate(txtusername.text, txtpassword.text) == ShopStatusEnum.OK) 22