/*********************************************************************/ /// <summary> /// fügt neuen leeren Datensatz in die Datenbak ein und gibt diesen zurück /// </summary> /// <returns>leerer Datenbankeintrag</returns> public CTableEntry insertEntry() { // Return wert CTableEntry tableEntry = null; // Neuen Eintrag in die Datenbank eintragen string sSQLCommand = "INSERT INTO " + CTableConstants.TABLE_ATTRIBUTES + " (id) VALUES(NULL)"; mConnection.sqlExecuteStatement(sSQLCommand); // wie holen die zuletzt in die Tabelle eingefügten Eintrag sSQLCommand = "SELECT * FROM DataTable ORDER BY id DESC LIMIT 1"; SQLiteDataReader reader; //sendet den Request ab und packt die Zeile in den Reader mConnection.sqlRequestStatement(sSQLCommand, out reader); { getNextTableEntry(reader, out tableEntry); } // den Reader schließen closeReader(reader); // und den Eintrag zurückgeben return(tableEntry); }
/*********************************************************************/ /// <summary> /// Ließt aus dem Reader den nächsten TableEntry aus. /// </summary> /// <param name="reader">Reader der den Zugriff auf den Datensatz bietet</param> /// <param name="tableEntry">ausgelesener Datensatz</param> /// <returns>Erfolg des Auslesens</returns> /// <remarks>Am besten mit einer Schleife aufrufen, bis die Methode false zurückliefert. /// Außerdem muss sichergestellt sein dass das ID Attribut mit ausgelesen wurde</remarks> protected bool getNextTableEntry(SQLiteDataReader reader, out CTableEntry tableEntry) { tableEntry = null; if (reader.Read() == true) { //für jede Spalte arbeite er jedes element einzeln ab for (int field = 0; field < reader.FieldCount; field++) { switch (field) { case 0: tableEntry = new CTableEntry(reader[field].ToString()); break; default: //if (mAttributeTypeList[field - 1].Used == true) { tableEntry.addValue(new CAttributeValue(mAttributeTypeList[field - 1], tableEntry.Index, reader[field].ToString(), this)); } // die Normalen Attribute break; } } return(true); } return(false); }
public void addEntryTest() { CTableEntryList list = new CTableEntryList(); for (int i = 0; i < 10; i++) { CTableEntry entry = new CTableEntry(i.ToString()); list.addEntry(entry); } Assert.IsTrue(list.Size == 10); }
public void testWriteFile() { IDBDataReader dbAccess = new CDBDataReader(); dbAccess.clearDatabase(); dbAccess.addColumn("Col1"); dbAccess.addColumn("Col2"); CTableEntry entry = dbAccess.insertEntry(); entry[0].TableValue = "entry1"; entry[1].TableValue = "0.01"; entry = dbAccess.insertEntry(); entry[0].TableValue = "entry2"; entry[1].TableValue = "0.02"; entry = dbAccess.insertEntry(); entry[0].TableValue = "entry3"; entry[1].TableValue = "0.03"; CCSVWriter csvWriter = new CCSVWriter(dbAccess); string exePath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); string csvFile = exePath + TEST_CSV_FILE_PATH; File.Delete(csvFile); csvWriter.saveDatabaseToCSV(csvFile); // zum prüfen braucen wir den Reader CCSVReader csvReader = new CCSVReader(dbAccess); csvReader.insertFileDataToDatabase(csvFile); CTableEntryList entrys = dbAccess.getAllEntries(); Assert.IsTrue(entrys.Count == 3); Assert.IsTrue(entrys[0][0].TableValue == "entry1"); Assert.IsTrue(entrys[0][1].TableValue == "0.01"); Assert.IsTrue(entrys[1][0].TableValue == "entry2"); Assert.IsTrue(entrys[1][1].TableValue == "0.02"); Assert.IsTrue(entrys[2][0].TableValue == "entry3"); Assert.IsTrue(entrys[2][1].TableValue == "0.03"); }
/*********************************************************************/ /// <summary> /// Füllt die Datenbank mit Werten aus der CSV-Datei /// </summary> /// <param name="reader">Reader zum Auslesen der Datensätze</param> protected void fillDatabase(StreamReader reader) { string sLine = ""; while (readNextLine(reader, ref sLine) == true) { string[] attrbiuteNames = sLine.Split(CSV_SEPERATOR); CTableEntry entry = mDBAccess.insertEntry(); // da wir gerade einen Leeren Eintrag erstellt haben und von einer leeren Datenbank // ausgegangen sind. Können wir die Werte genau den Attributen zuordnen. // Das ist schon ziemlich gehackt, aber es funktioniert. for (int attributeIndex = 0; attributeIndex < attrbiuteNames.Length; attributeIndex++) { // zur Sicherheit lesen wir nur die Maximalanzahl an Attributen aus if (attributeIndex <= CTableConstants.MAX_ATTRIBUTE_COUNT) { entry[attributeIndex].TableValue = attrbiuteNames[attributeIndex]; } } } }
public void ItemTestIndex() { CTableEntryList list = new CTableEntryList(); CAttributeType attrType = new CAttributeType(0); attrType.setUsed("asd", E_DATATYPE.E_STRING, false); for (int i = 0; i < 10; i++) { CTableEntry entry = new CTableEntry(i.ToString()); entry.addValue(new CAttributeValue(attrType, i.ToString(), i.ToString(), null)); list.addEntry(entry); } CTableEntry singleEntry; singleEntry = list[5]; Assert.IsTrue(singleEntry.Size == 1); Assert.IsTrue(singleEntry[0].EntryIndex == "5"); Assert.IsTrue(singleEntry[0].StringValue == "5"); }
/*********************************************************************/ /// <summary> /// Baut den CSV-String für einen Tabellen-Eintrag zusammen /// </summary> /// <param name="entry">Entry für den die Zeile zusammengestellt werden soll</param> /// <returns>fertige Zeile</returns> protected string getCSVLineFromEntry(CTableEntry entry) { string sLine = ""; bool bSkipSeperator = true; foreach (CAttributeValue value in entry) { // wir tragen nur Attribute ein die benutzt werden if (value.AttributeType.Used == true) { // beim ersten mal kein ';' vor den Eintrag schreiben if (bSkipSeperator == false) { sLine += CCSVReader.CSV_SEPERATOR; } bSkipSeperator = false; sLine += value.TableValue; } } return(sLine); }
/*********************************************************************/ /// <summary> /// Baut die Zeile mit den Attributnamen zusammen, damit diese in die /// CSV-Datei eingefügt werden kann. /// </summary> /// <param name="entryList">Liste mit allen Einträgen</param> /// <returns>fertige Zeile zum einfügen in die CSV-Datei</returns> private string getAttributeNameLine(CTableEntryList entryList) { string sLine = ""; CTableEntry firstEntry = entryList[0]; bool bSkipSeperator = true; foreach (CAttributeValue value in firstEntry) { // wir tragen nur Attribute ein die benutzt werden if (value.AttributeType.Used == true) { if (bSkipSeperator == false) { sLine += CCSVReader.CSV_SEPERATOR; } bSkipSeperator = false; // den Namen eintragen sLine += value.AttributeType.Name; } } return(sLine); }
/*********************************************************************/ /// <summary> /// Löscht einen Eintrag aus der Datenbank /// </summary> /// <param name="entry">Zu Löschender Eintrag</param> /// <returns>Erfolg des Löschens</returns> public bool removeEntry(CTableEntry entry) { string sSQLCommand = "DELETE FROM " + CTableConstants.TABLE_ATTRIBUTES + " WHERE id='" + entry.Index + "'"; return(mConnection.sqlExecuteStatement(sSQLCommand)); }
/*********************************************************************/ /// <summary> /// Löscht einen Datensatz aus der Datenbank /// </summary> /// <param name="entry">Zu Löschender Datensatz</param> /// <returns>Erfolg des Löschens</returns> public bool removeDataset(CTableEntry entry) { return(mDBAccess.removeEntry(entry)); }
/*********************************************************************/ /// <summary> /// Löscht einen Datensatz aus der Datenbank /// </summary> /// <param name="entry">Zu Löschender Datensatz</param> /// <returns>Erfolg des Löschens</returns> public bool removeDataset(CTableEntry entry) { return(mTableLogic.removeDataset(entry)); }
public void test() { CTableEntry entry = new CTableEntry(""); }
/*********************************************************************/ /// <summary> /// Wird aufgrufen wenn ein Button von der Tabellenansicht geklickt wurde /// </summary> private void RibbonButtonTableView_Click(object sender, RoutedEventArgs e) { // Spalte hinzufügen Button if (sender.Equals(btnAddColumn) == true) { string name = Microsoft.VisualBasic.Interaction.InputBox("Geben Sie den Namen des Attributs ein", "Attributname", ""); if (!name.Equals("")) { CAttributeType columnData = mBusinessLogic.addAttribute(name); addDatagridColumn(columnData); } } // selektierte Spalte löschen Button else if (sender.Equals(btnRemoveColumn) == true) { if (datagrid1.CurrentColumn != null) { DataGridColumn column = datagrid1.CurrentColumn; if (mBusinessLogic.removeAttribute((string)column.Header) == true) { datagrid1.Columns.Remove(column); } } } // Neue Zeile hinzufügen else if (sender.Equals(btnAddRow) == true) { mTableEntryList.addEntry(mBusinessLogic.addDataset()); } // Selektierte Zeile Löschen else if (sender.Equals(btnRemoveRow) == true) { if (datagrid1.SelectedItem != null) { CTableEntry selectedEntry = (CTableEntry)datagrid1.SelectedItem; if (mBusinessLogic.removeDataset(selectedEntry) == true) { mTableEntryList.Remove(selectedEntry); } } } // Selektierte Zeile als Zielattribut setzen else if (sender.Equals(btnSetTargetAttribute) == true) { CTableColumn selectedColumn = datagrid1.CurrentColumn as CTableColumn; if (selectedColumn != null) { if (mBusinessLogic.setTargetAttribute(selectedColumn.ColumnDataType) == true) { foreach (CTableColumn column in datagrid1.Columns) { //column.HeaderStyle = FindResource("DefaultColumnHeaderStyle") as Style; column.HeaderStyle = null; } selectedColumn.HeaderStyle = FindResource("TargetValueColumnHeaderStyle") as Style; CTableEntry entry = (CTableEntry)datagrid1.CurrentItem; setTreeViewsEnabled(true); } else { MessageBox.Show("Das Attribut \"" + selectedColumn.ColumnDataType.Name + "\" kann nicht als Zielattribut gesetzt werden, da nur Datensätze mit den Einträgen \"j\" und \"n\" zugelassen sind.", "Ungültiges Zielattribut", MessageBoxButton.OK, MessageBoxImage.Warning); } } } }