/** Fonde due hashtable aggiungendo alla prima * le chiavi della seconda che non son già presenti */ public void merge(ConvertibleHashtable h) { foreach (var k in h.Keys) { if (!this.ContainsKey(k)) { this.Add(k, h[k]); } } }
/** Aggiorna i dati contenuti nell'hashtable sostituendoli * con i dati dell'hashtable passata per parametro */ public void update(ConvertibleHashtable h) { foreach (var key in h.Keys) { if (this.ContainsKey(key)) { this[key] = h[key]; } } }
/// Inserisce un valore dentro una tabella (campi espliciti) public int insertData(String tableName, ConvertibleHashtable data) { // interrogo il db per ottenere informazioni sulla tabella ConvertibleHashtable[] h = _executeQuery("pragma table_info(`" + tableName + "`);"); List <String> keys = new List <String>(); List <String> invalidKeys = new List <String>(); // aggiungo i nomi delle colonne alle chiavi foreach (ConvertibleHashtable x in h) { keys.Add(x["name"].ToString()); } // aggiungo le chiavi invalide a una lista foreach (var k in data.Keys) { if (!(keys.Contains(k.ToString()))) { invalidKeys.Add(k.ToString()); } } // rimuovo i campi invalidi e l'id che viene autogenerato foreach (String k in invalidKeys) { data.Remove(k); } data.Remove("id"); String sql = "INSERT INTO `" + tableName + "` ("; foreach (var d in data.Keys) { sql += "`" + d.ToString() + "`, "; } sql += "`id`) VALUES ("; foreach (var d in data.Keys) { sql += "'" + data[d.ToString()] + "', "; } sql += "NULL);"; lock (_lock) { _executeQuery(sql); return(int.Parse(_executeQuery("SELECT last_insert_rowid() FROM `" + tableName + "`;")[0]["last_insert_rowid()"].ToString())); } }
/// Converte i risultati di una query in un array di ConvertibleHashtable private ConvertibleHashtable[] _parseTable(DataTable table) { ConvertibleHashtable[] outputTable; if (table.Rows.Count > 0) { outputTable = new ConvertibleHashtable[table.Rows.Count]; foreach (DataRow row in table.Rows) { outputTable [table.Rows.IndexOf(row)] = new ConvertibleHashtable(); foreach (DataColumn column in table.Columns) { outputTable [table.Rows.IndexOf(row)].Add(column.ColumnName, row[column.ColumnName]); } } } else { outputTable = new ConvertibleHashtable[] { new ConvertibleHashtable() } }; return(outputTable); }