Il nostro scopo è scrivere una semplice classe in C# che permetta di gestire l’inserimento e la lettura dei dati dal database. La caratteristica saliente che ci interessa in questo caso è l’accesso ai dati, in fase di lettura, tramite una List<ListDictionary>
, che consente di trattare i risultati come una lista di dizionari.
La classe che vogliamo creare permetterà un utilizzo simile a questo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
using (MySQLdb mysql = new MySQLdb(@"server=localhost;userid=root;password=;database=esempio")) { mysql.setQuery("INSERT INTO studenti(nome,cognome) VALUES(@nome,@cognome)") .addParameter("@nome","Gianpiero") .addParameter("@cognome","Franchi").In(); List<ListDictionary> studenti = mysql.setQuery("SELECT * FROM studenti WHERE nome = @nome OR 1") .addParameter("@nome","Mario").Out(); foreach(ListDictionary s in studenti) { Console.WriteLine(s["nome"]); } } |
La classe sarà formata invece nel modo seguente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
namespace DatabaseMySQL { public class MySQLdb : IDisposable { private bool isDisposed = false; private string connectionString { get; set; } private MySqlConnection connection; private MySqlCommand command; public MySQLdb(string connectionString) { this.connectionString = connectionString; this.connect(); } ~MySQLdb() { Dispose(false); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected void Dispose(bool disposing) { if(!isDisposed && disposing) { if(this.command != null) this.command.Dispose(); if (this.connection != null) this.connection.Close(); } isDisposed = true; } private void connect() { this.connection = new MySqlConnection(this.connectionString); this.connection.Open(); } public MySQLdb setQuery(string query) { this.command = new MySqlCommand(query, this.connection); return this; } public MySQLdb addParameter(string name, string value) { if (this.command != null) { this.command.Parameters.AddWithValue(name, value); } return this; } public List<ListDictionary> Out() { List<ListDictionary> risultato = new List<ListDictionary>(); if (this.command != null) { this.command.Prepare(); using (MySqlDataReader reader = this.command.ExecuteReader()) { while (reader.Read()) { ListDictionary dict = new ListDictionary(); for (int col = 0; col < reader.FieldCount; col++) { dict.Add(reader.GetName(col), reader.GetValue(col).ToString()); } risultato.Add(dict); } } this.command.Dispose(); } return risultato; } public long In() { if (this.command != null) { this.command.Prepare(); this.command.ExecuteNonQuery(); long lastId = this.command.LastInsertedId; this.command.Dispose(); return lastId; } return -1; } } } |