我正在通过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”;
答案 0 :(得分:0)
发现在SQL语句中检查null而不是空字符串可以在不抛出异常的情况下工作。
string sql =“SELECT * FROM [Sheet1 $] WHERE [req_tf_order_no] IS NOT NULL”;