我的任务涉及使用 .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");
好的,我成功了。因为 SAS xpt 文件头是恒定的,所以我能够使用二进制读取器从中读取表名。每个头记录有80字节。表名共 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();
字符串firstTableName = Encoding.UTF8.GetString(bytes, 0, bytes.Length);
最好能够更自动地检索所有可用的表,而不是硬编码值等。