c#如何清除OLEDB连接缓存,多个excel查询出错

c#如何清除OLEDB连接缓存,多个excel查询出错,c#,excel,C#,Excel,很抱歉标题含糊不清,但我不知道该怎么说才好 基本上,我遇到的问题是,我最初使用C#中的oledbconnection启动到电子表格的连接,查询它,并将结果加载到.net数据表中。不幸的是,它的最大值是255个字段,我有大约600个字段 因此,我所做的是创建一个数据集,并尝试用单独的查询加载4个单独的数据表。现在出于某种原因,让我疯狂的是,如果我加载第一个包含190个字段的数据表,然后我继续再次查询电子表格,如果超过250分(剩下60分),我会得到以下错误: System.Data.dll中发生

很抱歉标题含糊不清,但我不知道该怎么说才好

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

因此,我所做的是创建一个数据集,并尝试用单独的查询加载4个单独的数据表。现在出于某种原因,让我疯狂的是,如果我加载第一个包含190个字段的数据表,然后我继续再次查询电子表格,如果超过250分(剩下60分),我会得到以下错误:


System.Data.dll中发生“System.Data.OleDb.OledBeException”类型的异常,但未在用户代码中处理

附加信息:没有为一个或多个必需参数提供值。 但是,如果我将第二个表中的字段数量减少到小于250,则它会起作用。无论如何,有没有一种方法可以让我以某种方式清除OLEDB连接的缓存,以某种方式删除前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();

按顺序构造、使用和处理数据适配器有效吗?我可以试着试一试。-事实上不,我没有试过,不幸的是,同样的问题。也许这可以作为你的答案:这看起来确实很奇怪。我看到的代码没有明显的错误。您不想只使用多个连接有什么原因吗?太慢了?@Zer0我只是觉得重复打开一个连接不止一次是不好的做法。我可能不得不尝试一下。按顺序构建、使用和处理数据适配器是否有效?我可以试着试一试。-事实上不,我没有试过,不幸的是,同样的问题。也许这可以成为你的答案:这看起来确实很奇怪。我看到的代码没有明显的错误。您不想只使用多个连接有什么原因吗?太慢了?@Zer0我只是觉得重复打开一个连接不止一次是不好的做法。我可能得试试。