2010-08-04 7 views
2

d'accéder aux données dans les fichiers .dbf via System.Data.OleDb (vfpoledb.dll). Comment puis-je savoir si la table existe via une commande SQL? Quelque chose de semblable à ce qui suit sur le serveur SQL:Foxpro: Vérifier si la table existe via vfpoledb

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

Répondre

3

Si vous avez un fichier DBC, vous pouvez l'interroger pour voir si la table existe. Mais, en réalité, vous n'avez pas besoin d'une commande sql ou d'un fichier dbc pour obtenir cette information. Vous pouvez l'obtenir directement à partir de OleDbConnection en utilisant la méthode 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; 
} 
+0

Merci pour l'indice sur GetSchema(). –

0

Je ne sais pas comment le faire seulement en utilisant SQL, mais vous pourriez peut-être vérifier l'existence du fichier sur le disque à l'aide du File.Exists Method ou vous pourriez écrire un code pour vérifier l'existence de la DBF en utilisant les classes 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; 
} 

Je n'ai pas essayé de compiler ce code il faudra peut-être un peu tordu.

+0

Thnaks. Je fais quelque chose de similaire maintenant mais je me demande s'il existe une commande SQL pour cela. –

1

De plus, si vous connectez aux tables DBF qui sont des tables « libre » et ne fait pas partie d'une connected « base de données » (.dbc), alors vous pouvez simplement vérifier l'existence du fichier ou non .. Tel que dans C# via

if(File.Exists(PathToTheDatabaseDirectory + TableYouExpect + ".DBF")) 
    file is there 
else 
    file is missing 
Questions connexes