Search code examples
sqloledbfoxprovisual-foxpro

Foxpro: Check whether table exists via vfpoledb


I access data in .dbf files via System.Data.OleDb (vfpoledb.dll). How can I find out whether table exists via SQL command? Something similar to the following on SQL server:

IF (EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'TheTable'))
BEGIN
    --Do Stuff
END

Solution

  • If you have a dbc file you can query it to see if the table exists.

    string dbc = "northwind.dbc";
    
    using (OleDbConnection conn = new OleDbConnection(connectionString)) {
        DataTable dt = new DataTable();
        string sql = string.Format(@"SELECT * FROM {0} WHERE ALLTRIM(ObjectType) = 'Table' AND UPPER(ALLTRIM(ObjectName)) = '{1}'", dbc, tableName.ToUpper());
        OleDbDataAdapter da = new OleDbDataAdapter(sql, conn);
        da.Fill(dt);
        bool tableExists = dt != null && dt.Rows.Count == 1;
    }
    

    But really you don't need a sql command or a dbc file to get that information. You can get it straight from the OleDbConnection using the GetSchema method.

    using (OleDbConnection conn = new OleDbConnection(connectionString)) {
        conn.Open();
        DataTable tables = conn.GetSchema("Tables");
        conn.Close();
    
        var tableExists = (from row in tables.AsEnumerable()
                            where row.Field<string>("Table_Name").Equals(tableName, StringComparison.CurrentCultureIgnoreCase)
                            select row.Field<string>("Table_Name")).FirstOrDefault() != null;
    }