Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top