Verwendung des DbCommandSetDataProviders mit Stored Procedures

Gilt ab List & Label 16
Damit als Datenquelle auch Stored Procedures verwendet werden können, steht der DbCommandSetDataProvider zur Verfügung. Diesem können dann sogenannte IDbCommands übergeben werden, bei denen man jeweils die Eigenschaft CommandType auf CommandType.StoredProcedure setzen muss. Das genaue Vorgehen wird im Folgenden anhand eines kleines C# Beispiels gezeigt, das die bekannte Northwind-Datenbank auf einem Microsoft SQL Server nutzt:
...
using (ListLabel LL = new ListLabel())
{
	// Verbindungsaufbau zum SQL Server konfigurieren
	SqlConnectionStringBuilder sqlConnectionParameters = new SqlConnectionStringBuilder();
	sqlConnectionParameters.DataSource = "<Your MS SQL Server Instance Name>";
	sqlConnectionParameters.InitialCatalog = "Northwind";
	sqlConnectionParameters.IntegratedSecurity = true;
	SqlConnection sqlConnection = new SqlConnection(sqlConnectionParameters.ToString());
	
	// SqlCommand für eine Stored Procedure konfigurieren
	SqlCommand sqlStoredProcedureCommand = new SqlCommand("[dbo].[CustOrderHist]", sqlConnection);
	sqlStoredProcedureCommand.CommandType = CommandType.StoredProcedure;
	sqlStoredProcedureCommand.Parameters.AddWithValue("@CustomerID", "ALFKI");

	// Konfigurierten Datenprovider als Datenquelle verwenden
	DbCommandSetDataProvider dataProvider = new DbCommandSetDataProvider();
	dataProvider.AddCommand(sqlStoredProcedureCommand, "CustOrderHist");
	LL.DataSource = dataProvider;

	// Designer aufrufen
	LL.Design();
}
...

Ab List & Label 26 können Stored Procedures auch parametrisiert werden, d.h. die Berichtsparameter für die Parameter der gespeicherten Prozedur können automatisch erstellt werden wie hier in unserem Blog beschrieben. Eine einfache Stored Procedure dazu könnte so aussehen:

CREATE PROCEDURE [dbo].[SelectAllCustomers] @CompanyName nvarchar(50) = 'Health Spa, Limited'
AS
SELECT * FROM SalesLT.Customer Customer WHERE Customer.CompanyName = @CompanyName

Um einen Berichtsparameter für den Parameter @CompanyName der Stored Procedure zu erstellen, kommt dann der folgende Code zum Einsatz:

...
var provider = new DbCommandSetDataProvider();
var conection = new SqlConnection(...);
connection.Open();

// create command for stored procedure
var command = new SqlCommand("SelectAllCustomers", connection);
command.CommandType = CommandType.StoredProcedure;

// create parameter. Note the syntax for the value as documented in the blog post linked above
command.Parameters.AddWithValue("@CompanyName", "{{CompanyName=Health Spa, Limited}}");
provider.AddCommand(command, "SelectAllCustomers");

using (ListLabel LL = new ListLabel())
{
    LL.DataSource = provider;
    LL.Design();
}
...
IDKBTD001335 KBTD001335