2010-11-18 22 views
1

Dans mon code C++, lorsque j'essaie d'exécuter la commande ADO pour insérer des lignes dans une table, elle insère uniquement un certain nombre de lignes. La même commande fonctionne bien lors de l'utilisation de System.Data.SqlClient dans .NET. Sql profiler affiche les mêmes données de texte lors de l'utilisation d'ADO ou d'un sqlclient. Ci-dessous est mon texte de commande d'insertion, je ne sais pas quoi faire d'autre pour découvrir le problème ici.Commande ADO tsql insérer des problèmes de requête

Toute aide à ce sujet est appréciée.

texte de commande:

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 

La commande ci-dessus se termine à 153 lignes. Est-ce que cela dépend de la taille de la table? Si j'exécute la commande deux fois consécutivement, l'une allant de @i 0 à 150 et l'autre de 150 à 255, toutes les lignes sont bien insérées. Est-ce que je suis en train d'atteindre une limite sur la commande ADO?

Ceci est ma chaîne de connexion et le code que je utilise pour établir la connexion:

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

Merci pour votre aide.

+0

Je suppose que vous êtes en train de frapper une erreur fatale sur la 153e rangée et pour une raison quelconque, vous n'êtes pas averti. Je suggère de trouver ce que cette ligne est et exécuter le SQL brut. –

+0

Je viens de l'essayer et n'ai pas rencontré d'erreur avec SQL brut. De plus, si j'utilise le même sql et que je cours dans un client SQL, ça va très bien. – neblinc1

Répondre

0

Je l'ai eu du travail. L'ajout de 'SET NOCOUNT ON' a permis à l'insertion de continuer. Je ne sais pas quelle est la limite dans ADO.