2012-01-01 17 views
1

我猜測並非所有的SQL都是平等創建的。我深入到c#中的DSN和ODBC驅動程序的世界,並且有一點點關注。我試圖獲取由DSN定義的數據庫中的所有表,我知道它使用的是Transoft ODBC驅動程序。我可以連接到它,並使用代碼找回表:OdbcConnection.GetSchema(「TABLES」);不工作

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

我不知道如何從這些信息,以便我可以Ĵ得到實際的表名ust轉儲每個表中的所有數據(這是我想要做的)。這是因爲我必須瞭解一個transoft數據庫使用什麼樣的SQL,並且它是否使conn.GetSchema("TABLES");調用無用?

回答

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的最佳做法。

+0

你是男人謝謝!現在我理想的是,在那個foreach中,我只需要在行[「TABLE_NAME」]上執行select *,並從每個表中獲取數據並將其寫入磁盤。謝謝! – Codejoy 2012-01-01 21:17:16