2010-11-18 5 views
1

В моем коде на 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; 
    } 

Спасибо за вашу помощь.

+0

Я бы предположил, что вы на самом деле нападали на фатальную ошибку в 153-й строке, и по какой-то причине вы не получаете уведомление. Я бы предложил найти, что это за строка и запустить сырой SQL. –

+0

Я просто попробовал это и не попал ни в какую ошибку с помощью raw SQL. Кроме того, если я использую тот же sql и запускаю в sql-клиенте, он проходит через штраф. – neblinc1

ответ

0

У меня есть работа. Добавление «SET NOCOUNT ON» позволило продолжить вставку. Не уверен, что предел в ADO.