Visual Stuido.NET扩展数据库存储过程
时间:2007-12-23 来源:不详 作者:迈克DB
// 定义查询语句query,别忘记#include <tchar.h>
TCHAR query[255] = "select Routes.TrainID, AllStations from Routes, Trains where Routes.TrainID=Trains.TrainID and AllStations like '%";
_tcscat(query, (TCHAR*)pbStart);
_tcscat(query, "%");
_tcscat(query, (TCHAR*)pbEnd);
_tcscat(query, "%'");
// 现在,query="select Routes…… like '%起点站%终点站%'",我们运行此查询
SQLExecDirect(hStmt, (SQLCHAR*)query, SQL_NTS);
// 获得查询所得的行数
UINT uiRowsCount; //结果集中的行数
SQLSetStmtAttr(hStmt, SQL_ATTR_ROWS_FETCHED_PTR), (void*)&uiRowsCount, sizeof(SQLINTEGER));
// 初始化结果集数组,包括两个:TrainID和AllStations
int *piTrainID = (int*)::malloc(uiRowsCount * sizeof(int));
PCHAR *ppcStations = (PCHAR*)::malloc(uiRowsCount * sizeof(PCHAR));
// 因为结果集中第一列,即TrainID为整型,长度不变,故可以直接绑定
SQLBindCol(hStmt, 1, SQL_INTEGER, (SQLPOINTER)piTrainID, sizeof(int), NULL);
// 取出第二列的数据,因为其长度不定,故必须先获得长度 织梦内容管理系统
SQLINTEGER lColLen; // 字符串的列,即AllStations长度
UINT nRow = 0; // 行标
while (SQLFetch(hStmt) == SQL_SUCCESS_WITH_INFO) //取出一行
{
// 获得长度
SQLGetData(hStmt, 2, SQL_CHAR, NULL, 0, &lColLen);
// 根据长度为第二列的数据分配空间
ppcStation[nRow] = ::malloc(lColLen);
// 获得数据
SQLGetData(hStmt, 2, SQL_CHAR, ppcStation[nRow], lColLen, &lColLen);
// 行标随行的Fetch递增
nRow;
}
// 现在,我们就取出了所有TrainID和AllStations
// 关闭数据库连接,释放资源
SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
SQLDisConnect(hDbc);
SQLFreeHandle(SQL_HANDLE_DBC, hDbc);
SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
}
顺便说一句,到目前为止给出的两段代码,都是在方法RETCODE xs_TrainQuery(SRV_PROC*)中,加入这两段代码前,请先将项目自动生成的代码清空。 asp">存储过程
文章评论
共有位Admini5网友发表了评论 查看完整内容