Pergunta

Eu preciso abrir FoxPro tabelas livres em vb.net usando a conexão oledb.

Mas ... eu só preciso obter os nomes das colunas. Eu realmente não precisa 'selecionar' nada. Eu estou tentando navegar de forma dinâmica através de todas as nossas mesas livres e configurar uma lista de cada coluna de cada arquivo e xref que para outra mesa livre que contém uma descrição de cada coluna.

Eu tenho um modelo de trabalho agora, mas isso requer que eu faço ...

SELECT TOP 1 FROM "File" ORDER BY 1

Mas na maior tabela, que leva mais de dois minutos apenas para ler no primeiro registo e há mais de 250 tabelas. Em geral, leva entre 15 e 20 minutos.

Ou existe outra maneira de só obter o primeiro registro da tabela sem usar 'ORDER BY'?

Aqui está o que eu tenho até agora. "File" é passado como um parâmetro.
Seria conter informações como "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)                     

Eu, então, tomar a tabela de dados (dt) e percorrer para obter as informações de coluna.

Eu gostaria que ele seja tão rápido como Visual Studio é quando eu criar um conjunto de dados e carregar todas as tabelas do diretório através do assistente. É capaz de encontrar muito rapidamente todas as informações da coluna sem ler nos dados da tabela.

Deixe-me saber se você precisar de mais informações.

Graças.

Foi útil?

Solução

Por que você precisa para obter todos os registros em tudo? Você deve ser capaz de dizer:

SELECT * FROM "File" where 1 = 0

Isto lhe dará um conjunto de resultados vazio, também lhe dará metadados na projeção retornado.

Você também pode querer olhar para o método GetOleDbSchemaTable na classe OleDbConnection , uma vez que irá permitir-lhe obter informações sobre o esquema do banco de dados sem ter que executar uma consulta.

Você também pode usar o Microsoft ADO Extensions para definição de dados idioma e Segurança através de interoperabilidade cOM (mxADOX.dll) para obter as informações de esquema também.

Outras dicas

Eu não tentei isso /. Mas, parece que o caminho a percorrer.

Especificamente o método "GetSchema" na instância OleDbConnection. http://msdn.microsoft.com/en-us /library/ms254934(VS.80).aspx

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top