使用WHERE子句的OLE CALL到Excel

我正在修复一个C#项目,该项目使用带有数据定义的Excel工作表来创buildSQL Server中批量插入所使用的.fmt文件。

我的问题是,Excel文件有时底部有空白行,我正在处理的C#parsing器将检测到的行数超过实际行数的containsint数据定义。

因此,fmt文件在其第二行具有较大数量的行,批量插入到达底部并尝试读取时会引发exception。

例如,只有50行数据和50空白行。 fmt文件的第二行有100(第一行是SQL Server版本)。 第3行到第52行是数据定义的50行。 批量插入尝试到达第53行时,它会返回一些列exception。

C#parsing器使用Ace OleDB 12连接到Excel 97格式文件。

SQL是:

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

我试图添加一个WHERE子句的SQL代码,只select非空的“A”列的行,但这是行不通的。

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

有没有一种方法可以通过某些SQL代码来增强命令文本,以仅在符合某些条件的情况下从Excel中提取数据行?

如果您的电子表格包含标题(我不是指Excel的“A”,“B”等列标题),那么您可以在条件中使用这些标题。 实例化OleDbConnection时,需要在连接string中指定它。

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

然后你可以按照下面的方法执行SQL

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

如果您的电子表格中没有标题,您仍然可以使用WHERE子句,但是您必须通过“F1”,“F2”等参照列,并将连接string设置为不使用标题

 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] <> ''"