LukOnline Geschrieben 10. Juli 2010 Teilen Geschrieben 10. Juli 2010 Hallo ihr Fachinformatiker ;-) Ich programmiere mir gerade eine C#-Anwendung mit Visual C# 2005 Express, die mit einer Access 2003 Datenbank kommunizieren soll. (Mein System: Win7 Professional x64) Habe den Code eigentlich auch schon soweit fertig, bekomme jedoch eine Meldung „Adressbuch funktioniert nicht mehr“. Vielleicht kann mir jemand helfen… Klasse cDatenbank: using System; using System.Collections.Generic; using System.Text; using System.Data.OleDb; using System.Windows.Forms; namespace Adressbuch { class cDatenbank { // Attribute public OleDbConnection Connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Luk\Documents\Visual Studio 2005\Projects\Adressbuch\ZAM.mdb"); // Methoden public void SQLRead(string Query) { Connection.Open(); OleDbCommand Command = new OleDbCommand(Query, Connection); OleDbDataReader Reader = Command.ExecuteReader(); while (Reader.Read()) { MessageBox.Show(Reader[0].ToString()); } Reader.Close(); Connection.Close(); } } } Form1.cs: ... cDatenbank Access = new cDatenbank(); ... Access.SQLRead("SELECT VNAMECALL FROM kontakte"); Datei ist vorhanden, Abfrage korrekt, 1 Zeile vorhanden! Sieht jemand einen Fehler? Vielen Dank schonmal im voraus! Gruß, Luk Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lbm1305 Geschrieben 10. Juli 2010 Teilen Geschrieben 10. Juli 2010 Moin, 1 Zeile bedeutet, dass die While-Schleife einmal durchlaufen wurde? Und beim zweiten Mal der Abbruch kommt? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Mcolli Geschrieben 11. Juli 2010 Teilen Geschrieben 11. Juli 2010 Auch wenn ich mich langsam bei regelmäßigen Lesern des .NET Berieches wegen "Reposts" enbeliebt mache, empfehle ich Dir dringend die Enterprise Library runter zu laden .... das ist ne .Net Erweiterung Die sehr viele Funktionen bietet .... unter anderm einen Data Access Bereich der sich um Simplifizierzung von speziffischen Datenbanken kümmert. Für Dich als Entwickler heisst das: - Enterprise Library Assemblys im Projekt registrieren, die Du brauchst - den Code schreiben .... dieser ist sehr mächtig und trotzdem intuitiv zugänglich - falls noch nicht vorhanden eine App.Config (Projektmappenverzeichnis ... Projekt XY rechtsclicken ... Hinzufügen ... Anwendungs-Konfigurationsdatei) erstellen. - mittels dem, durch die Installtion der Enterprise Library hinzugefügten, VS Add-In der App.config alle in deinem Projekt verwendente Verbindungszeichenfolgen hinzufügen.... und im Code dann mittels // DatabaseFactory ist statisch und mit der Ent. Lib gekommen // der Parameter für Create Database ist vom Tyo String und muss nur den Namen // beinhalten unter dem die Verbindungszeichenfolge in der App.config registriert ist Database db = DatabaseFactory.CreateDatabase("MeinDBConStringNameInDerAppConfig"); eine Datenbank Verbding aufbauen..... ob da jetzt jetzt ein Access-, SQL-, Oracle- oder sont ein Verbindungsfolgen-String für eine ereichbare Datenbank steht interessiert die statische Methode von "DatabaseFactory" gar nicht ... Factory-Pattern halt. Die Handhabung ist immer die gleiche. Der Download und die Verwendung (auch zu komerziellen Zwecken) der Ent. Lib ist UMSONST. Alle benutzten *.dlls müssen unter "Verweise" in dem entsprechenden Projekt angeben werden und werden AUTOMATISCH mit ins Ausgabe Verzeichnis des Projektes kopiert .... somit muss die Bililothek nur auf dem / den Entwicklungs-Rechner/n istalliert werden ... der Benutzer der Anwendung kriegt davon gar nix mit. Viele Firmen modifizieren die Ent. Lib. mitterweile sogar und rollen diese als Standart Bib. für deren Projekte bei den Kunden aus. Das geht weil der Quell Text von der Ent. Lib im download Paket von *** vorhanden ist und weil Du für Deinen Code eine bestimmte Version der *.dll Laden kannst .... Wenn das unternehmen "Trottel Meyer und Horst AG." also den absoluten Bullschit programmiert und Ihre Modifizierte Version der Ent. Lib auf deinem Kunden Rechnern ausrollte, interessiert das Deine Anwendung gat nicht. Einfacher Datenbank Verbindungen herstellen geht echt nix. Noch die Links ... diesmal am Schluss der Post: Enterpriese Library (Ent. Lib) (Beschreibung) Enterpriese Library (Ent. Lib) (download) DataAcces Application Block (Ent Lib 2.0 basiertes Beispiel zum Lesen aus DB .... das geht mittels dem IReader Interface aus dem normalen .Net Framework einfacher ... er will aber zeigen wie man sogar StoredProcedures aus der DB nutzt ... SQL beispiel bis auf Verb.-Zeichenfolge aber das gleiche für Oracle oder so) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
LukOnline Geschrieben 11. Juli 2010 Autor Teilen Geschrieben 11. Juli 2010 Hey! Danke erstmal für die Antworten! Also erstmal zu meinem Code... Der Fehler kommt schon bei Connection.Open(); (Die Teile darunter habe ich auskommentiert...) Also liegt es ja nahe, dass mit dem Connection String etwas nicht passt. Wie ist der überhaupt aufgebaut? Habe ihn nur aus einem Internet Beispiel und habe den Pfad angepasst. Dürfen im Pfad überhaupt Leerzeichen sein? Daran kann es aber nicht liegen, weil C:\ZAM.mdb hat auch nicht geklappt... Moin, 1 Zeile bedeutet, dass die While-Schleife einmal durchlaufen wurde? Und beim zweiten Mal der Abbruch kommt? Ich verstehe nicht so richtig, was du meinst...:confused: Die Schleife läuft, so lange Reader Datensätze liefert... @ Mcolli: Habe mir die Enterprise Libary mal runtergeladen und nur die Kategorie Data Access intstalliert. Aber nun meine Frage(n): - Enterprise Library Assemblys im Projekt registrieren, die Du brauchst Wie mache ich das? :-o - falls noch nicht vorhanden eine App.Config (Projektmappenverzeichnis ... Projekt XY rechtsclicken ... Hinzufügen ... Anwendungs-Konfigurationsdatei) erstellen. Bei mir steht unter hinzufügen nur: Neues Element, Vorhandenes Element, Neuer Ordner, Windows Form, Benutzersteuerelement, Klasse - mittels dem, durch die Installtion der Enterprise Library hinzugefügten, VS Add-In der App.config alle in deinem Projekt verwendente Verbindungszeichenfolgen hinzufügen.... und im Code dann mittels Diese Datei habe ich wie gesagt nicht... Vielen Dank schonmal für eure Hilfe! Bin übrigens C# Anfänger und verwende auch nur Visual C# 2005 Exrpess... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
LukOnline Geschrieben 11. Juli 2010 Autor Teilen Geschrieben 11. Juli 2010 Habe gefunden wo ich eine app.config erstellen kann. <?xml version="1.0" encoding="utf-8" ?> <configuration> // DatabaseFactory ist statisch und mit der Ent. Lib gekommen // der Parameter für Create Database ist vom Tyo String und muss nur den Namen // beinhalten unter dem die Verbindungszeichenfolge in der App.config registriert ist Database db = DatabaseFactory.CreateDatabase("MeinDBConStringNameInDerAppConfig"); </configuration> ist das so OK? Was mache ich nun mit meinem Connection String? Das Registrieren der Assemblies habe ich glaub ich auch richtig gemacht... Als verweise habe ich die Dateien Microsoft.Practices.EnterpriseLibrary.Data.SqlCe.dll Microsoft.Practices.EnterpriseLibrary.Data.dll hinzugefügt und einen Namespace eingetragen: using Microsoft.Practices.EnterpriseLibrary.Data; Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lbm1305 Geschrieben 11. Juli 2010 Teilen Geschrieben 11. Juli 2010 (bearbeitet) Moin, auf msdn-online.de kannst Du Dir auch ein paar Webcasts zum Thema "Enterprise Library" anschauen. Eine 7teilige Serie von Christian Weyer ist aus dem Jahr 2005. Die Unterschiede zur 5er Version sollten nicht allzu groß sein. Ansonsten schau Dir auch den Webcast von Dariusz Parys an. EDIT: Die Enterprise Lib 5 setzt mindestens das .NET 3.5 SP1 voraus. Bearbeitet 11. Juli 2010 von lbm1305 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
LukOnline Geschrieben 12. Juli 2010 Autor Teilen Geschrieben 12. Juli 2010 es war kein Programmierfehler! siehe: Der Microsoft.Jet.OLEDB.4.0-Provider ist nicht auf dem lokalen Computer registriert | Michael-Seitz.org Der 'Microsoft.Jet.OLEDB.4.0'-Provider ist nicht auf dem lokalen Computer registriert. Stefan Falz : Debug? Release? Wo ist die Projektmappenkonfiguration? kann geschlossen werden Danke nochmal!! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Mcolli Geschrieben 13. Juli 2010 Teilen Geschrieben 13. Juli 2010 Also schön dass Du Dein Problem gelöst ... und sry für die Späte Antwort Zu der Ent.Lib nochmal: Die 5er Version davon geht nur mit Visual Studio 2010, Windows7 und .NET Framework 4.0. Du müsstest die 4er Version nehmen .... ich weiss allerdings ob das Probleme mit dem VS Express gibt.... schlimmsten falls kannste die "komfort" Plugins nicht nutzen wie ein Grafischer Editor für die "App.config" die man sonst nur als xml Datei angezeigt bekommt.... also nun zum Handwerklichen - Enterprise Library Assemblys im Projekt registrieren, die Du brauchst Wie mache ich das? :-o -Du öffnest den "Projektmappen Explorer" (Ist standart mäßig auf der rechten Seite angedockt wenn nicht unter "Ansicht" - "Projektmappen Explorer") - Rechts auf "Verweise" clicken und dann "Verweis hinzufügen" auswählen - Im folgenden Dialog dann unter dem reiter "NET" die benötigten "Assembly" (auch Verweiss oder DLL genannt) suchen. Die heissen entweder "Enterprise Library BlaBlub Apllication Block" oder "Microsoft Practices.blabla" musste bischen Suchen. Dann Mit ok bestätigen. - In den Klassen, wo die Verweise dann genutzt werden die "using" Direktive ganz oben benutzen z.B. "using Microsoft.Practices.Data Zur App.Config: -Projekt "Element Hinzufügen" und dann "anwendungs Konfigurations Datei auswählen. - Diese Entweder einfach öffnen um XML Ansicht zu haben oder rechts Click und "Edit with Enterprise Library" sagen Ich muss jetzt leider zur Arbeit fahren ... Ich hab noch ne Bilder Serie dazu .... Ich werde wenn ich wieder komme mal ein kleines Tutorial dazu schreiben mit Bildern und so Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
realgun Geschrieben 13. Juli 2010 Teilen Geschrieben 13. Juli 2010 Also schön dass Du Dein Problem gelöst ... und sry für die Späte Antwort Zu der Ent.Lib nochmal: Die 5er Version davon geht nur mit Visual Studio 2010, Windows7 und .NET Framework 4.0. Wie kommst Du denn darauf? Die 5er Version braucht "nur" .NET3.5 SP1 und kann durchaus mit VS 2008 verwendet werden: System Requirements. Oder meinst Du was anderes? Eigentlich finde ich es ein bisschen "oversized" mit der EnterpriseLib eine Anwendung zu schreiben, die eine Access Datenbank verwendet. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
LukOnline Geschrieben 13. Juli 2010 Autor Teilen Geschrieben 13. Juli 2010 Hey zusammen! Wie schon gesagt... Habe es jetzt doch nicht mit EntLib sondern OleDb realisiert... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lbm1305 Geschrieben 13. Juli 2010 Teilen Geschrieben 13. Juli 2010 Wie schon gesagt... Habe es jetzt doch nicht mit EntLib sondern OleDb realisiert... Hehe...das sind zwei verschiedene Dinge ;-) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Mcolli Geschrieben 13. Juli 2010 Teilen Geschrieben 13. Juli 2010 Wie kommst Du denn darauf? Die 5er Version braucht "nur" .NET3.5 SP1 und kann durchaus mit VS 2008 verwendet werden: System Requirements. Oder meinst Du was anderes? Eigentlich finde ich es ein bisschen "oversized" mit der EnterpriseLib eine Anwendung zu schreiben, die eine Access Datenbank verwendet. Jo da hatttttaaaaaa Recht. Meine Kaffee Maschine ist kaputt ... da kann ich morgens nicht richtig lesen :old Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
LukOnline Geschrieben 13. Juli 2010 Autor Teilen Geschrieben 13. Juli 2010 Hey! Ich hab gleich mal noch eine Frage und stell die mal hier^^ Also, ich habe mir eine Klasse von ListBox angeleitet und von dieser Klasse ein Objekt erstellt. public class ToolTipListBox : ListBox Diese Klasse zeigt beim überfahren eines Items in der Listbox einen ToolTip. Jetzt will ich aber, dass der ToolTip eine Variable vom Typ <List> (also nur einen Listpunkz) aus dem Form anzeigt (MainForm). Habe eine GetMethode erstellt mit der ich aus dem MainForm die <List> Variable zurückgebe. Nur wie kann ich jetzt in der Klasse ToolTipListBox auf die Get-Methode zugreifen? Vielen Dank schonmal für eure nette Hilfe^^ LG Luk Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lbm1305 Geschrieben 13. Juli 2010 Teilen Geschrieben 13. Juli 2010 Pro Frage / Problem ein Thread. Stell Dir vor, jemand hat ein ähnliches Problem wie Du. Wo sollte der dann suchen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
LukOnline Geschrieben 21. Juli 2010 Autor Teilen Geschrieben 21. Juli 2010 Hey ich hab nochmal eine Frage... Meine DB-Verbindung habe ich bis jetzt so realisiert: Form1.cs: OleDbConnection Connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=ZAM.mdb"); Nur jetzt habe ich gesehen, dass es auch einen "Assistenten zum Konfigurieren von Datenquellen" gibt... D.h. ich habe meine Access DB jetzt im Projektmappenexplorer integriert. Meine Abfragen habe ich mit dem Connection String immer so gestaltet: OleDbCommand Command = new OleDbCommand(Query, Connection); Doch wenn ich jetzt Variable Connection lösche, dann ist dieser Codeteil natürlich hinfällig. Doch wie mache ich diese Abfrage nun ohne die Variable, nur mit der Datenquelle? Habe bei Google nichts für mich passendes für mich gefunden. Danke schonmal für eure Hilfe! Luk 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.