条件表达式中的数据类型不匹配从Excel文件到OLEDB

时间:2009-11-17 23:07:35

标签: excel oledb

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

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子句的唯一原因是过滤掉输入文件中已清除但未删除的行。

我怀疑输入Excel文件的格式或数据中存在导致此问题的内容。我有一些输入文件没有抛出异常但大多数都没有。导致此错误的原因是什么?有没有更好的方法来完成我想要做的事情?我可以让用户上传不同的文件格式吗?

修改 发现在SQL语句中检查null而不是空字符串可以正常工作而不会抛出异常。

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

1 个答案:

答案 0 :(得分:0)

发现在SQL语句中检查null而不是空字符串可以在不抛出异常的情况下工作。

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