Objektpersistenz in Datenbank
Autor: Dr. Holger Schwichtenberg
' ============================' .NET-Code-Beispiel in Visual Basic .NET' Klassendefinition für einfache Serialisierungs-Beispiele' (C) Holger@Schwichtenberg.de' ============================ <Serializable()> Public Class Person Public Name As String Public Vorname As String Public Geb As Date Public Geschlecht As Char Public Kinderanzahl As Byte Public Taetigkeiten As String() End Class' ### Serialisieren in Byte-FolgeFunction bin_serialize(ByVal o) As Byte() Dim form As New BinaryFormatter() Dim stream As New MemoryStream() form.Serialize(stream, o) stream.Close() out("Objekt serialisiert!") Return (stream.ToArray)End Function' ============================' .NET-Code-Beispiel in Visual Basic .NET' Objektpersistenz in Datenbank' (C) Holger@Schwichtenberg.de' ============================ Sub DB_Persistenz1() outtitle( _ "Objekt in Datenbank persistent machen") ' --- Objektdefinition Dim p As New Person() p.Vorname = "Holger" p.Name = "Schwichtenberg" p.Geb = #8/1/1972# p.Geschlecht = "m" p.Kinderanzahl = 0 p.Taetigkeiten = New String() _ {"Berater", "Entwickler", "Journalist", _ "Dozent"} ' --- Serialisieren in binäre Byte-Folge Dim ba As Byte() ba = bin_serialize(p) Dim DS As System.Data.DataSet Dim DT As System.Data.DataTable Dim DR As System.Data.DataRow Dim DA As System.Data.OleDb.OleDbDataAdapter Dim CB As _ System.Data.OleDb.OleDbCommandBuilder ' --- DataSet erzeugen DS = New System.Data.DataSet() ' --- Adapter definieren Const SQL As String = _ "SELECT * FROM Personen where ID = 0" DA = New OleDbDataAdapter(SQL, CONNSTRING) ' --- SQL-DML-Befehle erzeugen CB = New OleDbCommandBuilder(DA) out("INSERT-Befehl: " & _ CB.GetInsertCommand.CommandText()) ' --- Tabelle einlesen DA.Fill(DS, "Personen") ' --- Zugriff auf Tabelle DT = DS.Tables("Personen") ' --- ANFÜGEN EINES DATENSATZES DR = DT.NewRow() ' Füllen der Spalten DR("Name") = p.Name DR("Vorname") = p.Vorname DR("BIN") = ba ' Anfügen der Zeile DT.Rows.Add(DR) ' Speichern der Änderungen DA.Update(DS, "Personen") DS.Dispose() out("Objekt wurde in Datenbank gespeichert!") End Sub
using System;using System.Runtime.Serialization.Formatters.Binary;using System.Runtime.Serialization;using System.IO;using System.Xml.Serialization;using FCL_Buch;namespace FCLBuch._System_RuntimeSerialization { [Serializable] public class Person { // Klassendefinition für einfache Serialisierung-Beispiele public string Name; public string Vorname; public DateTime Geb; public char Geschlecht; public byte Kinderanzahl; public string[] Taetigkeiten; public Person() { // Konstruktor FclOutput.PrintOut("Kontruktor von Person aufgerufen..."); } }}using System;using System.Runtime.Serialization.Formatters.Binary;using System.Runtime.Serialization.Formatters.Soap;using System.Runtime.Serialization;using System.IO;using System.Xml.Serialization;using System.Xml;using System.Data;namespace FCLBuch._System_RuntimeSerialization { // Hilfsfunktionen für Serialisierung public class SerializationHelper {public static byte[] Bin_Serialize(object o) { // Serialisieren in Bytefolge BinaryFormatter form = new BinaryFormatter(); MemoryStream stream = new MemoryStream(); form.Serialize(stream, o); stream.Close(); FclOutput.PrintOut("Objekt serialisiert!"); return (stream.ToArray()); }}}using System;using System.Data;using System.Data.OleDb;namespace FCLBuch._System_RuntimeSerialization { public class SamplesSerialisierenDatenbank { public static string CONNSTR = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..\_DATEN\adonet\lieferanten.mdb;"; public void DB_Persistenz1() { // Objektpersistenz in Datenbank FclOutput.PrintOutSubHeader("Objekt in Datenbank persistent machen"); // Objektdefinition Person p = new Person(); p.Vorname = "Holger2"; p.Name = "Schwichtenberg"; p.Geb = DateTime.Parse("08/01/1972"); p.Geschlecht = 'm'; p.Kinderanzahl = 0; p.Taetigkeiten = new String[] {"Berater", "Entwickler", "Journalist", "Dozent"}; // Serialisieren in XML-String string s = SerializationHelper.Xml_Serialize(p); // Serialisieren in binäre Bytefolge byte[] ba = SerializationHelper.Bin_Serialize(p); // DataSet erzeugen DataSet ds = new DataSet(); // Adapter definieren string sql = "SELECT * FROM Personen where ID = 0"; OleDbDataAdapter da = new OleDbDataAdapter(sql, CONNSTR); // sql-DML-Befehle erzeugen OleDbCommandBuilder cb = new OleDbCommandBuilder(da); FclOutput.PrintOut("INSERT-Befehl: " + cb.GetInsertCommand().CommandText); // Tabelle einlesen da.Fill(ds, "Personen"); // Zugriff auf Tabelle DataTable dt = ds.Tables["Personen"]; // ANFÜGEN EINES DATENSATZES DataRow dr = dt.NewRow(); // Füllen der Spalten dr["Name"] = p.Name; dr["Vorname"] = p.Vorname; dr["BIN"] = ba; dr["XML"] = s; // Anfügen der Zeile dt.Rows.Add(dr); // Speichern der Änderungen da.Update(ds, "Personen"); ds.Dispose(); FclOutput.PrintOut("Objekt wurde in Datenbank gespeichert!"); }}}
Definition '.NET Framework Class Library' Verfügbarkeit der Klasse 'System.IO.MemoryStream' Übersicht über den FCL-Namensraum 'System.IO' .NET & Visual Studio Community Portal