条件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”;