SQLite Data Provider Views in Reports verwenden

Ich nutze aktuell folgendes in C# um meine Datenbank mit List & Label zu verbinden:

Connection = new SQLiteConnection(Section.ReportData.ConnectionString);
DataProvider = new SQLiteConnectionDataProvider(Connection);
ListLabelObject.SetDataBinding(DataProvider);

Leider habe ich aktuell so keinen Zugruff auf vorhandene Views.
In anderen Topics habe ich gesehn, dass für den
SqlConnectionDataProvider und den OleDbConnectionDataProvider die Eigenschaft SupportedElementTypes gibt mit der man auch die Views selektieren kann.

Welche Möglichkeit existiert für SQLite?

Aktuell unterstützen wir mit dem SQLiteConnectionDataProvider nur Tabellen automatisch.

Was hier aber gemacht werden könnte, wäre z.B. eine DataProviderCollection aufzumachen, und da wie gehabt einen SQLiteConnectionDataProvider, und einen eigenen DbCommandSetDataProvider reinzupacken. Die Views können dann mit der AddCommand Methode zum DbCommandSetDataProvider hinzugefügt werden, und stehen dann im Designer zur Verfügung.

Das könnte in C# wie folgt aussehen:

Wir haben in der Sample SQLite Datenbank “Chinook.db” (zu finden im Unterverzeichnis \combit\LL28\Beispiele) eine View “TestView” erstellt.

private SQLiteConnectionDataProvider SQLiteProv()
{
    SQLiteConnection conn = new SQLiteConnection(connectionString);
    SQLiteConnectionDataProvider prov = new SQLiteConnectionDataProvider(conn);

    return prov;
}

private SQLiteCommand CreateSQLiteCommand()
{
    SQLiteConnection conn = new SQLiteConnection(connectionString);
    conn.Open();
    SQLiteCommand cmd = new SQLiteCommand(conn);
    cmd.CommandText = "SELECT * FROM TestView";
    cmd.ExecuteNonQuery();

    return cmd;
}

private DbCommandSetDataProvider DbCommandSetProv()
{
    DbCommandSetDataProvider prov = new DbCommandSetDataProvider();
    prov.AddCommand(CreateSQLiteCommand(), "TableFromDBView");
    return prov;
}

private void button1_Click(object sender, EventArgs e)
{
    DataProviderCollection provCollection = new DataProviderCollection();
    provCollection.Add(SQLiteProv());
    provCollection.Add(DbCommandSetProv());

    LL.DataSource = provCollection;
    LL.Design();
}

Die Tabelle “TableFromDBView” steht jetzt im Designer zur Verfügung.

image

1 Like

Als ergänzende Information - ab Version 29 wird der Provider auch analog zu den anderen Providern ein Property SupportedElementTypes besitzen, so dass der Workaround wie von @oboyaci beschrieben dann nicht mehr nötig ist.

danke für die Antworten - funktioniert

1 Like