Home   Cover Cover Cover Cover
 

Übungsaufgaben zu Kapitel 5: ADO.NET

  1. Unabhängigkeit von der Datenbank. Wie erreicht ADO.NET die Unabhängigkeit von Datenbank-Implementierungen?


  2. OLE DB und SQL Server. Im .NET-SDK sind die Datenanbieter-Implementierungen für OLE DB-Datenquellen und für SQL Server vorhanden. Kann über OLE DB auch auf SQL Server zugegriffen werden? Wann sollte man die OLE DB-Implementierung und wann die SQL Server-Implementierung verwenden?


  3. Klassen und Interfaces. Welche Interfaces werden hauptsächlich beim verbindungsorientierten Zugriff verwendet? Was sind die wichtigsten Klassen oder Interfaces für den verbindungslosen Zugriff?


  4. Zugriffsart bei gleichzeitigem Zugriff. In einer Anwendung möchten viele Benutzer gleichzeitig die Daten einer Tabelle (z.B. Produkte) lesen. Verwenden Sie eher einen verbindungsorientierten oder einen verbindungslosen Zugriff?


  5. Ändern von Daten. Werden die Änderungen der Daten bei einem verbindungslosen Zugriff auch in der Datenbank automatisch durchgeführt? Falls ja, wodurch, falls nein, wie können sie trotzdem durchgeführt werden?


  6. Verbindungsorientierter Zugriff.

    Für diese und die folgenden Übungen wird eine MS Access-Datenbank verwendet. Diese ist ähnlich in der Struktur wie die SQL Server-Datenbank, die in Abschnitt 5.3 des Buches verwendet wurde. Die Datenbank hat folgende Struktur:
    Contacts
    Sie finden die Datenbankdatei hier (gezippt).

    Entwickeln Sie ein Kommandozeilenprogramm 'SqlBatch', welches eine Textdatei mit mehreren SQL-Anweisungen einliest und diese Anweisungen ausführt. Die Textdatei ist so aufgebaut, dass in der ersten Zeile die Verbindungsinformation (ConnectionString) zu finden ist und danach die SQL-Kommandos. Die SQL-Kommandos werden jeweils durch einen Strichpunkt (';') beendet (siehe Beispiel).

    Das Ergebnis (falls vorhanden) und auch die Fehler sollen in eine Ausgabedatei gespeichert werden. Bei SELECT-Anweisungen soll das Ergebnis tabellarisch ausgegeben werden, sonst soll die Ausgabe die Anzahl der modifizierten Datensätze enthalten. Nehmen sie bei der tabellarischen Formatierung die Größe der Datenbankspalte zu Hilfe.

    Alle SQL-Anweisungen sollen in einer eigenen Transaktion ausgeführt werden. Schlägt eine SQL-Anweisung fehl, so werden die bereits getroffenen Anweisungen wieder rückgängig gemacht.

    Beispiel:

    Die Datei 'sqlcmd.txt' enthalte folgende Kommandos:

    		provider=SQLOLEDB;Integrated Security=SSPI; data source=127.0.0.1\NetSDK; database=NETBOOK;
    
    		SELECT * FROM Contact;
    
    		SELECT * FROM Person;
    
    		UPDATE Person
    		SET Name = 'Modified'
    		WHERE ID = 1;
    
    		SELECT * FROM Person;
    		

    Aufruf von SqlBatch:

    		>SqlBatch sqlcmd.txt result.txt
    		

    Ergebnis in result.txt



  7. Verbindungsloser Zugriff. Schreiben Sie ein Programm 'DumpDB', welche eine Reihe von Tabellen eine Datenbank in ein DataSet liest und den Inhalt auf der Konsole ausgibt. Die Datenbank und die zu lesenden Tabellen aus der Datenbank sollen dabei als Kommandoargumente übergeben werden. Zum Beispiel soll das Kommando:
    	DumpDB Contacts.mdb Person Contact
    	
    die Tabellen 'Person' und 'Contact' aus der Datenbank 'Contacts.mdb' lesen und den Inhalt auf der Konsole ausgeben.
    Für diese Übung können Sie wiederrum die Datenbank 'Contacts.mdb' aus Übung 6 verweden.


  8. Speichern von DataSet in einer XML-Datei. Schreiben Sie ein Kommandozeilenprogramm ExportXML, welches alle Daten und Tabellen einer Datenbank ausliest und in einer XML-Datei abspeichert. Der erste Kommandozeilenparameter ist der Name der Verbindung und der zweite Paramter gibt den Namen der zu erzeugenden XML-Datei an. Die exportierte XML-Datei soll auch das Schema der Datenbank enthalten.

    Beispiel: Auslesen der Datenbank 'Contacts.mdb' und Abspeichern in 'contacts.xml'.

    ExportXML "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Contacts.mdb" "contacts.xml"
    			


  9. Diskussion Effizienz. Ist der XML-Export bzw. -Import von Daten aus einer Datenbank via DataSets effizient? Falls nein, können Sie sich eine andere Lösung vorstellen?