2010-11-18 8 views
1

Wenn ich in meinem C++ - Code versuche, den ADO-Befehl auszuführen, um Zeilen in eine Tabelle einzufügen, fügt er nur eine bestimmte Anzahl von Zeilen ein. Derselbe Befehl funktioniert gut, wenn Sie System.Data.SqlClient in .NET verwenden.ADO-Befehl tsql Einfügen von Abfrageproblemen

Sql Profiler zeigt die gleichen Textdaten bei Verwendung von ADO oder einem Sqlclient. Unten ist mein insert commandtext, ich bin mir nicht sicher, was ich sonst noch tun soll, um das Problem hier aufzudecken.

Jede Hilfe zu diesem wird geschätzt.

Befehlstext:

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 

Der obige Befehl bei 153 Zeilen endet. Ist das abhängig von der Tabellengröße? Wenn ich den Befehl zweimal hintereinander ausführen lasse, von @i 0 bis 150 und von 150 bis 255, werden alle Zeilen in Ordnung eingefügt. Bin ich ein Limit für den ADO-Befehl execute?

Dies ist meine Verbindungszeichenfolge und der Code, den ich die Verbindung bauen bin mit:

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; 
    } 

Vielen Dank für Ihre Hilfe.

+0

Ich würde vermuten, dass Sie tatsächlich einen fatalen Fehler in der 153. Reihe treffen und aus welchem ​​Grund auch immer, Sie werden nicht benachrichtigt. Ich würde vorschlagen, herauszufinden, was diese Zeile ist und die rohe SQL ausführen. –

+0

Ich habe das gerade versucht und keinen Fehler mit Raw SQL gefunden. Wenn ich die selbe sql verwende und in einem SQL-Client laufe, geht es auch gut. – neblinc1

Antwort

0

Ich habe es funktioniert. Durch das Hinzufügen von "SET NOCOUNT ON" konnte die Einfügung fortgesetzt werden. Nicht sicher, was das Limit in ADO ist.