В моем коде на C++, когда я пытаюсь запустить команду ADO для вставки строк в таблицу, она вставляет только определенное количество строк. Эта же команда хорошо работает при использовании System.Data.SqlClient в .NET.ADO command tsql insert query issues
Профайлер Sql показывает те же текстовые данные при использовании ADO или sqlclient. Ниже приведен мой командный текст вставки, я не уверен, что еще нужно сделать, чтобы раскрыть проблему здесь.
Любая помощь на это оценивается.
Command текст:
declare @i int set @i = 1 while (@i < 255)
begin
insert into table1 (name,type, order, state) values (@i, N'type',0,0)
set @i = @i +1
end
Вышеуказанная команда заканчивается в 153 строк. Это зависит от размера таблицы? Если я отправлю команду выполнить дважды, последовательно начиная от @i 0 до 150 и еще от 150 до 255, все строки вставляются в порядке. Я выполняю лимит на выполнение команды ADO?
Это моя строка соединения и код, я использую для создания соединения:
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
ADODB::_ConnectionPtr m_Conn = NULL;
TCHAR connString[255];
_stprintf(connString,
_T("DRIVER=SQL Server;SERVER=np:(local)\\MyInstance;DATABASE=test;"));
HRESULT hr;
hr = m_Conn.CreateInstance(__uuidof(ADODB::Connection));
if (hr != S_OK) {
wprintf(_T("CreateInstance(__uuidof(ADODB::Connection)) failed. Error: %d"), hr);
return 0;
}
m_Conn->ConnectionTimeout = 1800;
m_Conn->CommandTimeout = 1800;
hr = m_Conn->Open((LPCTSTR)connString, _T(""), _T(""),
ADODB::adConnectUnspecified);
if (hr != S_OK) {
wprintf(_T("Open(%ws, '', '', ADODB::adConnectUnspecified) failed."),
connString);
return 0;
}
Спасибо за вашу помощь.
Я бы предположил, что вы на самом деле нападали на фатальную ошибку в 153-й строке, и по какой-то причине вы не получаете уведомление. Я бы предложил найти, что это за строка и запустить сырой SQL. –
Я просто попробовал это и не попал ни в какую ошибку с помощью raw SQL. Кроме того, если я использую тот же sql и запускаю в sql-клиенте, он проходит через штраф. – neblinc1