c# Как очистить кеш oledbconnection, несколько запросов Excel выдавали ошибку - PullRequest
1 голос
/ 12 марта 2020

Извините за смутный заголовок, но я не уверен, как лучше его произнести.

В принципе, проблема, с которой я столкнулся, заключается в том, что я изначально использовал oledbconnection в C#, чтобы инициировать подключиться к электронной таблице, запросить ее и загрузить результаты в таблицу данных. net. К сожалению, он достигает максимум 255 полей, а у меня около 600.

Итак, вместо этого я создал набор данных и попытался загрузить 4 отдельные таблицы данных с отдельными запросами. Теперь по какой-то причине, что для меня безумно, если я загружу, скажем, первую таблицу данных с 190 полями, а затем я go снова, чтобы запросить электронную таблицу, если я go превышает эту отметку 250 (которую я осталось 60), я получаю следующую ошибку:


Исключение типа 'System.Data.OleDb.OleDbException' произошло в System.Data.dll, но не было обработано в коде пользователя

Дополнительная информация: для одного или нескольких обязательных параметров не задано значение.

Если я уменьшу количество полей во второй таблице до значения меньше 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...