You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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文件示例如下:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 17:06:49