Pregunta

Necesito abrir tablas libres de foxpro en vb.net utilizando la conexión oledb.

Pero ... solo necesito obtener los nombres de las columnas. Realmente no necesito 'seleccionar' nada. Estoy tratando de navegar dinámicamente a través de todas nuestras tablas libres y configurar una lista de cada columna de cada archivo y xref a otra tabla libre que contiene una descripción de cada columna.

Ahora tengo un modelo de trabajo, pero requiere que lo haga ...

SELECT TOP 1 FROM "File" ORDER BY 1

Pero en la tabla más grande, se tarda más de dos minutos en leer el primer registro y hay más de 250 tablas. En general, tarda entre 15 y 20 minutos.

O, ¿hay otra forma de obtener solo el primer registro de la tabla sin usar 'ORDER BY'?

Esto es lo que tengo hasta ahora. " Archivo " se pasa como parámetro.
Contendría información 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)                     

Luego tomo el datatable (dt) y hago un bucle para obtener la información de la columna.

Me gustaría que fuera tan rápido como Visual Studio cuando creo un conjunto de datos y cargue todas las tablas desde el directorio a través del asistente. Es capaz de encontrar rápidamente toda la información de la columna sin leer los datos de la tabla.

Avísame si necesitas más información.

Gracias.

¿Fue útil?

Solución

¿Por qué necesitas obtener algún registro? Deberías poder decir:

SELECT * FROM "File" where 1 = 0

Esto le dará un conjunto de resultados vacío, también le dará metadatos en la proyección devuelta.

Es posible que también desee buscar en GetOleDbSchemaTable método en OleDbConnection class , ya que le permitirá obtener información sobre el esquema de la base de datos sin tener que realizar una consulta.

También puede usar Extensiones ADO de Microsoft para la definición de datos Idioma y seguridad a través de la interoperabilidad COM (mxADOX.dll) para obtener también la información del esquema.

Otros consejos

No he probado esto /. Pero, parece que el camino a seguir.

Específicamente el " GetSchema " Método en la instancia de OleDbConnection. http://msdn.microsoft.com/en-us /library/ms254934(VS.80).aspx

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top