/// <summary> /// Egy fordítási egység (egy forrás és egy cél szegmens) hozzáadása az adatbázishoz. /// Ha már létezik a forrás szegmens frissíti az adatbázist, egyébként hozzáad egy új egységet /// a units táblához. /// </summary> /// <param name="unit"></param> /// <returns></returns> public bool AddOrUpdateTranslationUnit(TranslationUnit unit) { string english = GetEnglishUnit(unit); using (SQLiteConnection conn = new SQLiteConnection(connectionString)) { SQLiteCommand command = conn.CreateCommand(); if (english != null) { // az egység már létezik update sql parancsot kell használni command.CommandText = "UPDATE units SET hungarian=@hungarian " + "WHERE english=@english"; //command.Parameters.Add("id", System.Data.DbType.Int32).Value = id; command.Parameters.Add("english", System.Data.DbType.String).Value = unit.Angol; command.Parameters.Add("hungarian", System.Data.DbType.String).Value = unit.Magyar; isSegmentUpdated = true; } else { // az egység még nincs az adatbázisban, insert sql parancs kell command.CommandText = "INSERT INTO units (english, hungarian) " + " VALUES (@english, @hungarian)"; command.Parameters.Add("english", System.Data.DbType.String).Value = unit.Angol; command.Parameters.Add("hungarian", System.Data.DbType.String).Value = unit.Magyar; isSegmentInserted = true; } conn.Open(); // a kapcsolat megnyitása // az ExecuteNonQuery() metódus végrehajtja a parancsot, olyan parancsok esetén // használjuk ahol nem várunk vissza eredményt (nem Select). A visszatérési értéke // a parancs által érintett sorok száma. Ha ez itt nem 1 akkor valami gond van, mivel // pont egyetlen egységet szeretnénk beszúrni/módosítani. if (command.ExecuteNonQuery() != 1) { return false; } } return true; }
internal string GetUnitEnglish(TranslationUnit unit) { return dao.GetEnglishUnit(unit); }
internal bool AddOrUpdateTranslationUnit(TranslationUnit unit) { return dao.AddOrUpdateTranslationUnit(unit); }
/// <summary> /// Az adatbázisban lévő fordítási egységek lekérése. /// </summary> /// <returns>fordítási egységek listája</returns> public IEnumerable<TranslationUnit> GetTranslationUnits() { // töröljük a memóriában lévõ értékeket translationUnits.Clear(); using (SQLiteConnection conn = new SQLiteConnection(connectionString)) { SQLiteCommand command = conn.CreateCommand(); conn.Open(); command.CommandText = "SELECT * FROM units ORDER BY english"; // ExecuteReader()-t használunk ha Select parancsot küldünk és a teljes // eredményre (táblázat) kíváncsiak vagyunk. Az eredmény mindig egy // valamilyen DataReader objektum. SQLiteDataReader reader = command.ExecuteReader(); while (reader.Read()) { TranslationUnit unit = new TranslationUnit(); //unit.ID = Convert.ToInt32(reader["id"]); unit.Angol = reader["english"].ToString(); unit.Magyar = reader["hungarian"].ToString(); translationUnits.Add(unit); } } return translationUnits; }
public string GetEnglishUnit(TranslationUnit unit) { string english = null; using (SQLiteConnection conn = new SQLiteConnection(connectionString)) { SQLiteCommand command = conn.CreateCommand(); command.CommandText = "SELECT english FROM units WHERE english=@english"; // Értéket adok a paraméternek. Ehhez elõbb lérehozok egy új paramétert // (Add) és megadom a nevét + SQL szerinti típusát. A név azonos az elõbb definiált // SQL parancsban írt névvel. Ezután a keletkezett (SQLite)Parameter objektum // Value property-nek értékül adhatjuk a paraméter értékét. command.Parameters.Add("english", System.Data.DbType.String).Value = unit.Angol; // Ellentétben Java-val a connection létrehozása nem jelent automatikus csatlakozást // az adatbázishoz. A tényleges mûveletvégzés elõtt meg kell nyitni a kapcsolatot. // Megj.: a végén le kéne zárni is, de ezt a 'using' blokk használata elintézi. conn.Open(); // A parancsot lefuttatom. Az ExecuteScalar() metódust akkor használhatjuk, // ha csak egyetlen eredményt várunk. Itt csak egyetlen 'id' mezõ értékét // kértem le. A metódus object-et ad vissza, amit type castolni kell a várt // eredménytípusra. Ha nincs eredmény akkor null értéket kapunk. object result = command.ExecuteScalar(); if (result != null) { english = result.ToString(); } } return english; }