Открыть таблицу FoxPro в VB.net 2005 - PullRequest
4 голосов
/ 07 января 2009

Мне нужно открыть свободные таблицы 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)                     

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

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

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

Спасибо.

Ответы [ 2 ]

6 голосов
/ 08 января 2009

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

SELECT * FROM "File" where 1 = 0

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

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

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

1 голос
/ 08 января 2009

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

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

...