operadores comandos c# .net excel ado.net oledb

c# - comandos - OLE CALL para Excel con la cláusula WHERE



comandos linq (1)

Estoy trabajando en la reparación de un proyecto de C # que utiliza una hoja de Excel con definición de datos para crear un archivo .fmt utilizado por una inserción masiva en SQL Server.

Mi problema es que los archivos de Excel a veces tienen filas en blanco en la parte inferior y el analizador de C # en el que estoy trabajando detectará un número de filas superior al número real de filas que contienen la definición de datos.

Por lo tanto, el archivo fmt tiene un mayor número de filas en su segunda línea y la inserción masiva arroja una excepción cuando llega al final e intenta leer.

Por ejemplo, solo hay 50 filas con datos y 50 filas en blanco. El archivo fmt tendrá un 100 en su segunda línea (la primera línea es para la versión de SQL Server). Las líneas 3 a 52 son las 50 líneas de definición de datos. Cuando la inserción masiva intenta llegar a la línea 53, devuelve una cantidad de excepción de columna.

El analizador C # usa Ace OleDB 12 para conectarse al archivo de formato Excel 97.

El SQL es:

var commandText = string.Format("SELECT * FROM [{0}$]", SpreadSheetName);

He tratado de agregar una cláusula WHERE al código SQL para seleccionar solo las filas con una columna "A" no vacía, pero esto no funciona.

SELECT * FROM [{0}$] WHERE [A] <> ''''

¿Hay alguna manera de que el texto de comando se pueda mejorar con algún código SQL para extraer solo las filas de datos de Excel donde se cumple una determinada condición?


Si su hoja de cálculo tiene encabezados (no me refiero a los encabezados de las columnas "A", "B", etc. de Excel), puede usarlos en las condiciones. Deberá especificarlo en la cadena de conexión cuando OleDbConnection una instancia de su OleDbConnection .

string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filename + ";Extended Properties=/"Excel 8.0;HDR=YES;/"";

Entonces puedes ejecutar SQL a lo largo de las líneas de

string SQL = "SELECT * FROM [Sheet1$] WHERE [Name] <> ''''";

Si su hoja de cálculo no tiene encabezados, puede utilizar una cláusula WHERE, pero debe hacer referencia a las columnas con "F1", "F2", etc. y establecer su cadena de conexión para no usar encabezados.

string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filename + ";Extended Properties=/"Excel 8.0;HDR=NO;/""; string SQL = "SELECT * FROM [Sheet1$] WHERE [F1] <> ''''"