C# 在使用SQL(ADO)将Excel拉入C时,如何排除空行而不排除空单元格?

C# 在使用SQL(ADO)将Excel拉入C时,如何排除空行而不排除空单元格?,c#,sql,excel,null,ado,C#,Sql,Excel,Null,Ado,我有一个类似以下的问题: SELECT * FROM OPENROWSET('MSDASQL', 'Driver={Microsoft Excel Driver (*.xls)};DBQ=D:\test.xls','SELECT * FROM Sheet1$]') 这将返回所有行,如果它们曾经被编辑然后被删除,则这些行都是空的。我想排除这些,但仍然包括具有良好数据但可能为空单元格的行 我的第一反应是在每一列都不为NULL的情况下进行排序,如下所示: SELECT * FROM OPENROWSE

我有一个类似以下的问题:

SELECT * FROM OPENROWSET('MSDASQL', 'Driver={Microsoft Excel Driver (*.xls)};DBQ=D:\test.xls','SELECT * FROM Sheet1$]') 这将返回所有行,如果它们曾经被编辑然后被删除,则这些行都是空的。我想排除这些,但仍然包括具有良好数据但可能为空单元格的行

我的第一反应是在每一列都不为NULL的情况下进行排序,如下所示:

SELECT * FROM OPENROWSET('MSDASQL', 'Driver={Microsoft Excel Driver (*.xls)}; DBQ=D:\test.xls', 'SELECT * FROM Sheet1$]') WHERE ( Col1 IS NOT NULL AND Col2 IS NOT NULL AND Col3 IS NOT NULL AND Col4 IS NOT NULL ) 这有效地消除了空行,但出于某种原因,也消除了Col4具有空条目的行。我试过在WHERE子句中使用parens和不使用parens

有没有人知道我可能做错了什么,或者有没有人建议我可以用另一种方法来达到同样的效果

这目前正在使用ADO在C中实现,但我正在使用SQLServerManagementStudio 2008测试查询

WHERE 
(
  Col1 IS NOT NULL 
  OR Col2 IS NOT NULL 
  OR Col3 IS NOT NULL 
  OR Col4 IS NOT NULL 
)

其中CoalesceCol1、Col2、Col3、Col4不为NULL oledb/excel没有coalesce函数


其中CoalesceCol1,Col2,Col3,Col4不为空oledb/excel没有coalescecol函数

Ok…所以我意识到我可以在C代码中实现这一点。我仍然认为这是来自SQL的奇怪行为,所以我想看看答案或想法,看看为什么这在SQL中不能像预期的那样工作。好吧……所以我意识到我可以在C代码中做到这一点。我仍然认为这是SQL中奇怪的行为,所以我想看看关于为什么这在SQL中不能按预期工作的答案或想法。因为这是或,它不排除只有一列为null的行吗?这是我不想做的事。不,它将包括那一行。想象一下,好像只有第一部分col1不为null。这将只显示col1有值的行。如果col1为null,而col2为null,则跳过该行。所以您需要允许col1或col2为null,但不能同时为两者。依此类推。因为这是OR'd,所以它不排除只有一列为null的行吗?这是我不想做的事。不,它将包括那一行。想象一下,好像只有第一部分col1不为null。这将只显示col1有值的行。如果col1为null,而col2为null,则跳过该行。所以您需要允许col1或col2为null,但不能同时为两者。等等