C#读取Excel至DataTable时程序冻结崩溃求助
Excel读取时程序冻结崩溃问题
我不清楚自己哪里操作有误,尝试了多种方式都失败了,现在卡在以下代码版本:代码编译正常,但读取Excel文件时程序会冻结并崩溃(注:我不介意实现方式,有更好建议也可以提)。
string filePath = string.Empty; string fileExt = string.Empty; OpenFileDialog file = new OpenFileDialog(); //打开选择文件对话框 if (file.ShowDialog() == System.Windows.Forms.DialogResult.OK) //如果用户选择了文件 { filePath = file.FileName; //获取文件路径 fileExt = Path.GetExtension(filePath); //获取文件扩展名 if (fileExt.CompareTo(".xls") == 0 || fileExt.CompareTo(".xlsx") == 0) { try { string sSheetName = null; string sConnection = null; DataTable dtTablesList = default(DataTable); OleDbCommand oleExcelCommand = default(OleDbCommand); OleDbDataReader oleExcelReader = default(OleDbDataReader); OleDbConnection oleExcelConnection = default(OleDbConnection); sConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + @";Extended Properties='Excel 12.0;HDR=NO;IMEX=1;'"; oleExcelConnection = new OleDbConnection(sConnection); oleExcelConnection.Open(); dtTablesList = oleExcelConnection.GetSchema("Tables"); if (dtTablesList.Rows.Count > 0) { sSheetName = dtTablesList.Rows[0]["TABLE_NAME"].ToString(); } dtTablesList.Clear(); dtTablesList.Dispose(); if (!string.IsNullOrEmpty(sSheetName)) { oleExcelCommand = oleExcelConnection.CreateCommand(); oleExcelCommand.CommandText = "Select * From [" + sSheetName + "]"; oleExcelCommand.CommandType = CommandType.Text; oleExcelReader = oleExcelCommand.ExecuteReader(); int nOutputRow = 0; while (oleExcelReader.Read()) { } oleExcelReader.Close(); } oleExcelConnection.Close();
我的任务很简单:读取一个仅含两列、多行的Excel文件并将其存入DataTable,文件中不同分类下包含编号和标题,后续我计划编写算法读取DataTable并按分类生成对应的字典。Excel文件示例如下:
编辑补充:程序崩溃时无法捕获任何异常,以下是Visual Studio调试器的错误与警告信息:
System.Windows.ResourceDictionary 警告: 9 : 未找到资源; ResourceKey='ClientAreaBackgroundBrush' System.Windows.ResourceDictionary 警告: 9 : 未找到资源; ResourceKey='ClientAreaForegroundBrush' System.Windows.ResourceDictionary 警告: 9 : 未找到资源; ResourceKey='ClientAreaForegroundBrush' System.Windows.ResourceDictionary 警告: 9 : 未找到资源; ResourceKey='Common-SavedSelections' System.Windows.ResourceDictionary 警告: 9 : 未找到资源; ResourceKey='Common-RuleBasedFilters' System.Windows.ResourceDictionary 警告: 9 : 未找到资源; ResourceKey='ActiveTabBackgroundBrush' System.Windows.ResourceDictionary 警告: 9 : 未找到资源; ResourceKey='ClientAreaBackgroundBrush' System.Windows.ResourceDictionary 警告: 9 : 未找到资源; ResourceKey='ClientAreaForegroundBrush' System.Windows.ResourceDictionary 警告: 9 : 未找到资源; ResourceKey='ClientAreaForegroundBrush' System.Windows.ResourceDictionary 警告: 9 : 未找到资源; ResourceKey='ActiveTabBackgroundBrush' System.Windows.ResourceDictionary 警告: 9 : 未找到资源; ResourceKey='ClientAreaBackgroundBrush' System.Windows.ResourceDictionary 警告: 9 : 未找到资源; ResourceKey='ClientAreaForegroundBrush' System.Windows.ResourceDictionary 警告: 9 : 未找到资源; ResourceKey='ClientAreaForegroundBrush' System.Windows.ResourceDictionary 警告: 9 : 未找到资源; ResourceKey='ClientAreaBackgroundBrush' System.Windows.ResourceDictionary 警告: 9 : 未找到资源; ResourceKey='ClientAreaBackgroundBrush' System.Windows.ResourceDictionary 警告: 9 : 未找到资源; ResourceKey='ClientAreaBackgroundBrush' System.Windows.ResourceDictionary 警告: 9 : 未找到资源; ResourceKey='ClientAreaBackgroundBrush' System.Windows.ResourceDictionary 警告: 9 : 未找到资源; ResourceKey='ClientAreaBackgroundBrush' System.Windows.ResourceDictionary 警告: 9 : 未找到资源; ResourceKey='ClientAreaBackgroundBrush' System.Windows.ResourceDictionary 警告: 9 : 未找到资源; ResourceKey='ClientAreaBackgroundBrush' System.Windows.Data 错误: 4 : 无法找到引用 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.Primitives.Track', AncestorLevel='1'' 的绑定源。BindingExpression:(无路径); DataItem=null; 目标元素是 'DoubleAnimation' (HashCode=66916835); 目标属性是 'Target' (类型 'DependencyObject') System.Windows.Data 错误: 4 : 无法找到引用 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.Primitives.Track', AncestorLevel='1'' 的绑定源。BindingExpression:(无路径); DataItem=null; 目标元素是 'DoubleAnimation' (HashCode=65380607); 目标属性是 'Target' (类型 'DependencyObject') System.Windows.Data 错误: 4 : 无法找到引用 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.Primitives.Track', AncestorLevel='1'' 的绑定源。BindingExpression:(无路径); DataItem=null; 目标元素是 'DoubleAnimation' (HashCode=51554558); 目标属性是 'Target' (类型 'DependencyObject') System.Windows.Data 错误: 4 : 无法找到引用 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.Primitives.Track', AncestorLevel='1'' 的绑定源。BindingExpression:(无路径); DataItem=null; 目标元素是 'DoubleAnimation' (HashCode=61337839); 目标属性是 'Target' (类型 'DependencyObject') System.Windows.Data 错误: 4 : 无法找到引用 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.Primitives.Track', AncestorLevel='1'' 的绑定源。BindingExpression:(无路径); DataItem=null; 目标元素是 'DoubleAnimation' (HashCode=15169645); 目标属性是 'Target' (类型 'DependencyObject') System.Windows.Data 错误: 4 : 无法找到引用 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.Primitives.Track', AncestorLevel='1'' 的绑定源。BindingExpression:(无路径); DataItem=null; 目标元素是 'DoubleAnimation' (HashCode=2309080); 目标属性是 'Target' (类型 'DependencyObject') System.Windows.Data 错误: 4 : 无法找到引用 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.Primitives.Track', AncestorLevel='1'' 的绑定源。BindingExpression:(无路径); DataItem=null; 目标元素是 'DoubleAnimation' (HashCode=20781721); 目标属性是 'Target' (类型 'DependencyObject') System.Windows.Data 错误: 4 : 无法找到引用 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.Primitives.Track', AncestorLevel='1'' 的绑定源。BindingExpression:(无路径); DataItem=null; 目标元素是 'DoubleAnimation' (HashCode=52817761); 目标属性是 'Target' (类型 'DependencyObject') System.Windows.Data 错误: 4 : 无法找到引用 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.Border', AncestorLevel='3'' 的绑定源。BindingExpression:Path=ActualHeight; DataItem=null; 目标元素是 'ContentPresenter' (名称=''); 目标属性是 'NoTarget' (类型 'Object') 线程 0x3d9c 已退出,代码为 0 (0x0)。 线程 0x9358 已退出,代码为 0 (0x0)。 线程 0x8598 已退出,代码为 0 (0x0)。 线程 0xab5c 已退出,代码为 0 (0x0)。 线程 0x6aa0 已退出,代码为 0 (0x0)。 线程 0xb934 已退出,代码为 0 (0x0)。 线程 0x3f6c 已退出,代码为 0 (0x0)。 线程 0xb1fc 已退出,代码为 0 (0x0)。 线程 0x8898 已退出,代码为 0 (0x0)。 线程 0x679c 已退出,代码为 0 (0x0)。 线程 0xb04c 已退出,代码为 0 (0x0)。 线程 0x3320 已退出,代码为 0 (0x0)。 线程 0x523c 已退出,代码为 0 (0x0)。 线程 0x3a40 已退出,代码为 0 (0x0)。 线程 0x91dc 已退出,代码为 0 (0x0)。 线程 0x2ccc 已退出,代码为 0 (0x0)。 线程 0x8cac 已退出,代码为 0 (0x0)。 线程 0xb518 已退出,代码为 0 (0x0)。 线程 0x70a8 已退出,代码为 0 (0x0)。 线程 0x32e4 已退出,代码为 0 (0x0)。 线程 0xad18 已退出,代码为 0 (0x0)。 线程 0xa8ec 已退出,代码为 0 (0x0)。 线程 0x181c 已退出,代码为 0 (0x0)。 线程 0x5b64 已退出,代码为 0 (0x0)。 线程 0x8a24 已退出,代码为 0 (0x0)。 线程 0x971c 已退出,代码为 0 (0x0)。 线程 0x3880 已退出,代码为 0 (0x0)。 线程 0x7b68 已退出,代码为 0 (0x0)。 线程 0x7e80 已退出,代码为 0 (0x0)。 线程 0x914c 已退出,代码为 0 (0x0)。 线程 0x48f0 已退出,代码为 0 (0x0)。 线程 0x858c 已退出,代码为 0 (0x0)。 线程 0xb228 已退出,代码为 0 (0x0)。 线程 0xb654 已退出,代码为 0 (0x0)。 线程 0xb8a4 已退出,代码为 0 (0x0)。 线程 0x7ad0 已退出,代码为 0 (0x0)。 线程 0xb628 已退出,代码为 0 (0x0)。 线程 0x86f0 已退出,代码为 0 (0x0)。 线程 0xa128 已退出,代码为 0 (0x0)。 线程 0xbb38 已退出,代码为 0 (0x0)。 线程 0x7ab4 已退出,代码为 0 (0x0)。 'Revit.exe' (CLR v4.0.30319: 默认域): 已加载 'C:\Windows\Microsoft.Net\assembly\GAC_64\System.Transactions\v4.0_4.0.0.0__b77a5c561934e089\System.Transactions.dll'。已跳过加载符号。模块已优化,且已启用调试器选项“仅我的代码”。 程序 '[42560] Revit.exe' 已退出,代码为 3221226525 (0xc000041d)。
内容的提问来源于stack exchange,提问作者wee hee
相关产品推荐
相关产品推荐

