Откройте таблицу FoxPro в VB.net 2005.
-
05-07-2019 - |
Вопрос
Мне нужно открыть бесплатные таблицы foxpro в vb.net, используя соединение oledb.
Но...Мне нужно только получить имена столбцов.Мне действительно не нужно ничего «выбирать».Я пытаюсь динамически просматривать все наши свободные таблицы и настроить список каждого столбца из каждого файла и сделать ссылку на него в другую свободную таблицу, содержащую описание каждого столбца.
Сейчас у меня есть рабочая модель, но для этого требуется, чтобы я...
SELECT TOP 1 FROM "File" ORDER BY 1
Но в самой большой таблице чтение первой записи занимает более двух минут, а таблиц более 250.В целом это занимает от 15 до 20 минут.
Или есть другой способ получить только первую запись таблицы без использования «ORDER BY»?
Вот что у меня есть на данный момент.«Файл» передается как параметр.
Он будет содержать информацию типа «C:\data able1.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, когда я создаю набор данных и загружаю все таблицы из каталога с помощью мастера.Он способен очень быстро найти всю информацию о столбцах, не считывая данные из таблицы.
Дайте мне знать, если вам нужна дополнительная информация.
Спасибо.
Решение
Зачем вообще нужны какие-либо записи?Вы должны быть в состоянии сказать:
SELECT * FROM "File" where 1 = 0
Это даст вам пустой набор результатов, а также метаданные о возвращенной проекции.
Возможно, вы также захотите изучить GetOleDbSchemaTable
метод на OleDbConnection
сорт, так как это позволит вам получить информацию о схеме базы данных без выполнения запроса.
Вы также можете использовать Расширения Microsoft ADO для языка определения данных и безопасности через COM-взаимодействие (mxADOX.dll), чтобы также получить информацию о схеме.
Другие советы
Я не пробовал это/.Но, похоже, это путь.
В частности, метод GetSchema в экземпляре OleDbConnection.http://msdn.microsoft.com/en-us/library/ms254934(VS.80).aspx