attix Geschrieben 9. Februar 2010 Geschrieben 9. Februar 2010 Hallo zusammen, ich habe seit kurzem mit C# angefangen und hab natürlich jetzt ein kleines Problem bei dem mir auch stundenlange Online Recherche nichts brachte. Ich habe eine winziges Programm, mit dem ich die Möglichkeit eine .mdb Datenbank zu nutzen auskundschaften will. Hier erstmal der Code: namespace Datenbank_test { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { OleDbConnection con = new OleDbConnection(); con.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=C:\\test.mdb"; con.Open(); OleDbCommand abfrage = new OleDbCommand(); abfrage.CommandText = "SELECT * FROM inlist"; abfrage.Connection = con; string datensatz = Convert.ToString(abfrage.ExecuteNonQuery()); con.Close(); } } } Die Variable datensatz enthält aber nie die Anzahl der Datensätze sondern immer 0. Ich habe erst vorhin gerafft, dass ich durch ExecuteNonQuery nur die Anzahl nicht den Inhalt der Spalten bekomme. Deshalb: 1. Warum krieg ich immer 0 Datensätze raus? Entsprechende Tabelle enthält 5 Datensätze 2. Wie kann ich nicht die Anzahl sondern den Inhalt anzeigen lassen? Ich hoffe das ihr mir weiterhelfen könnt, ich häng das fest. MFG Attix Zitieren
lbm1305 Geschrieben 9. Februar 2010 Geschrieben 9. Februar 2010 Hallo zusammen, ich habe seit kurzem mit C# angefangen und hab natürlich jetzt ein kleines Problem bei dem mir auch stundenlange Online Recherche nichts brachte. Ich habe eine winziges Programm, mit dem ich die Möglichkeit eine .mdb Datenbank zu nutzen auskundschaften will. Hier erstmal der Code: ... Die Variable datensatz enthält aber nie die Anzahl der Datensätze sondern immer 0. Ich habe erst vorhin gerafft, dass ich durch ExecuteNonQuery nur die Anzahl nicht den Inhalt der Spalten bekomme. Deshalb: 1. Warum krieg ich immer 0 Datensätze raus? Entsprechende Tabelle enthält 5 Datensätze 2. Wie kann ich nicht die Anzahl sondern den Inhalt anzeigen lassen? Ich hoffe das ihr mir weiterhelfen könnt, ich häng das fest. MFG Attix ExecuteNonQuery liefert eine DataReader Objekt zurück. Dieses muss dann durchlaufen werden. Dann kommst Du auch an die Daten. Das die Onlinerecherche nichts bringt, halte ich für ein Gerücht. Wenn man ordentliche Suchbegriffe eingibt, erhält man mehr als ein Resultat. Zitieren
C#_Rookie Geschrieben 17. Februar 2010 Geschrieben 17. Februar 2010 Man muss nicht alles wissen, man muss nur wissen wo es steht... Mir persönlich hat die untenstehende Seite bisher sehr gut geholfen: Galileo Computing :: Visual C# 2008 -- Das umfassende Handbuch Gruß Zitieren
Mcolli Geschrieben 24. Februar 2010 Geschrieben 24. Februar 2010 abfrage.ExecuteNonQuery() gibt einen int Wert zurück, der die Anzahl an betroffenen Datensätzen liefert. abfrage.CommandText = "SELECT * FROM inlist"; Selektiert nur Datensetzte verändert diese aber nicht. Lösung: abfrage.CommandText = "SELECT * FROM inlist"; abfrage.Connection = con; using (IDataReader reader = abfrage.ExecuteReader()) { int anzahlZeilen = 0; while (reader.Read()) { anzahlZeilen++; String wertSpalte1 = reader[0].ToString(); int zahlInSpalteMitNamenXY = Convert.ToInt32(reader["XY"]); int anzahlSpalten = reader.Depth; } } con.Close(); Desweiteren würde ich Dir folgende Microsoft Biliothek empfehlen: Enterprise Library Eine Komponente davon heisst "Data Application Block". Nach der Installation sind die Dlls im GAC registriert und du kannst Sie als .Net Verweis deinem Projekt hinzufügen und dann benutzen. Die nötigen Dlls werden dann in das Ausgabeverzeichnis kopiert und du musst die Library nicht auf dem Zielrechner der Anwendung installieren. Vorteil: Abtraktion der Datenbankzugriffe erlaubt einheitlichen Umgang mit verschieden Datenquellen.Du kannst einfach auf DataSets zugreifen und diese dann auch bequem als DataContext bei Steuerelementen einrichten.einfach schreibweise.Las but not least kannste die Verbindungszeichenfolge für ConnectionStrings in der App.config hinterlegen und so, gerade bei *.mdb Datenquellen den Speicherort ändern ohne was im QuellCode zu ändern. Zitieren
lbm1305 Geschrieben 24. Februar 2010 Geschrieben 24. Februar 2010 abfrage.ExecuteNonQuery() Stimmt...jetzt wo Du es sagst :-) command.ExecuteReader(); --> liefert den entsprechenden Datareader. :-) Zitieren
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.