У меня большой файл Excel (530K строк с большим количеством столбцов).Получается 247 МБ в формате .xlsb.Я пытаюсь импортировать в SQL Server с помощью BulkCopy в C #, однако у меня возникают проблемы, когда у накопителя данных заканчивается нехватка памяти, прежде чем он даже начинает читать файл, как только я запускаю команду ExecuteReader ().
string exlConnString = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={_filepath};Extended Properties=\"Excel 12.0;HDR=YES;\"";
string sqlQuery = $"SELECT * FROM [{SheetName}]";
using OleDbConnection conn = new OleDbConnection(_connstring)) {
OleDbCommand exlCmd = new OleDbCommand(sqlQuery, conn)
conn.Open();
OleDbDataReader dr = exlcmd.ExecuteReader(); <---NEVER GETS PAST THIS LINE BEFORE RUNNING OUT OF MEMORY.
SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnString);
bulkCopy.DestinationTable = TableName;
while(dr.Read()) {
bulkcopy.WriteToServer(dr);
}
dr.Close();
}
Я работаю в режиме x86, потому что я получаю сообщение об ошибке, что База данных ACE не установлена на моем локальном компьютере, и ограничения корпоративной политики не позволяют мне загрузить и установить необходимый файл для запуска его в режиме x64.
Код прекрасно работает, когда я тестирую его на файлах меньшего размера, но не когда я тестирую его на этом файле большего размера, так что это определенно размер файла, вызывающий проблему.Любые предложения или помощь будут оценены.Не имеет большого смысла, что массовая копия исчерпывает память, когда она предназначена для обработки больших наборов данных, что также означает, что размер файла также будет большим ...
И да,Я знаю, что ДОЛЖЕН быть в состоянии импортировать это, используя OPENROWSET или OPENDATASOURCE в SQL Server, но ЭТО ТАКЖЕ выключено, и они не будут включать его, так что это не вариант.