GetSchema column names

Discussion of open issues, suggestions and bugs regarding ADO.NET provider for SQLite
Post Reply
ErikEJ
Posts: 1
Joined: Sun 10 Aug 2014 07:07

GetSchema column names

Post by ErikEJ » Sun 10 Aug 2014 07:21

I am trying to use dotConnect Express for SQLite as a drop in replacement for System.Data.SQLite, but having a hard time, as I use the GetSchema columns extensively in my app, and the colum names are completely different - how come?

Pinturiccio
Devart Team
Posts: 2420
Joined: Wed 02 Nov 2011 09:44

Re: GetSchema column names

Post by Pinturiccio » Tue 12 Aug 2014 15:16

The GetSchema("Columns") method of dotConnect for SQLite returns its own column set.

If your application works with column names returned by the System.Data.SQLite provider, you could create a simple function that renames columns in a DataTable object so that they are named as the columns, returned by System.Data.SQLite. No other code changes are required. Here is an example of such a function:

Code: Select all

static void Main(string[] args)
{
    SQLiteConnection conn = new SQLiteConnection("your connection string");
    DataTable dt = GetColumns(conn);
}

static DataTable GetColumns(SQLiteConnection conn)
{
    conn.Open();
    var dt = conn.GetSchema("Columns");
    conn.Close();
    dt.Columns["Catalog"].ColumnName = "TABLE_CATALOG";
    dt.Columns["Schema"].ColumnName = "TABLE_SCHEMA";
    dt.Columns["Table"].ColumnName = "TABLE_NAME";
    dt.Columns["Name"].ColumnName = "COLUMN_NAME";
    dt.Columns["Position"].ColumnName = "ORDINAL_POSITION";
    dt.Columns["HasDefaultValue"].ColumnName = "COLUMN_HASDEFAULT";
    dt.Columns["DefaultValue"].ColumnName = "COLUMN_DEFAULT";
    dt.Columns["Nullable"].ColumnName = "IS_NULLABLE";
    dt.Columns["TypeName"].ColumnName = "DATA_TYPE";
    dt.Columns["CharacterMaximumLength"].ColumnName = "CHARACTER_MAXIMUM_LENGTH";
    dt.Columns["NumericPrecision"].ColumnName = "NUMERIC_PRECISION";
    dt.Columns["NumericScale"].ColumnName = "NUMERIC_SCALE";
    dt.Columns["IsUnique"].ColumnName = "UNIQUE";
    dt.Columns["PrimaryKey"].ColumnName = "PRIMARY_KEY";
    return dt;
}

Post Reply