说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

请帮忙:VC/ODBC API调用sp_spaceused取数据库大小,执行到SQLFetch出错(用select * 语句正确)

编辑:说三道四文库 发布时间:2018-05-23 06:45
HTML文档下载 WORD文档下载 PDF文档下载
unsigned char DSN[]="MIS";
unsigned char UID[]="sa";
unsigned char PWD[]="sa";
char pSQL[]="USE MIS EXEC sp_spaceused";//这句在SQL 查询分析器执行正确

RETCODE retcode; 

SQLHENV  GDAI_henv;
retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &GDAI_henv);
retcode = SQLSetEnvAttr(GDAI_henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);

HDBC hdbc; 
unsigned char* szDSN=(unsigned char *)DSN; 
unsigned char* szUID=(unsigned char *)UID; 
unsigned char* szPWD=(unsigned char *)PWD; 


retcode=SQLAllocConnect(GDAI_henv,&hdbc);

if (!(retcode==SQL_SUCCESS || retcode==SQL_SUCCESS_WITH_INFO)) 
return ; 

retcode=SQLConnect(hdbc,szDSN,SQL_NTS,szUID,SQL_NTS,szPWD,SQL_NTS);//建立与数据源的连接 

if (!(retcode==SQL_SUCCESS || retcode==SQL_SUCCESS_WITH_INFO) ) 

SQLFreeConnect(hdbc);//连接失败 
return ;//-1; 


HSTMT hstmt;

retcode=SQLAllocStmt(hdbc,&hstmt); 
retcode=SQLExecDirect(hstmt, (unsigned char*)pSQL, strlen(pSQL)); 

#define NAME_LEN 50
#define Space_LEN 10

SQLCHAR      szName[NAME_LEN], szSpace[Space_LEN];
SQLINTEGER   sSize, cbName, cbSize, cbSpace;

if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) 
{

/* Bind columns 1, 2, and 3 */

SQLBindCol(hstmt, 1, SQL_C_CHAR , szName , NAME_LEN, &cbName);
SQLBindCol(hstmt, 2, SQL_C_ULONG, &sSize , 0, &cbSize);
SQLBindCol(hstmt, 3, SQL_C_ULONG, &szSpace , Space_LEN, &cbSpace);

/* Fetch and print each row of data.  On */
/* an error, display a message and exit. */

while (TRUE) 
{
retcode = SQLFetch(hstmt);//出错...
if (retcode == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO)
{
//         show_error();
AfxMessageBox("error");
}

if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
char message[200];
sprintf(message, "%s",  szName);
AfxMessageBox("out");

else
{
break;
}
}
}

//do some free...
不要使用USE MIS;
数据库在DSN中设置;
直接执行;
char pSQL[]="EXEC sp_spaceused";
去掉也不行,我估计出错的原因是该存储过程的输出不是标准的select语句,在sql query中执行,输出两行是
database_name database_size unallocatedspace
MIS           10.02M        2M

reserverd data index_size unused
1280K     584k 440k       256k

即两行输出格式不一,我现在再想取得第一行database_size
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘