2012-03-19 10 views
1

私は、.NETを使用してSAS .xptファイルを読み込む作業があります。そのために私はsas.LocalProviderを使用しています。これにより.xptファイルを読むことができます。唯一の問題は、データを取得するテーブル名を指定する必要があることです。そのアプローチは受け入れられません。なぜなら、テーブル名は変わる可能性があります(ファイルには1つしか存在しません)。ユーザーはその名前について知りません。彼らは.xptファイルで利用可能なテーブルを読み込む方法ですか?または、デフォルトの最初のテーブルを取得しますか?私はOleDbConnection.GetSchema()を使用しようとしましたが、それは私にテーブルに関する情報を与えませんでした。私は私が使用しているサンプルコード貼り付け下:Sasローカルプロバイダーでテーブルを列挙する

var cn = new OleDbConnection(); 
cn.ConnectionString = @"Provider=sas.LocalProvider; Data Source=test.xpt; SAS File Format=XPT"; 
cn.Open(); 
var cmd = cn.CreateCommand(); 
cmd.CommandType = CommandType.; 
cmd.CommandText = "SAS"; 
var oleDa = new OleDbDataAdapter(cmd); 
var ds = new DataSet(); 
oleDa.Fill(ds, "SAS"); 

答えて

0

[OK]を、私はそれが仕事です。 SAS xptファイルのヘッダーは定数なので、バイナリリーダーを使用してテーブル名を読み取ることができました。各ヘッダーレコードには80バイトがあります。テーブル名は、8バイトで構成された6レコード(ヘッダーラベルレコードを数えます)にあります。したがって、最初のテーブル名はバイト408〜415(8バイト長)にあります。 コードのこの小さな作品は、あなたの最初のテーブル名を取得します:

 var streamReader = new FileStream(filePath, FileMode.Open); 
     var buffer = new byte[8]; 
     streamReader.Position = 408; 
     streamReader.Read(buffer, 0, 8); 
     streamReader.Close(); 
0

など、すべての利用可能なテーブルではなく、ハードコードされた値

を取得することがより自動にする方が良いだろう