Откройте таблицу FoxPro в VB.net 2005

Мне нужно открыть бесплатные таблицы foxpro в vb.net, используя соединение oledb.

Но... Мне нужно только получить имена столбцов. Мне действительно не нужно ничего «выбирать». Я пытаюсь динамически просмотреть все наши бесплатные таблицы и настроить список каждого столбца из каждого файла и сделать ссылку на другую свободную таблицу, содержащую описание каждого столбца.

Сейчас у меня есть рабочая модель, но она требует, чтобы я сделал...

SELECT TOP 1 FROM "File" ORDER BY 1

Но в самой большой таблице чтение первой записи занимает более двух минут, а таблиц более 250. В целом, это занимает от 15 до 20 минут.

Или есть другой способ получить только первую запись таблицы без использования «ORDER BY»?

Вот что у меня есть до сих пор. "Файл" передается в качестве параметра.
Он будет содержать такую ​​информацию, как "C:\data\table1.dbf"

Dim filePath As String
filePath = IO.Path.GetDirectoryName(file)
myOledbConnection = New OleDbConnection("Provider=VFPOLEDB.1;Data Source=" & filePath & ";Collating Sequence=MACHINE")
myOledbCommand = New OleDbCommand
myOledbDataAdapter = New OleDbDataAdapter
Dim fields, from, order As String

fields = "select top 1 *"
from = " from " & file
order = " order by 1"

myOledbCommand.CommandText = fields & from & order
myOledbCommand.Connection = myOledbConnection

myOledbDataAdapter.SelectCommand = myOledbCommand
myOledbDataAdapter.Fill(dt)                     

Затем я беру datatable (dt) и прокручиваю, чтобы получить информацию о столбце.

Я хотел бы, чтобы это было так же быстро, как Visual Studio, когда я создаю набор данных и загружаю все таблицы из каталога с помощью мастера. Он может очень быстро найти всю информацию столбца, не считывая данные из таблицы.

Дайте мне знать, если вам нужна дополнительная информация.

Спасибо.


person dna123    schedule 07.01.2009    source источник


Ответы (2)


Зачем вообще нужны какие-то записи? Вы должны быть в состоянии сказать:

SELECT * FROM "File" where 1 = 0

Это даст вам пустой набор результатов, а также даст вам метаданные о возвращенной проекции.

Вы также можете изучить метод GetOleDbSchemaTable в классе OleDbConnection , так как это позволит вам получить информацию о схеме базы данных без выполнения запроса.

Вы также можете использовать расширения Microsoft ADO для языка определения данных и безопасности. через COM-взаимодействие (mxADOX.dll), чтобы также получить информацию о схеме.

person casperOne    schedule 07.01.2009
comment
Спасибо. «Где 1 = 0» сделал это. Я не знал об этом. Sucker побежал faaast сейчас! Я также собираюсь изучить этот метод схемы. - person dna123; 08.01.2009
comment
Просто обновление, что getSchema не то, что мне нужно. Но «Где 1 = 0» есть. Огромное спасибо! - person dna123; 08.01.2009

Я не пробовал это/. Но, похоже, это путь.

В частности, метод GetSchema для экземпляра OleDbConnection. http://msdn.microsoft.com/en-us/library/ms254934(VS.80).aspx

person shahkalpeshp    schedule 07.01.2009
comment
Спасибо за ссылку. Я немного покопаюсь в этом, чтобы увидеть, работает ли это. Я обновлю позже с результатами. - person dna123; 08.01.2009
comment
Использование GetSchema возвращает следующее. (Я не удалял данные) TABLE_CATALOG = '' TABLE_SCHEMA = '' TABLE_NAME = 'msg_seq' TABLE_TYPE = 'TABLE' TABLE_GUID = '' DESCRIPTION = '' TABLE_PROPID = '' DATE_CREATED = '22/12/2008 10:51:42' DATE_MODIFIED = '12.11.2008 9:23:36' - person dna123; 08.01.2009
comment
Извините, что выше некрасиво. Это одинарные кавычки после знака =. Если я правильно выполнил команду getschema, она не будет работать для того, что я хочу. Спасибо за ваше предложение в любом случае!! - person dna123; 08.01.2009