2010-11-16 5 views
0

J'essaie d'insérer des données dans MS SQL Server 2008 en utilisant Ole DB. ma procédure d'insertion est:OLE DB Bind() Invoke Assert lors de l'insertion de lignes

ALTER PROCEDURE [dbo].[table_insert] 
@category as bigint 
AS 
BEGIN 
    INSERT INTO dbo.table 
    (category) 
    VALUES(@category) 


    SELECT SCOPE_IDENTITY() as id; 
END 

Lorsque j'appelle la procédure, elle est exécutée correctement. Nouvelle ligne est insérée. J'utilise accesseur pour obtenir de nouvelles id ligne:

class DCCRetValueAccessor 
{ 
public: 
    __int64 id; 

BEGIN_COLUMN_MAP(DCCRetValueAccessor) 
    COLUMN_ENTRY(1, id) 
END_COLUMN_MAP() 

    void ClearRecord() 
    { 
     memset(this, 0, sizeof(*this)); 
    } 
}; 

Pour exécuter la procédure et obtenir de nouvelles id ligne J'utilise ce code:

CString cmd; 
    __int64 newID = -1; 

    cmd.Format(_T("EXEC [dbo].[alert_settings_insert] @category=%I64d"), value->category); 

    CCommand<CAccessor<DCCRetValueAccessor>> command; 

    if(DC_SUCCEEDED(command.Open(m_session, cmd))) 
    { 
     if(command.MoveFirst() == S_OK) 
     { 
     newID = command.id; 

     } 
     else 
      return -1; 
    } 
    else 
    { 
     LogError(); 
     return -1; 
    } 
    return newID; 

Le problème est que je reçois VALOIR erreur dans la méthode bind() après avoir appelé GetInterface() dans atldbcli.h, Line: 6108, expression: GetInterface()! = 0.

Je ne peux pas voir l'erreur. Pouvez-vous m'aider s'il vous plaît? Merci

Répondre

0

la solution est d'ajouter SET NOCOUNT ON; à la procédure comme ceci:

ALTER PROCEDURE [dbo].[table_insert] 
@category as bigint 
AS 
BEGIN 
    INSERT INTO dbo.table 
    (category) 
    VALUES(@category) 


    SELECT SCOPE_IDENTITY() as id; 
END 
Questions connexes