System resource exceeded

Sergey Molchanov
Дата: 16.05.2006 16:41:10
Всем привет!
Создаю OleDbConnection со строкой
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=путь;Extended Properties=dBASE III;User ID=Admin;Password=
Затем OleDbCommand с режимом CommandType = TableDirect
Далее как обычно ExecuteReader(), чтение ридера от начала до конца, затем ридер закрывается, и закрывается соединение.
Это все работает в цикле. Грабли в том, что все работает ровно 1041 раз, затем при попытке выполнения ExecuteReader() вылетает исключение "System resource exceeded". И ридер, и конекшн в конце закрывается, что ж еще остается висеть?!
Sergey Molchanov
Дата: 16.05.2006 19:09:58
Ха! Тот же прикол наблюдается и с драйвером {Microsoft dBase Driver (*.dbf)}
И даже более того. Я создал файл 1.js, наполнил его следующим содержимым:
for (var i = 0; i <= 2000; i++)
{
	var Con = WScript.CreateObject("ADODB.Connection");
	Con.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=путь;Extended Properties=dBASE III;User ID=Admin;Password=");
	var Query = WScript.CreateObject("ADODB.RecordSet");
	Query.ActiveConnection = Con;
	Query.Open("SELECT поля FROM таблица");
	for (; !Query.Eof; Query.moveNext())
	{
	}
	Query.Close();
	Query = null;
	Con.Close();
	Con = null;
	if (!(i % 100))
	{
		WScript.Echo(i);
	}
}
И тот же "прикол". Так сказать, даже не доходя до использования дотНЕТа. Простите, что отошел от темы форума. Так что проблема не в НЕТе, а в самих OLE DB-драйверах... Неужели это неизлечимо? Или я упустил какой-то ньюанс?
Sergey Ch
Дата: 17.05.2006 09:32:17
Sergey Molchanov
... Неужели это неизлечимо? Или я упустил какой-то ньюанс?

Всегда использовал MS VFP Ole DB provider - никогда с подобными ограничениями не сталкивался... Может есть смысл попробовать?
Sergey Molchanov
Дата: 17.05.2006 11:48:15
Да, проблем нет. Я фокспрошные драйвера в самом начале исключил из рассмотрения, так как они не входят в состав операционки и последнего MDACа, их надо ставить отдельно :( Поэтому я и уперся рогами в глючные драйвера. Простите меня за излишнюю капризность...
Но в целях спортивного интереса я только что вернулся к фокспрошным драйверам.
Поставил цикл на 10000 оборотов и испробовал следующие драйвера:
{Microsoft FoxPro VFP Driver (*.dbf)}
{Microsoft dBase VFP Driver (*.dbf)}
{Microsoft Visual FoxPro Driver}
Потом залез в реестр и увидел, что эти три драйвера - на самом деле один и тот же драйвер, имеющий несколько синонимов :)
Все супер - память не жрет, работает - ну на порядок быстрее, даже нечего сравнивать.
Кстати, прикол: драйвер с именем {Microsoft Visual FoxPro Driver} якобы существует в операционке с самого начала ее установки, но на самом деле там стоит заглушка, которая при попытке поюзать драйвер посылает на... (нет, не туда :) ) сайт майкрософта с просьбой выкачать полноценный драйвер. Ужос...
Итог: вот сейчас сижу и думаю, что делать:
1. Таки ждать чуда, и вдруг найдется методика работы с глючными драйверами, обходящая их глючность.
2. Перестать упираться рогами (вообще спилить их), перейти на фокспрошные драйвера и не париться. Но при этом зарубить себе на носу, что со своей программой драйвера нужно доставлять.
3. Плюнуть на все и написать класс, читающий DBF как двоичный файл и сам разбирающий его содержимое (благо, функциональность SQL не нужна, единственная потребность - прочитать весь файл и перегнать его в Oracle). И пошло все... гулять :)
winsky!
Дата: 17.05.2006 14:30:07
угу. третий вариант впечатляет (сравните к-во кода для 3 и 2 вариантов)
я бы выбрал второй, насчет рогов
Sergey Molchanov
Дата: 17.05.2006 15:40:37
Та ладно, не так уж и много кода получилось :)
Это нормальные люди выбрали бы второй путь, а я как извращенец все-таки решил пойти по третьему. Вроде ничего так вышло... Теперь я свободен, как птица в полете, а все драйвера пусть товарисч Гейтс засунет себе ...(цензура) :)