开发者

OLE DB Bind() Invoke Assert on inserting rows

I am trying to insert data into MS SQL server 2008 using Ole DB. my insert procedure is:

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


    SELECT SCOPE_IDENTITY() as id;
END 

When I call the procedure, it is executed properly. New row is inserted. I use accessor to get new row id:

class DCCRetValueAccessor
{
public:
    __int64 id;

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

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

To execute the procedure and get new row id I use this code:

    CString cmd;
    __int64 newID = -1;

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

    CCo开发者_高级运维mmand<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;

Problem is, that I get ASSERT error in method Bind() after calling GetInterface() in atldbcli.h, Line:6108, expression: GetInterface() != 0.

I cannot see the error. Can you help me please? Thanks


the solution is to add SET NOCOUNT ON; to the procedure like this:

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


  SELECT SCOPE_IDENTITY() as id;
END 
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜