michmarc Geschrieben 4. April 2012 Teilen Geschrieben 4. April 2012 Hallo zusammen, Mache zurzeit ein Praktikum bei einer It Firma. Etwas kleines über mich: Ich will eine Ausbildung als Anwendungsentwickler , dieses Praktikum würde es mir eventuell ermöglichen eine Stelle zubekommen. Jedoch hab ich noch nie mit C# gearbeitet und wurde dementsprechend von meinem Arbeitgeber ins kalte Wasser geworfen. Meine Programmiererfahrungen beschränken sich eher auf C++. Beschreibung: Folgende Aufgabe hab ich bekommen: Einen Passwort Manager erstellen in einer WindowsFormsApplication. Nun habe ich mir gedacht ich erstelle einen TreeView und einen DataGridView. Habe Mehrere Buttons noch hinzugefügt und eine Sqllite Datenbank angelegt auswelcher ich auch Daten abrufen kann. So das Problem ist hier... Wenn ich einen Datensatz hinzufügen will sprich ich schreibe den Datensatz in die Tabelle und da dachte, ich mir da sollte doch ein Button funktionieren mit der Funktion Speichern. welches ich dann aufgebaut habe mit Insert .... jedoch funktioniert dies nicht und dort wollte ich euch mal nach Hilfe fragen. Desweiteren hab ich einen Button Namens Update bzw.Aktualiesieren dieser soll vorhandene Datensätze nachdem ich sie im DataGridview geändert habe einfach nur abspeichern. Sprich laut meinem "Arbeitgeber" Update .... das funktioniert ebenfalls nicht .. Weitere Verbesserungen nehme ich sehr gerne an. Falls jemand das komplette Programm haben will einfach bescheid sagen Danke schonmal im vorraus! using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SQLite; namespace WindowsFormsApplication1 { public partial class Form1 : Form { private SQLiteConnection sqlconn; private SQLiteCommand sqlCmd; public Form1() { InitializeComponent(); } private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { UserTabelle.Rows.Clear(); sqlCmd = new SQLiteCommand(sqlconn); sqlCmd.CommandText = String.Format("select User.User,User.Passwort,Typ.Name,User.LetzteAenderung,User.URL,User.EMail,User.Sonstiges from User,Typ where ( GruppeID={0} or {0}=0) and Typ.ID=User.TypID",e.Node.Name); SQLiteDataReader sqlUser = sqlCmd.ExecuteReader(); while (sqlUser.Read()) { UserTabelle.Rows.Add(sqlUser.GetString(0),sqlUser.GetString(1),sqlUser.GetString(2),sqlUser.GetDateTime(3),sqlUser.GetString(4),sqlUser.GetString(5),sqlUser.GetString(6)); } sqlUser.Close(); sqlUser.Dispose(); } private void Form1_Load(object sender, EventArgs e) { string connString = String.Format("Data Source={0}\\test.sqlite;Version=3;Pooling=False;Max Pool Size=100;", Application.StartupPath); sqlconn = new SQLiteConnection(connString); sqlconn.Open(); sqlCmd = new SQLiteCommand(sqlconn); sqlCmd.CommandText = "select * from Gruppe"; SQLiteDataReader sqlReader = sqlCmd.ExecuteReader(); while (sqlReader.Read()) { Gruppe.Nodes.Add(sqlReader.GetInt32(0).ToString(), sqlReader.GetString(1)); } sqlReader.Close(); sqlReader.Dispose(); } private void NeueGrp_Click(object sender, EventArgs e) { Gruppe.Nodes.Add(""+textBox2.Text); UserTabelle.Rows.Clear(); } private void NewUs_Click(object sender, EventArgs e) { UserTabelle.Rows.Clear(); UserTabelle.Rows.Add("User eingeben bitte"); } private void Speichern_Click(object sender, EventArgs e) { sqlCmd.CommandText = ("Insert * into [\\test.sqlite] UserTabelle (User,Passwort,LetzteAenderung,URL,EMail,Sonstiges,TypID) Values (User,Passwort,LetzteAenderung,URL,Email,Sonstiges,TypID,)"); } private void Aktualiesieren_Click(object sender, EventArgs e) { sqlCmd.CommandText = String.Format("Update Gruppe SET Gruppe.ID,Gruppe.textbox2, Gruppe {0} where (ID >= {0} )"); } } } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Pixie Geschrieben 4. April 2012 Teilen Geschrieben 4. April 2012 Hallo, der SqlReader ist eine Möglichkeit, Daten abzurufen, es gibt aber auch andere Eine, die recht komfortabel ist, geht über das DataSet DataSet-Klasse (System.Data) und den SqlDataAdapter SqlDataAdapter-Klasse (System.Data.SqlClient) Damit wird dann auch das Arbeiten mit dem DataGridView DataGridView-Klasse (System.Windows.Forms) deutlich angenehmer. Stöber mal etwas auf den Seiten und ihren verlinkten Inhalte und lass Dich inspirieren... Für Deine Anwendung solltest Du außerdem den Connctionstring auslagern oder in der Anwendung konfigurierbar machen. Bei einer Änderung der Datenquelle muss dann die Anwendung nicht neu kompiliert werden. Zum Konfigurieren in der Anwendung gibt es z.B. den ConnectionStringBuilder Verbindungszeichenfolgen-Generatoren (ADO.NET) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
michmarc Geschrieben 5. April 2012 Autor Teilen Geschrieben 5. April 2012 ja danke dir schonmal jedoch meinte mein Arbeitgeber ich sollte das mal so versuchen wie oben beim Insert das würde heißen hier liegt der fehler private void Aktualiesieren_Click(object sender, EventArgs e) { sqlCmd.CommandText = String.Format("Update Gruppe SET Gruppe.ID,Gruppe.textbox2, Gruppe {0} where (ID >= {0} )"); } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Proof Geschrieben 5. April 2012 Teilen Geschrieben 5. April 2012 HI Dann würde ich an deiner Stelle mal das SQL Statement überprüfen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Rekon1602 Geschrieben 10. April 2012 Teilen Geschrieben 10. April 2012 private void Aktualiesieren_Click(object sender, EventArgs e) { sqlCmd.CommandText = String.Format("Update Gruppe SET Gruppe.ID,Gruppe.textbox2, Gruppe {0} where (ID >= {0} )"); } Also irgendwie passen da einige Sachen nicht an deinem SQL-Statement. Die Platzhalter in dem String.Format werden nicht gesetztDas SET des SQL-Statements ist nicht korrekt. Hier musst du immer 'FeldName = Feldwert' schreiben und dann mit Kommata getrennt die anderen zu setzenden Felder angeben. (SQL-UPDATE)Ich denke mal, dass du nicht textbox2 schreiben willst, sondern den Text, welcher sich in dieser Textbox befindet. Dazu musst du auf die Text-Property der Textbox zugreifen Noch eine kleine Anmerkung zu SQL. Es ist besser den Parameter der WHERE-Bedingung nicht über string-verknüpfungen zu setzen, sonder über SQL-Parameter. Dazu einfach in den CommandText einen Parameter über @Parametername schreiben. Diesen Parameter kannst du dann im nachhinein setzten (siehe Beispiel) Beispiel: sqlCmd.CommandText = "UPDATE Gruppe SET Id=@Id"; SqlParameter idParam = new SqlParameter("@Id", DbType.Int32); idParam.Value = "123"; sqlCmd.Paramters.Add(idParam); Dadurch kannst du deine SQL-Statements gegen SQL-Injection absichern SqlParameter Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.