OdbcConnection.GetSchema("TABLES"); not working

本文关键字:quot not working TABLES OdbcConnection GetSchema | 更新日期: 2023-09-27 18:19:23

我猜不是所有的SQL都是平等创建的。我正在深入研究c#中的dsn和ODBC驱动程序的世界,并尝试了一下。我试图获得由DSN定义的数据库中的所有表,我所知道的是使用transsoft ODBC驱动程序。我可以连接到它并使用代码返回表:

 public void ConnectToData(String dsn)
    {
        System.Data.Odbc.OdbcConnection conn =
            new System.Data.Odbc.OdbcConnection();
        //conn.ConnectionString = "FIL=MS Access;DSN=" + dsn;
        conn.ConnectionString = "DSN=" + dsn; //dsn equals "Company_Shared"
        try
        {
            conn.Open();
            MessageBox.Show("Connected!");
            lstBoxLogs.Items.Add("Connected");                                
            DataTable tableschema = conn.GetSchema("TABLES");
            DataSet set = tableschema.DataSet;  
            // first column name
            for (int i = 0; i < tableschema.Columns.Count; i++)
            {
                lstBoxLogs.Items.Add(tableschema.Columns[i].ColumnName);
            }
            lstBoxLogs.Refresh();
            MessageBox.Show(tableschema.Columns.Count + " tables found");
        }
        catch (Exception ex)
        {
            MessageBox.Show("Failed to connect to data source: " + ex.GetBaseException().Message);
        }
        finally
        {
            conn.Close();
        }
    }

它连接良好,并报告表,但不是表,我知道我在数据库中寻找什么回来是以下内容:

TABLE_QUALIFIERTABLE_OWNERTABLE_NAMETABLE_TYPEREMARKS

我不确定如何从这些信息中获得实际的表名称,所以我可以只是转储每个表中的所有数据(这就是我想要做的)。这是因为我必须仔细研究transsoft数据库使用什么样的SQL,它是否使conn.GetSchema("TABLES");调用无用?

OdbcConnection.GetSchema("TABLES"); not working

这样行吗?

using(DataTable tableschema = conn.GetSchema("TABLES"))
{
    // first column name
    foreach(DataRow row in tableschema.Rows)
    {
        lstBoxLogs.Items.Add(row["TABLE_NAME"].ToString());
    }
}

EDIT:修复了不使用数据集的代码。

EDIT:更新了代码,以便将来的读者实现处置DataTable的最佳实践。