Sql server OLE DB Bind()在插入行时调用断言
我正在尝试使用Ole DB将数据插入MS SQL server 2008。我的插入程序是:Sql server OLE DB Bind()在插入行时调用断言,sql-server,binding,oledb,assert,Sql Server,Binding,Oledb,Assert,我正在尝试使用Ole DB将数据插入MS SQL server 2008。我的插入程序是: ALTER PROCEDURE [dbo].[table_insert] @category as bigint AS BEGIN INSERT INTO dbo.table (category) VALUES(@category) SELECT SCOPE_IDENTITY() as id; END 当我调用该过程时,它被正确执行。插入新行。我使用访问器获取新行i
ALTER PROCEDURE [dbo].[table_insert]
@category as bigint
AS
BEGIN
INSERT INTO dbo.table
(category)
VALUES(@category)
SELECT SCOPE_IDENTITY() as id;
END
当我调用该过程时,它被正确执行。插入新行。我使用访问器获取新行id:
class DCCRetValueAccessor
{
public:
__int64 id;
BEGIN_COLUMN_MAP(DCCRetValueAccessor)
COLUMN_ENTRY(1, id)
END_COLUMN_MAP()
void ClearRecord()
{
memset(this, 0, sizeof(*this));
}
};
要执行该过程并获取新行id,我使用以下代码:
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;
CString cmd;
__int64 newID=-1;
cmd.Format(_T(“EXEC[dbo].[alert\u settings\u insert]@category=%I64d”),value->category);
命令命令;
如果(DC_成功(command.Open(m_session,cmd)))
{
if(command.MoveFirst()==S_OK)
{
newID=command.id;
}
其他的
返回-1;
}
其他的
{
LogError();
返回-1;
}
返回newID;
问题是,在atldbcli.h的第6108行,表达式:GetInterface()!=0
我看不出这个错误。你能帮我吗?
谢谢解决方案是添加设置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