Перечисление таблиц с локальным провайдером Sas - PullRequest
1 голос
/ 19 марта 2012

У меня есть задача, связанная с чтением файлов SAS .xpt с использованием .NET.Для этого я использую 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");

Ответы [ 2 ]

0 голосов
/ 12 июня 2013

Было бы лучше сделать его более автоматическим для получения всех доступных таблиц, а не жестко закодированных значений и т. Д.

0 голосов
/ 23 марта 2012

Хорошо, у меня все получилось. Поскольку заголовок файла 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...