예제 #1
0
        //elimina un conto e tutte le sue operazioni (per esercizio, in modalità disconnessa)
        public static void EliminaConto(Conto c)
        {
            using (SqlConnection conn = new SqlConnection(_connectionString))
                using (SqlDataAdapter da = new SqlDataAdapter("Select * from Conti", conn))
                {
                    DataSet ds = new DataSet();

                    da.Fill(ds, "Conti"); //fill e update devono avere gli stessi parametri

                    DataTable tableConti = ds.Tables["Conti"];

                    //2 metodi per eliminare una colonna, con find il record e cancellalo
                    tableConti.PrimaryKey = new DataColumn[] { tableConti.Columns["IdConto"] }; //devo dirgli che idConto è la chiave primaria!
                                                                                                //vuole un array di colonne in cui gli specifico di quale tabella
                                                                                                //quale colonna deve essere la chiave primaria
                    tableConti.Rows.Find(c.IdConto).Delete();                                   //cerca quella riga che ha come chiave primaria idConto e cancellala

                    //oppure con un ciclo in cui individuo la singola colonna con l'id che chiedo e poi la cancello
                    foreach (DataRow row in ds.Tables["Conti"].Rows)
                    {
                        if ((int)row["IdConto"] == c.IdConto)
                        {
                            row.Delete();
                            break;
                        }
                    }

                    new SqlCommandBuilder(da); //crea i comandi per l'update del db

                    da.Update(ds, "Conti");
                }
        }
예제 #2
0
        //questo metodo lo faccio dicendogli di recuperare una stored procedure opportunamente realizzata di là
        public static Conto RecuperaConto(int idConto, bool conOperazioni = false) //NON MI dara' PERO' LE OPERAZIONI RELATIVE AL CONTO, aggiungo booleano operazioni che se le voglio metto true, altrimenti solo conto
        {
            using (SqlConnection conn = new SqlConnection(_connectionString))
                using (SqlCommand cmd = new SqlCommand("RecuperaConto", conn))
                {
                    cmd.CommandType = System.Data.CommandType.StoredProcedure;
                    cmd.Parameters.AddWithValue("@idConto", idConto);

                    conn.Open();
                    SqlDataReader reader = cmd.ExecuteReader();

                    if (!reader.Read()) //se il reader non trova il conto ritorna nullo (read vuole booleano), uso if e non while perchè ho un solo conto
                    {
                        return(null);
                    }

                    //altrimenti creo un conto a cui associo i valori letti dal reader e lo ritorno
                    Conto c = new Conto((int)reader["IdConto"], reader["Intestatario"].ToString());

                    if (conOperazioni) //se metto true a conOperazioni, il compilatore passerà di qua
                    {
                        RecuperaOperazioni(c);
                    }

                    return(c);
                }
        }
예제 #3
0
        static public void VersaSulConto(Conto conto, DateTime dataOperazione, decimal importo, string causale)
        {
            using (SqlConnection conn = new SqlConnection(_connectionString))
                using (SqlCommand cmd = new SqlCommand("Insert into Operazioni (DataOperazione, Causale, Importo, IdConto) values (@dataOperazione, @causale, @importo, @idConto); Select @@identity", conn))
                {
                    cmd.Parameters.AddWithValue("@dataOperazione", dataOperazione);
                    cmd.Parameters.AddWithValue("@causale", causale);
                    cmd.Parameters.AddWithValue("@importo", importo);
                    cmd.Parameters.AddWithValue("@idConto", conto.IdConto); //recupero l'id da conto!

                    conn.Open();
                    int id = (int)(decimal)cmd.ExecuteScalar();

                    Operazione op = new Operazione(id, dataOperazione, causale, importo);

                    conto.Operazioni.Add(op);
                }
        }
예제 #4
0
        public static void RecuperaOperazioni(Conto conto) //recupera le operazioni del conto e le aggiunge alla sua lista
        {
            using (SqlConnection conn = new SqlConnection(_connectionString))
                using (SqlCommand cmd = new SqlCommand("Select * from Operazioni where IdConto=@idConto", conn))
                {
                    cmd.Parameters.AddWithValue("@idConto", conto.IdConto);

                    conn.Open();
                    SqlDataReader reader = cmd.ExecuteReader();

                    while (reader.Read()) //per ogni riga letta dal reader, recupero tutte le info e le aggiungo alla lista delle operazioni del conto
                    {
                        conto.Operazioni.Add(
                            new Operazione((int)reader["idOperazione"],
                                           (DateTime)reader["DataOperazione"],
                                           reader["Causale"].ToString(),
                                           (decimal)reader["Importo"]));
                    }
                }
        }
예제 #5
0
 static public void PrelevaDalConto(Conto conto, DateTime dataOperazione, decimal importo, string causale)
 {
     VersaSulConto(conto, dataOperazione, -importo, causale);
 }