我的任务涉及使用.NET读取SAS .xpt文件。为此,我使用sas.LocalProvider
,这允许我读取.xpt文件。唯一的问题是我需要提供表名,我想从中获取数据。这种方法是不可接受的,因为表名可以变化(尽管文件中只存在一个),用户将不知道该名称。它们是否可以读取.xpt文件中的可用表?或者获得默认的第一张表?我尝试使用OleDbConnection.GetSchema()
,但这没有给我任何关于表格的信息。下面我粘贴了我正在使用的示例代码:
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 :(得分:0)
好的,我明白了。因为SAS xpt文件头是常量我能够使用二进制读取器从它读取表名。每个标题记录有80bytes。表名在6条记录中(计数标题标签记录),前面有8个字节。因此第一个表名称位于字节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();
答案 1 :(得分:0)
最好让它更自动地检索所有可用的表而不是硬编码值等。