首页 > 解决方案 > c#如何清除oledbconnection缓存,多个excel查询报错

问题描述

抱歉标题含糊不清,但我不确定如何最好地表达它。

基本上,我遇到的问题是我最初在 C# 中使用 oledbconnection 来启动与电子表格的连接、查询它并将结果加载到 .net 数据表中。不幸的是,它最多有 255 个字段,而我大约有 600 个。

因此,我所做的是创建了一个数据集并尝试使用单独的查询加载 4 个单独的数据表。现在由于某种原因,对我来说很疯狂的是,如果我加载第一个包含 190 个字段的数据表,然后我继续查询电子表格,如果我超过 250 标记(我有 60左),我收到以下错误:


System.Data.dll 中出现“System.Data.OleDb.OleDbException”类型的异常,但未在用户代码中处理

附加信息:没有为一个或多个必需参数提供值。

如果我将第二个表中的字段数量减少到小于 250,它就可以工作。无论如何,有没有一种方法可以清除 oledbconnection 的缓存,以某种方式删除前 190 个字段或保存 excel 查询结果的任何内容,以便我可以继续下一个?我尝试做一个数据适配器处置,但没有奏效,同样的问题。如果我执行connection.dispose,无论如何我都必须重新初始化连接。有没有办法我仍然可以做到这一点而不必断开连接?下面的代码:

            OleDbConnection cnn = new OleDbConnection(Settings.ExcelCN);

        OleDbCommand fillT1 = new OleDbCommand(Settings.Excel_Proj_Select_1, cnn);
        OleDbCommand fillT2 = new OleDbCommand(Settings.Excel_Proj_Select_2, cnn);
        OleDbCommand fillT3 = new OleDbCommand(Settings.Excel_Proj_Select_3, cnn);
        OleDbCommand fillT4 = new OleDbCommand(Settings.Excel_Proj_Select_4, cnn);
        OleDbCommand updateCnt = new OleDbCommand(Settings.Excel_Update_Count_Select, cnn);

        cnn.Open();
        OleDbDataAdapter adp1 = new OleDbDataAdapter(fillT1);
        OleDbDataAdapter adp2 = new OleDbDataAdapter(fillT2);
        OleDbDataAdapter adp3 = new OleDbDataAdapter(fillT3);
        OleDbDataAdapter adp4 = new OleDbDataAdapter(fillT4);

        DataTable dt1 = new DataTable();
        DataTable dt2 = new DataTable();
        DataTable dt3 = new DataTable();
        DataTable dt4 = new DataTable();

        DataSet ds1 = new DataSet();

        adp1.Fill(dt1);
        ds1.Tables.Add(dt1);

        adp2.Fill(dt2);
        ds1.Tables.Add(dt2);

        adp3.Fill(dt3);
        ds1.Tables.Add(dt3);

        adp4.Fill(dt4);
        ds1.Tables.Add(dt4);

        int rowcount = updateCnt.ExecuteNonQuery();

        cnn.Close();

标签: c#excel

解决方案


推荐阅读