· 10 years ago · Sep 05, 2016, 11:18 AM
1namespace KI_0._1
2{
3 public static class R
4 {
5 public static readonly string
6 ConnectStringBuilder = "Data Source={0}.s3db;",
7 CreateTableStringBuilder = "CREATE TABLE IF NOT EXISTS {0}({1});",
8 InsertIntoTableStringBuilder = "INSERT INTO {0}({1}) VALUES ({2});",
9 SelectDatasetStringBuilder = "SELECT {0} FROM {1}",
10 TablebaseName = "KiRon",
11 TablebaseRowName = "Name",
12 TablebaseRowPrams = "Prams"
13 ;
14 }
15
16 public enum TableParameterTyp
17 {
18 INTEGER, TEXT
19 }
20
21 public struct TableParameter
22 {
23 private string Name, Typ;
24 private bool Autoincrement;
25
26 public TableParameter(string name, TableParameterTyp typ = TableParameterTyp.TEXT, bool autoincrement = false)
27 {
28 Name = name;
29 Typ = helper.EnumController.getEnumStrgValue(typeof(TableParameterTyp), typ);
30 Autoincrement = autoincrement;
31 }
32
33 public string ParameterName
34 {
35 get { return Name; }
36 }
37 public string ParameterTyp
38 {
39 get { return Autoincrement ? string.Format("{0} PRIMARY KEY AUTOINCREMENT", Typ) : Typ; }
40 }
41 }
42
43 public class Database
44 {
45 private SQLiteConnection connect;
46
47 public void ConnectToDatabase(string DatabaseName = "KiRon")
48 {
49 string DBConStrg = string.Format(R.ConnectStringBuilder, DatabaseName);
50 connect = new SQLiteConnection() { ConnectionString = DBConStrg };
51 OpenDataBase();
52 }
53 public void OpenDataBase()
54 {
55 connect.Open();
56 }
57 public void CloseDataBase()
58 {
59 connect.Close();
60 }
61
62 public void CreateTable(string TableName, TableParameter[] prams)
63 {
64 Func<TableParameter[], string> getPramsQuery = (pramsLi) => string.Format("{0}", string.Join(",", pramsLi.Select(x => x.ParameterName)));
65
66 SQLiteCommand command = connect.CreateCommand();
67
68 string pramsStrg = string.Join(",", prams.Select(x => string.Format("{0} {1}", x.ParameterName, x.ParameterTyp)));
69 string query = string.Format("CREATE TABLE IF NOT EXISTS {0}({1});",TableName,pramsStrg);
70
71 if (!TableName.Equals(R.TablebaseName))
72 if(GetTableBaseNames(TableName).Length == 0)
73 InsertIntoDatabase(R.TablebaseName, new string[] { TableName, getPramsQuery(prams) });
74
75
76 command.CommandText = query;
77 command.ExecuteNonQuery();
78 command.Dispose();
79 }
80
81 public void InsertIntoDatabase(string TableName, string[] values)
82 {
83 string prams = TableName.Equals(R.TablebaseName)
84 ? string.Format("{0},{1}",R.TablebaseRowName,R.TablebaseRowPrams)
85 : GetTableBasePrams(TableName).Value.Replace(",ID","");
86
87 SQLiteCommand command = connect.CreateCommand();
88 command.CommandText = string.Format("INSERT INTO {0}({1}) VALUES ({2});", TableName, prams, string.Join(",", values.Select(x => string.Format("'{0}'",x))));
89 command.ExecuteNonQuery();
90 command.Dispose();
91 }
92
93 public Row[] GetDataset(string Table,string Args = null,string selection = "*")
94 {
95 if (selection.Equals("*"))
96 selection = GetTableBasePrams(Table).Value;
97
98 SQLiteCommand command = connect.CreateCommand();
99
100 string query = string.Format("SELECT {0} FROM {1}",selection,Table);
101
102 command.CommandText = Args == null
103 ? string.Concat(query,";")
104 : string.Concat(query, string.Format(" WHERE {0};", Args));
105
106 SQLiteDataReader reade = command.ExecuteReader();
107
108 int zeilen = reade.StepCount,
109 spalten = reade.FieldCount;
110
111 Row[] rows = new Row[zeilen].Select(x =>
112 {
113 reade.Read();
114 tableItem[] item = selection.Split(',').Select(i => new tableItem(i,reade[i].ToString())).ToArray();
115 return new Row(item);
116 }).ToArray();
117
118 return rows;
119 }
120
121 private tableItem GetTableBasePrams(string Table)
122 {
123 SQLiteCommand command = connect.CreateCommand();
124 command.CommandText = string.Format("SELECT {0} FROM {1} WHERE NAME = '{2}';", R.TablebaseRowPrams, R.TablebaseName, Table);
125 SQLiteDataReader reader = command.ExecuteReader();
126 reader.Read();
127 return new tableItem(R.TablebaseRowPrams, reader[0].ToString());
128 }
129
130 private tableItem[] GetTableBaseNames(string srcTable)
131 {
132 SQLiteCommand command = connect.CreateCommand();
133 command.CommandText = string.Format("SELECT {0} FROM {1} WHERE NAME = '{2}';", R.TablebaseRowName, R.TablebaseName, srcTable);
134 SQLiteDataReader reader = command.ExecuteReader();
135 return new tableItem[reader.StepCount].Select(x =>
136 {
137 reader.Read();
138 return new tableItem(R.TablebaseRowName, reader[R.TablebaseRowName].ToString());
139 }).ToArray();
140 }
141
142 public bool ExistsTable(string scrTable)
143 {
144 string query = string.Format("SELECT name FROM sqlite_master WHERE type='table' AND name='{0}';", scrTable);
145
146 SQLiteCommand command = connect.CreateCommand();
147 command.CommandText = query;
148
149 SQLiteDataReader reader = command.ExecuteReader();
150
151 return reader.StepCount == 0;
152 }
153
154
155 public int ValueCount(string tablename, string valueArg)
156 {
157
158 SQLiteCommand command = connect.CreateCommand();
159 command.CommandText = string.Format("SELECT COUNT(*) AS COUN FROM {0}{1}", tablename, string.IsNullOrEmpty(valueArg) ? ";" : string.Format(" WHERE {0};", valueArg));
160 SQLiteDataReader SDR = command.ExecuteReader();
161 SDR.Read();
162 command.Dispose();
163 return int.Parse(SDR["COUN"].ToString());
164 }
165
166 public struct tableItem
167 {
168 public string Itemname
169 {
170 get; private set;
171 }
172 public string Value
173 {
174 get; private set;
175 }
176
177 public tableItem(string itemname,string value)
178 {
179 Itemname = itemname;
180 Value = value;
181 }
182 }
183 public struct Row
184 {
185 public tableItem[] Items
186 {
187 get; private set;
188 }
189 public Row(tableItem[] items)
190 {
191 Items = items;
192 }
193 }
194 }
195
196
197 class KiController
198 {
199 //Contentanalyse
200
201 /* Ist es ein Text
202 * o. Mathematische Aufgabe
203 *
204 * Um wen geht es
205 * Was tut er
206 * Ist es gut oder böse
207 * Objectmapping
208 * -> Tür hat geschlossen zu sein
209 * _Tabelle: Tür=Zu
210 */
211
212 private Database DB;
213 public KiController(Database db)
214 {
215 DB = db;
216 }
217
218 private enum Satztyp
219 {
220 F,A,I //Frage,Aussage,Info
221 }
222
223 private struct SatzStatus
224 {
225 private Satztyp typ;
226
227 //public SatzStatus(Satztyp)
228
229 }
230
231 public void scanText(string input)
232 {
233 input.Split(' ').ToList().ForEach(x =>
234 {
235 MessageBox.Show(DB.ValueCount("Wörter", string.Format("Word = '{0}';", x)).ToString());
236 if (DB.ValueCount("Wörter", string.Format("Word = '{0}';", x)) == 0)
237 DB.InsertIntoDatabase("Wörter", new string[] { x, "", "" });
238 });
239
240 }
241
242
243
244
245
246 //Ausgabe generierung
247
248
249 }
250}