2017-01-04 6 views
0

DSNを使用してODBC接続を使用していますが、後で操作するためにテーブルと列を取得しようとしています。初期段階で失敗する。問題がGETSCHEMA(「テーブル」は)ので、私はドライバーは良い形になっている、接続が機能することを知っているだけで正常に動作していることであるC#ODBC getSchema( "Tables")は結果を返しますが、getSchema( "Columns")は何も返しません。

OdbcConnection odbcConn = new OdbcConnection("DSN=Ctree;"); 
odbcConn.Open(); 

DataTable tblTables = odbcConn.GetSchema("Tables"); 
foreach (DataRow row in tblTables.Rows) //displays them one at a time (works) 
    MessageBox.Show(row["TABLE_NAME"].ToString()); 

DataTable tblColumns = odbcConn.GetSchema("Columns"); // (why is this empty?) 
foreach (DataRow row in tblColumns.Rows) //lists nothing 
    MessageBox.Show(row["COLUMN_NAME"].ToString() + " : " + row["TABLE_NAME"].ToString()); 

:それは重要な場合、データベースはFairCom C-ツリー(V 6.11)でありますそのデータが存在します。 getSchema( "Columns")が失敗するのはなぜですか?私はまた、データ(数百の列と数千の行)がdb内にあることを知っています。私は迷っている。

思考?

答えて

1

これはFaircom C-Tree SQLで動作しますが、単一のテーブルの列スキーマを取得しようとするとわかりません。

GetSchema()specification of restrictionsを許可します。

あなたが

var restrictions = new string[] { null, "Sales", "SalesPeople" }; 
odbcConn.GetSchema("Columns", restrictions); 
(例えばSales.SalesPeople)だけでなく、スキーマ名を指定する必要があり
var restrictions = new string[] { null, null, "TableName" }; 
odbcConn.GetSchema("Columns", restrictions); 

関連する問題