代码之家  ›  专栏  ›  技术社区  ›  Lukas Cenovsky

Foxpro:通过vfpoledb检查表是否存在

  •  2
  • Lukas Cenovsky  · 技术社区  · 14 年前

    我通过访问.dbf文件中的数据 System.Data.OleDb

    IF (EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'TheTable'))
    BEGIN
        --Do Stuff
    END
    
    3 回复  |  直到 14 年前
        1
  •  3
  •   Tom Brothers    14 年前

    如果您有一个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;
    }
    

    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;
    }
    
        2
  •  1
  •   DRapp    14 年前

    另外,如果您连接到的DBF表是“自由”表,而不是实际连接的“数据库”(.dbc)的一部分,那么您可以检查文件是否存在。。。比如C#via

    if( File.Exists( PathToTheDatabaseDirectory + TableYouExpect + ".DBF" ))
       file is there
    else
       file is missing
    
        3
  •  0
  •   DaveB    14 年前

    我不知道如何只使用SQL,但也许你可以使用 File.Exists Method 或者可以编写一些代码,使用OleDb类检查dbf是否存在:

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

    我还没有试过编译这段代码,所以它可能需要调整一点。