using Microsoft.Data.Sqlite; using System.Globalization; using TimeTable.model; namespace TimeTable.controll { internal static class SqliteCommands { public static string select = "select uid, start, end, text, time from timetable"; private static CultureInfo ci = System.Globalization.CultureInfo.GetCultureInfo("de-de"); private static string insertPrefix = "insert into timetable ("; private static string insertIntermediate = ") values("; private static string insertPostfix = ");"; private static string updatePrefix = "update timetable set "; private static string updateIntermediate = " where uid = "; private static string updatePostfix = ";"; public static UidCommand InsertCmd(DateTime start) { string uid = Guid.NewGuid().ToString(); return BuildInsertCommand(uid, "uid, start", "'" + uid + "','" + start.ToString() + "'"); } private static UidCommand BuildInsertCommand(string uid, string fields, string values) { string command = insertPrefix + fields + insertIntermediate + values + insertPostfix; UidCommand uidCommand = new UidCommand(); uidCommand.uid = uid; uidCommand.command = command; return uidCommand; } private static string BuildUpdateCmd(string uid, string fieldValues) { return updatePrefix + fieldValues + updateIntermediate + uid + updatePostfix; } public static UidCommand InsertCmd(DateTime start, string text) { string uid = Guid.NewGuid().ToString(); return BuildInsertCommand(uid, "uid, start", uid + "," + start.ToString()); } public static string UpdateCmdCreator(string uid, string[] keys, string[] values) { if (keys.Length != values.Length) { throw new ArgumentException(); } string fieldValues = ""; for (int i = 0; i < keys.Length; i++) { fieldValues += "'" + keys[i] + "' = '" + values[i] + "',"; } fieldValues = fieldValues.TrimEnd(','); return BuildUpdateCmd(uid, fieldValues); } public static string UpdateCmd(string uid, DateTime start, DateTime end, string text) { string[] keys = new string[3]; keys[0] = "uid"; keys[1] = "start"; keys[2] = "end"; keys[3] = "text"; string[] values = new string[3]; values[0] = uid; values[1] = start.ToString(); values[2] = end.ToString(); values[3] = text; return UpdateCmdCreator(uid, keys, values); } public static string UpdateStartCmd(string uid, DateTime start) { string[] keys = new string[2]; keys[0] = "uid"; keys[1] = "start"; string[] values = new string[2]; values[0] = uid; values[1] = start.ToString(); return UpdateCmdCreator(uid, keys, values); } public static string UpdateEndCmd(string uid, DateTime end) { string[] keys = new string[2]; keys[0] = uid; keys[1] = "end"; string[] values = new string[2]; values[0] = uid; values[1] = end.ToString(); return UpdateCmdCreator(uid, keys, values); } public static string UpdateTextCmd(string uid, string text) { string[] keys = new string[2]; keys[0] = uid; keys[1] = "text"; string[] values = new string[2]; values[0] = uid; values[1] = text; return UpdateCmdCreator(uid, keys, values); } public static string UpdateStartTextCmd(string uid, DateTime start, string text) { string[] keys = new string[3]; keys[0] = "uid"; keys[1] = "start"; keys[2] = "text"; string[] values = new string[3]; values[0] = uid; values[1] = start.ToString(); values[2] = text; return UpdateCmdCreator(uid, keys, values); } public static string UpdateEndTextCmd(string uid, DateTime end, string text) { string[] keys = new string[3]; keys[0] = "uid"; keys[1] = "start"; keys[2] = "text"; string[] values = new string[3]; values[0] = uid; values[1] = end.ToString(); values[2] = text; return UpdateCmdCreator(uid, keys, values); } public static string UpdateTimeCmd(string uid, TimeSpan timespan) { string[] keys = new string[2]; keys[0] = uid; keys[1] = "time"; string[] values = new string[2]; values[0] = uid; values[1] = timespan.ToString(); return UpdateCmdCreator(uid, keys, values); } public static void CreateTableIfNotExists(string sqlConnection) { SqliteConnection con = new SqliteConnection(sqlConnection); con.Open(); SqliteCommand sqliteCmd = con.CreateCommand(); sqliteCmd.CommandText = @"SELECT name FROM sqlite_master WHERE type='table' AND name='timetable';"; var name = sqliteCmd.ExecuteScalar(); if (name != null && name.ToString() == "timetable") { return; } var cols = string.Join(" VARCHAR,", "uid, start, end, text, time"); cols = cols + " Varchar"; sqliteCmd.CommandText = "CREATE TABLE timetable (" + cols + ")"; con.Open(); sqliteCmd.ExecuteNonQuery(); con.Close(); } } }