Foxpro: Проверьте, существует ли таблица через vfpoledb - PullRequest
2 голосов
/ 05 августа 2010

Я обращаюсь к данным в файлах .dbf через System.Data.OleDb (vfpoledb.dll). Как я могу узнать, существует ли таблица с помощью команды SQL? Что-то похожее на следующее на сервере SQL:

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

Ответы [ 3 ]

3 голосов
/ 05 августа 2010

Если у вас есть файл dbc, вы можете запросить его, чтобы узнать, существует ли таблица.

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;
}

Но на самом деле вам не нужна команда sql или файл dbc для получения этой информации.Вы можете получить его прямо из OleDbConnection, используя метод GetSchema.

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;
}
1 голос
/ 05 августа 2010

Кроме того, если вы подключаетесь к таблицам DBF, которые являются "БЕСПЛАТНЫМИ" таблицами и на самом деле НЕ являются частью подключенной "базы данных" (.dbc), то вы можете просто проверить наличие файла или нет ... Например, в C # через

if( File.Exists( PathToTheDatabaseDirectory + TableYouExpect + ".DBF" ))
   file is there
else
   file is missing
0 голосов
/ 05 августа 2010

Я не знаю, как сделать это только с использованием SQL, но, возможно, вы могли бы проверить наличие файла на диске, используя метод File.Exists , или вы могли бы написать некоторый код для проверки на наличие существование dbf с использованием классов OleDb:

private bool DbfExists(string dbfName, string connectionString)
{
    bool dbfExists = true;

    using(OleDbConnection conn = new OleDbConnection(connectionString))
    {
        string sql = string.Format("SELECT * FROM {0}", dbfName);

        using(OleDbCommand command = new OleDbCommand(sql, conn))
        {
            OleDbDataReader reader = null;

            try
            {
                conn.Open();
                reader = command.ExecuteReader();
            }
            catch(Exception ex)
            {
                dbfExists = false;
            }
            finally
            {
                conn.Close();
                reader = null;
            }
        }
    }

    return dbfExists;
}

Я не пробовал компилировать этот код, поэтому его, возможно, нужно немного подправить.

...