Skip to main content
Skip table of contents

Datenzugriff innerhalb des Shops

Nur das Objektmodell des Shops (Centauri.Shop.dll) greift direkt auf die Datenbank zu. Ist ein Zugriff über das Objektmodell zu inperformant, ist eine Erweiterung des Objektmodells durchzuführen - bitte mit Günter abstimmen.

Centauri.Data.Config

Über diese Klasse wird innerhalb des Objektmodells auf die Konfiguration zugegriffen. Die Klasse kapselt dabei aktuelle und frühere Konfigurationsmöglichkeiten (z.B. Einstellungen in der Datei global.asa)

Aktuell wird die Konfiguration über den AppSettings Abschnitt der web.config Datei im Hauptverzeichnis des Shops vorgegeben und kann dann über die Admin Seiten durch Einträge in der config Tabelle überschrieben werden.

Der Zugriff erfolgt über

CODE
var config = new Centauri.Data.Config();
var firma = config["companyname"];

Es können beliebig viele Config Objekte instanziert werden - sie greifen alle auf die gleiche Konfiguration zu.

Die zulässigen Namen für Konfigurationsvariablen sind nur durch die Länge des name Feldes in der config Tabelle beschränkt.

Innerhalb der Shop Implementierung CentauriBaseShop sollte nicht auf die Config selbst zugegriffen werden, sondern auf ein Flag (z.B. Hide…) innerhalb des State Objekts innerhalb des Objektmodells. Zumindest dann, wenn es sich nicht um einen 100% kundenspezifischen Konfigurationsparameter handelt.

Das hat den Grund, dass bei den Flags innerhalb des State Objekts auch der angemeldete Kunde, eine aktive MultiShop Konfiguration, etc. berücksichtigt wird. Beim direkten Zugriff auf das Config Objekt kann nur die Grundkonfiguration entschieden werden.

Der Shop cached die config Tabelle, damit sie nicht bei jedem Zugriff neu eingelesen werden muss. Mit der Clear() Methode könnte ein erneutes Einlesen erzwungen werden, falls zuvor etwas in die Datenbank geschrieben wird. Auch das sollte normalerweise nur innerhalb des Objektmodells passieren.

Soll die Shop-Implementierung ein Neuladen gecachter Werte erzwingen, kann der Url /System/Cache/Clear aufgerufen werden.

Centauri.Data.DAL

Über diese Klasse wird innerhalb des Objektmodells auf die tatsächliche Datenbank zugegriffen. Darin verbirgt sich aktuell der Zugriff auf die System.Data.SqlClient für den Zugriff auf den Microsoft SQL Server.

Die Klasse benötigt für die Instanzierung im Konstruktor einen gültigen SQL Connectionstring, z.B.

CODE
var dal = new Centauri.Data.DAL(“Server=(local);Database=thedatabase;User Id=theusername;Password=thepassword“)

Im Normalfall wird diese Connection aus einer Konfigurationsvariable connectionstring gelesen, die üblicherweise in der web.config eingestellt ist.

Absetzen von SQL Queries

Die DAL Klasse stellt eine Methode Excecute() bereit, um Ad Hoc Queries gegen die Datenbank auszuführen. Wenn Parameter innerhalb der Query verwendet werden müssen, ist folgendes Schema zu verwenden

CODE
var config = new Centauri.Data.Config();
var connectionstring = config["connectionstring"];
var dal = new Centauri.Data.DAL( connectionstring );

dal.Prepare( "insert into items ( itemnr, itemname1 ) values ( @a, @b )" );
dal.AddParameter( "@a", Centauri.Data.DAL.Types.VarChar, neueartikelnummer );
dal.AddParameter( "@b", Centauri.Data.DAL.Types.VarChar, neuerartikelname );
dal.Execute();

Abfragen einzelner Werte aus der Datenbank

Die DAL Klasse stellt eine Methode GetValue() bereit, mit der eine Query gegen die Datenbank geschickt wird, die einen einzelnen Wert zurückliefert.

Wenn Parameter innerhalb der Query verwendet werden müssen, ist folgendes Schema zu verwenden

CODE
var config = new Centauri.Data.Config();
var connectionstring = config["connectionstring"];
var dal = new Centauri.Data.DAL( connectionstring );

dal.Prepare( "select price_eur from items where itemnr=@a" );
dal.AddParameter( "@a", Centauri.Data.DAL.Types.VarChar, gesuchterartikel );
var basispreis = dal.GetValue();

Abfragen ganzer Tabellenzeilen aus der Datenbank

Die DAL Klasse stellt eine Methode GetData() bereit, mit der eine Query gegen die Datenbank geschickt wird, die eine Tabelle zurückliefert. Die GetData() Methode liefert das Ergebnis als System.Data.DataSet zurück.

Wenn Parameter innerhalb der Query verwendet werden müssen, ist folgendes Schema zu verwenden

CODE
var config = new Centauri.Data.Config();
var connectionstring = config["connectionstring"];
var dal = new Centauri.Data.DAL( connectionstring );

dal.Prepare( "select * from items where itemnr=@a" );
dal.AddParameter( "@a", Centauri.Data.DAL.Types.VarChar, gesuchterartikel );
var artikeldaten = dal.GetData().Tables[0].Rows[0];

Das Ergebnis vom Typ System.Data.DataSet hat normalerweise nur eine Tabelle (deshalb Tables[0]). Im obenstehenden Code wird nicht geprüft, ob auch wirklich eine Zeile zurückgeliefert wird (Prüfen von dal.GetData().Tables[0].Rows.Count > 0).

Wird das DataSet geändert, kann anschließend die Methode dal.Update() aufgerufen werden, um die Änderungen im DataSet zurück in die Datenbank zu schreiben.

Centauri.Data.Security

Die Klasse stellt Ver-/Entschlüsselungsmethoden bereit, die in der Vergangenheit und aktuell verwendet werden sollten.

Die wichtigste Anwendung ist die statische Methode Centauri.Data.Security.SHA256(), mit der Kennworte und Zugriffstokens gehashed werden sollen.

CODE
var hash = Centauri.Data.Security.SHA256("geheimes Kennwort");

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.