OdbcConnection.GetSchema( “表”);不工作

时间:2012-01-01 20:33:02

标签: c# sql odbc

我猜测并非所有SQL都是同等创建的。我正在深入了解c#中的DSN和ODBC驱动程序的世界,并且有点了解它。我试图获取由DSN定义的数据库中的所有表,我所知道的只是使用Transoft 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_QUALIFIER TABLE_OWNER TABLE_NAME TABLE_TYPE REMARKS

我不知道如何从这些信息中获取实际的表名,所以我可以将所有数据转储到每个表中(这就是我想要做的)。这是因为我必须阅读transoft数据库使用什么类型的SQL并使conn.GetSchema("TABLES");调用无效?

1 个答案:

答案 0 :(得分:4)

这会有用吗?

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

编辑:修复了不使用DataSet的代码。

编辑:更新了未来读者的代码,以实施处置DataTable的最佳做法。