OLE DB Bind () вызывает Assert при вставке строк - PullRequest
0 голосов
/ 16 ноября 2010

Я пытаюсь вставить данные в MS SQL Server 2008, используя Ole DB.Моя процедура вставки:

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


    SELECT SCOPE_IDENTITY() as id;
END 

Когда я вызываю процедуру, она выполняется правильно.Новая строка вставлена.Я использую метод доступа, чтобы получить новый идентификатор строки:

class DCCRetValueAccessor
{
public:
    __int64 id;

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

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

Чтобы выполнить процедуру и получить новый идентификатор строки, я использую этот код:

    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;

Проблема в том, что я получаю ошибку ASSERTМетод Bind () после вызова GetInterface () в atldbcli.h, строка: 6108, выражение: GetInterface ()! = 0.

Я не вижу ошибки.Не могли бы вы мне помочь?Спасибо

1 Ответ

0 голосов
/ 22 ноября 2010

решение состоит в том, чтобы добавить SET NOCOUNT ON ; к процедуре, как это:

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


  SELECT SCOPE_IDENTITY() as id;
END 
...