2012-01-01 4 views
1

私は、すべてのSQLが同じように作成されているわけではないと推測しています。私はC#でDSNやODBCドライバの世界に飛び込んでいます。ちょっとしたことがあります。私はそれがTransoft ODBCドライバを使用していることを知っているDSNによって定義されているデータベースのすべてのテーブルを取得しようとしています。私はそれに接続して、コードを使用して表を取り戻すことができます。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

私は私ができるJこの情報から実際のテーブル名を取得する方法がわからないですすべてのデータをすべてのテーブルにダンプしないでください(これは私がやりたいことです)。これは、私がどのような種類の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()); 
    } 
} 

EDIT:は、DataSetを使用しないようにコードを修正しました。

編集:DataTableの処分のベストプラクティスを将来の読者が実装できるようにコードを更新しました。

+0

あなたは男の感謝です!今私は理想的には、foreachではselect *行["TABLE_NAME"]を実行し、各テーブルからデータを取得してディスクに書き出すことができます。ありがとう! – Codejoy

関連する問題