Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 SQL-сервер не существует, или отсутствует доступ.  [new]
На новенького
Guest
По ADOBD подключаюсь к SQL server-у и записываю в таблицу порядка 11000 строк.
Стабильно в диапозоне 7800-7900 строк получаю :
Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL-сервер не существует, или отсутствует доступ.
Бывают сообщение "Время ожидания истекло".
В соответствии с [url=]http://support.microsoft.com/kb/328306/ru[/url] данная проблема возникает при проблемах с DNS или сетью. Если бы было невозможно ни одной вставки в таблицу - то я бы действовал в соответствии с данными рекомендациями и вероятнее всего локализовал бы проблему. Но как лакализовать проблему в моем случае?
Проблема вероятнее всего не в SQL server.
Как лакализовать проблему?
30 окт 09, 12:17    [7861233]     Ответить | Цитировать Сообщить модератору
 Re: SQL-сервер не существует, или отсутствует доступ.  [new]
Glory
Member

Откуда:
Сообщений: 104760
На новенького
По ADOBD подключаюсь к SQL server-у и записываю в таблицу порядка 11000 строк.
Стабильно в диапозоне 7800-7900 строк получаю :

Это в цикле по одной записи ? Да еще в отдельной транзакции ?
30 окт 09, 12:19    [7861250]     Ответить | Цитировать Сообщить модератору
 Re: SQL-сервер не существует, или отсутствует доступ.  [new]
На новенького
Guest
В цикле - да.
В отдельной транзакции-
если все что в одном Recordset-е является отдельной транзакцией - то да.
30 окт 09, 12:33    [7861382]     Ответить | Цитировать Сообщить модератору
 Re: SQL-сервер не существует, или отсутствует доступ.  [new]
Konst_One
Member

Откуда:
Сообщений: 11513
код в студию
30 окт 09, 12:35    [7861395]     Ответить | Цитировать Сообщить модератору
 Re: SQL-сервер не существует, или отсутствует доступ.  [new]
Glory
Member

Откуда:
Сообщений: 104760
На новенького
В цикле - да.
В отдельной транзакции-
если все что в одном Recordset-е является отдельной транзакцией - то да.

Recordset не имеет никакого отношения к командам, которые вы передаете серверу на выполнение
А для массовой заливки данных в таблицы есть другие механизмы.Прежде всего bulkinsert
30 окт 09, 12:35    [7861409]     Ответить | Цитировать Сообщить модератору
 Re: SQL-сервер не существует, или отсутствует доступ.  [new]
Konst_One
Member

Откуда:
Сообщений: 11513
Update замените на UpdateBatch , не забудьте про изменение опций открытия рекордсета для такого варианта работы
30 окт 09, 12:38    [7861430]     Ответить | Цитировать Сообщить модератору
 Re: SQL-сервер не существует, или отсутствует доступ.  [new]
На новенького
Guest
Кусок кода:
Перем СтрПараметрыСоединения;
Перем Con2;

Процедура Выгрузить()
	СтрПараметрыСоединения = "Driver={SQL Server}; Server=ServerName; Database=DatabaseName; UID=UID;PWD=PWD;";
	PC = Соединение1(Con2);
	Запрос = Новй Запрос("Выбрать......");
	Результат = Запрос.Выполнить();
	ВыборкаТабл = Результат.Выгрузить();
	Для каждого Выборка Из ВыборкаТабл Цикл
		Попытка	
			Команда = "Insert Table (KodID,IsMark)values (N'"+Выборка.KodID+"',N'"+Выборка.IsMark)+"')";		
			PC.Open(Команда);
		Исключение
			ТекстФайл.ДобавитьСтроку("Ошибка вставки в таблицу Table");
			ТекстФайл.ДобавитьСтроку(ОписаниеОшибки());
			ТекстФайл.ДобавитьСтроку(Команда);
		КонецПопытки;												 
	КонецЦикла;
КонецПроцедуры
Функция Соединение1(Con2,CursorType=2,LockType=3)     // наш сервер                     
	Если ТипЗнч(Con2) <> Тип(Новый COMОбъект("ADODB.Connection"))Тогда 
		Con2=Новый COMОбъект("ADODB.Connection"); 
	КонецЕсли; 
	// 0=adStateClosed, 1= adStateOpen, 2=adStateConnecting, 4=adStateExecuting, 8=adStateFetching
	Если Con2.State=0 Тогда 
		Попытка
			Con2.Mode=3; // 1=Read, 2=Write, 3=ReadWrite
			Con2.Open(СокрЛП(СтрПараметрыСоединения)); 
			сообщить("соединение с сервером  произошло");
			ТекстФайл.ДобавитьСтроку("соединение с сервером  произошло");
		Исключение 
			сообщить(ОписаниеОшибки());
			ТекстФайл.ДобавитьСтроку("соединение с сервером не произошло");
			ТекстФайл.ДобавитьСтроку(ОписаниеОшибки());
			сообщить("соединение с сервером не произошло");
			ОтправкаУведомления = Истина;
			Возврат 0;
		КонецПопытки;
	КонецЕсли;
	Con2.CommandTimeout=6000;
	Возврат СоздатьОбъектRecordset2(Con2,CursorType,LockType);
КонецФункции //	Соединение1(Con,,);	     
 
Функция СоздатьОбъектRecordset2(Con2,CursorType, LockType) Экспорт
	Т=Новый COMОбъект("ADODB.Recordset");
	Если Con2.State=1 Тогда Т.ActiveConnection=Con2; 
	КонецЕсли;
	Т.CursorLocation=2; // 2=adUseServer, 3=adUseClient 
	Т.CursorType=2;//CursorType; // 0=adOpenForwardOnly, 1=adOpenKeyset, 2=adOpenDynamic, 3=adOpenStatic
	Т.LockType=3;//LockType;  // 1=adLockReadOnly, 2=adLockPessimistic, 3=adLockOptimistic ,4=adLockBatchOptimistic
	Возврат Т;
КонецФункции // СоздатьОбъектRecordset   

bulkinsert не подходит т.к.
"Параметр data_file должен содержать действительный путь с того сервера, на котором запущен SQL Server. Если data_file является удаленным файлом, указывайте имя в формате UNC. "
30 окт 09, 13:05    [7861718]     Ответить | Цитировать Сообщить модератору
 Re: SQL-сервер не существует, или отсутствует доступ.  [new]
Glory
Member

Откуда:
Сообщений: 104760
На новенького


bulkinsert не подходит т.к.
"Параметр data_file должен содержать действительный путь с того сервера, на котором запущен SQL Server. Если data_file является удаленным файлом, указывайте имя в формате UNC. "

Если вы про команду сервера BULK INSERT, то она не имеет отношения к клиентскому bulkinsert-у. Хотя и служит для таких же целей
30 окт 09, 13:07    [7861737]     Ответить | Цитировать Сообщить модератору
 Re: SQL-сервер не существует, или отсутствует доступ.  [new]
Konst_One
Member

Откуда:
Сообщений: 11513
это что за галиматья? примерно так

Dim rs As ADODB.Recordset
Dim cn As ADODB.Connection
Dim i As Long
Dim N As Long


Set cn = New ADODB.Connection
cn.Open "..."

Set rs = New ADODB.Recordset
rs.ActiveConnection = cn

rs.Open SQL, , adOpenKeyset, adLockBatchOptimistic

'1
'апдлейтим
Do While Not rs.EOF
    'апдейтим каждую строку
    rs.Fields(...).Value = ...
    ...
    rs.MoveNext
Loop

'2
'или инсертим

For i = 0 To N

    rs.AddNew
    rs.Fields(...).Value = ...
    ...
    
Next i

rs.UpdateBatch

Set rs = Nothing
Set cn = Nothing
30 окт 09, 13:15    [7861810]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить