Dieses Feature ist in der nächsten primedocs Version verfügbar.
Mit dem SqlDataProvider
können Sie auf beliebig konfigurierbare SQL-Datenbanken zugreifen.
Konfiguration
Neben der Mapping
- und SearchParameters
-Konfiguration, welche alle DataProvider
der Datenschnittstelle benötigen, kann der SqlDataProvider
über das Options
-Element konfiguriert werden:
<SqlDataProvider DisplayName="Kundenadressen"> <Options> <ConnectionString>{ConnectionString}</ConnectionString> <ConnectionProvider>System.Data.SqlClient</ConnectionProvider> <Query> SELECT * FROM Users WHERE FirstName Like '%' + @firstName + '%' </Query> </Options> ... </SqlDataProvider>
Unter Options wird die Verbindung und die Datenbankabfrage definiert.
ConnectionString: ConnectionString, kann verschlüsselt sein.
ConnectionProvider: Definiert den Typ der Datenbank - unterstützte Typen:
System.Data.Odbc
System.Data.SqlClient
MySql.Data.MySqlClient
Oracle.ManagedDataAccess.Client
Query: Definiert den SQL Query, hierbei werden die
SearchParameters
als SQL Parameter behandelt.
Der SQL Query muss in dem Format für die jeweilige Zieldatenbank sein. Da alle Suchparameter von der SearchParameters
-Konfiguration als SQL Parameter behandelt werden, muss der jeweilige SQL Parameter Syntax der Zieldatenbank eingehalten werden.
Beispiele
MS SQL
SELECT FirstName, LastName FROM Users WHERE FirstName LIKE '%' + @firstName + '%' AND LastName LIKE '%' + @lastName + '%'
MySQL
SELECT FirstName, LastName FROM Users WHERE FirstName LIKE Concat('%', @firstName, '%') AND LastName LIKE Concat('%', @lastName, '%')
ACHTUNG
Bei Oracle, Odbc und PostgreSQL muss die Reihenfolge der Platzhalter in der Query mit der Reihenfolge der "SearchParameters" übereinstimmen!
Oracle
SELECT FirstName, LastName from Users WHERE UPPER(NVL(FirstName, ' ')) Like UPPER('%' || :firstName || '%') AND UPPER(NVL(LastName, ' ')) Like UPPER('%' || :lastName || '%')
Odbc
SELECT FirstName, LastName FROM Users WHERE FirstName LIKE '%' + ? + '%' AND LastName LIKE '%' + ? + '%'
PostgreSQL
SELECT FirstName, LastName FROM Users WHERE UPPER(FirstName) LIKE UPPER('%' || ? || '%') AND UPPER(LastName) LIKE UPPER('%' || ? || '%')
ACHTUNG
Die Einschränkung der Reihenfolge hat zur Folge, dass ein Parameter in der Query genau einmal verwendet werden kann.
Folgende MS SQL Query kann nicht direkt zu Oracle oder Odbc übersetzt werden:
SELECT FirstName, MiddleName, LastName FROM Users WHERE FirstName LIKE '%' + firstName + '%' OR MiddleName LIKE '%' + firstName + '%'
Wenn ein Parameter auf mehr als eine Spalte verglichen werden muss, dann können diese Spalten im SELECT mittels der jeweiligen Funktion des Datenbanksystems kombiniert werden:
Odbc
SELECT STRING(FirstName, ' ', MiddleName) AS CompleteName, LastName FROM Users WHERE CompleteName LIKE '%' + ? + '%'
Beispiel
<SqlDataProvider DisplayName="Datenbank"> <SearchParameters> <Text Id="Name" Label="Name" /> </SearchParameters> <Options> <ConnectionString>Data Source=localhost;Initial Catalog=Customers;User Id={user};Password={pwd};</ConnectionString> <ConnectionProvider>System.Data.SqlClient</ConnectionProvider> <Query> SELECT * FROM Customers WHERE Name Like '%' + @Name + '%' </Query> </Option> <Mapping> <Map Source="Name" Target="CompanyName" /> <Map Source="Street" Target="Street" /> <Map Source="Zip" Target="PostalCode" /> <Map Source="City" Target="City" /> <Map SourceValue="CH" Target="Country" /> </Mapping> </SqlDataProvider>