【发布时间】:2021-02-26 05:44:12
【问题描述】:
我正在尝试使用查询来确定完整备份的大小:
use [someDtabase]; exec sp_spaceused
如果我在 SSMS 中运行它,它工作正常,但是当我尝试在 C++ 代码中重复它时,我收到错误:“对象关闭时不允许操作”。我的代码:
std::wstring query = L"use [someDatabase]; exec sp_spaceused";
ADODB::_CommandPtr ptrCommand;
ptrCommand.CreateInstance( __uuidof( ADODB::Command ));
ptrCommand->ActiveConnection = m_ptrConnection;
ptrCommand->CommandText = _bstr_t( query.c_str() );
ptrCommand->CommandTimeout = timeout;
ADODB::_RecordsetPtr ptrRecordset = ptrCommand->Execute( NULL, NULL, ADODB::adCmdText );
if (!ptrRecordset || ptrRecordset->EndOfFile == VARIANT_TRUE) //<--an exception is thrown here
我猜问题出在“使用 [someDtabase];”并且记录集总是为它关闭
【问题讨论】:
-
在 C++ 代码中包含
USE似乎很奇怪,通常您的连接字符串将定义要使用的数据库。 -
代替
USE db,您可以在数据库范围内执行该过程:exec master.sys.sp_spaceused; exec tempdb.sys.sp_spaceused;
标签: c++ sql-server adodb