条件expression式中的数据types不匹配从Excel文件通过OLEDB

我正在通过ASP.NET页面处理上传的文件。 我正在使用以下连接string:

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

这是SQL语句:

 string sql = "SELECT * FROM [Sheet1$] WHERE [req_tf_order_no] <> ''"; 

这是通过DataReader循环的代码

  using (OleDbConnection connection = new OleDbConnection(connectionString)) { using (OleDbCommand command = connection.CreateCommand()) { command.CommandText = sql; connection.Open(); using (OleDbDataReader reader = command.ExecuteReader()) { if (reader.HasRows) { hasMoreData = reader.Read(); while(hasMoreData) { ... hasMoreData = reader.Read(); if (hasMoreData == false) { break; } } } } 

这里是大部分堆栈跟踪:

 (Error Description: Data type mismatch in criteria expression.) (Stack Trace: at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr) at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) at System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior) at System.Data.OleDb.OleDbCommand.ExecuteReader() at ... 

如果我不包含WHERE子句( WHERE [req_tf_order_no] <> '' ),我不会收到任何错误。 WHERE子句的唯一原因是在input文件中过滤掉已清除但未被删除的行。

我怀疑是导致这个inputExcel文件格式或数据中的东西。 我有一些input文件没有抛出exception,但大部分都是。 是什么导致了这个错误,怎么解决? 有没有更好的方法来完成我想要做的事情? 我可以让用户上传不同的文件格式吗?

编辑发现在SQL语句中检查null而不是空string的工作不会引发exception。

string sql =“SELECT * FROM [Sheet1 $] WHERE [req_tf_order_no] IS NOT NULL”;

发现在SQL语句中检查null而不是空string,没有抛出exception。

string sql =“SELECT * FROM [Sheet1 $] WHERE [req_tf_order_no] IS NOT NULL”;