2010-11-18 334 views
1

在我的C++代碼中,當我嘗試運行ADO命令將行插入到表中時,它只插入一定數量的行。在.NET中使用System.Data.SqlClient時,同樣的命令效果很好。ADO命令tsql插入查詢問題

當使用ADO或sqlclient時,Sql profiler顯示相同的文本數據。下面是我的insert commandtext,我不知道還有什麼辦法來解決這個問題。

對此的任何幫助表示讚賞。

命令文本:

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。 – 2010-11-18 19:12:43

+0

我只是試過,並沒有用原始SQL命中任何錯誤。另外,如果我使用相同的SQL並在SQL客戶端運行,它會通過罰款。 – neblinc1 2010-11-18 19:18:07

回答

0

我明白了。添加'SET NOCOUNT ON'允許插入繼續。不知道ADO中的限制是什麼。