Yes, there is one:
public static DataTable GetColumns(SQLiteConnection cn)
{
using (SQLiteCommand tablesCmd = new SQLiteCommand("select name from sqlite_master where type='table' or type='view'", cn))
{
DataTable columnsDataTable = new DataTable();
columnsDataTable.Columns.Add("TableName", typeof(string));
columnsDataTable.Columns.Add("ColumnName", typeof(string));
columnsDataTable.BeginLoadData();
using (IDataReader reader = tablesCmd.ExecuteReader())
{
while (reader.Read())
{
string tableName = reader.GetString(0);
using (SQLiteCommand selectCmd = new SQLiteCommand("select * from " + tableName, cn))
{
using (IDataReader selectReader = selectCmd.ExecuteReader(CommandBehavior.SchemaOnly))
{
for (int index = 0; index < selectReader.FieldCount; index++)
{
DataRow row = columnsDataTable.NewRow();
row["TableName"] = tableName;
row["ColumnName"] = selectReader.GetName(index);
columnsDataTable.Rows.Add(row);
}
}
}
}
}
columnsDataTable.EndLoadData();
columnsDataTable.AcceptChanges();
return columnsDataTable;
}
}
It is much faster than SQLiteConnection.GetSchema("Columns"). I tested it using a modified version of Northwind database, and these are the results: