This Domain(Admin5.com) is for Sale:

Visual Stuido.NET扩展数据库存储过程

时间:2007-12-23  来源:不详  作者:迈克DB


  srv_paraminfo的格式为:

int srv_paraminfo(
SRV_PROC *srvproc,
int n,
BYTE *pbType,
ULONG *pcbMaxLen,
ULONG *pcbActualLen,
BYTE *pbData,
BOOL *pfNull )
  其中:

  n代表是第几个参数,比如xs_TrainQuery '北京', '成都', ''中,'成都'的n值为2,
  pbType, pcbMaxLen, pcbActualLen分别代表指向此参数的类型、最大长度和实际传入长度的指针,
  pbData代表指向此参数值的指针,
  pfNull代表此参数是否为NULL,若是,则运行srv_paraminfo后,*pfNull将被设置为TRUE,当此参数的信息存在时,srv_paraminfo返回SUCCEED,否则返回FAIL.

  我们现在要读入起点和终点站名,就需要如下代码:

{
BOOL bfNull; // 记录入参是否为空(NULL)
PBYTE pbType; // 入参的类型
ULONG ulMaxLen = 20; // 入参的最大长度,令为20字节
ULONG ulActualLen; // 入参的实际长度
PBYTE pbStart; // 起点站名字
PBYTE pbEnd; // 终点站名字
// 获得第1个参数,即起点站名的类型、长度等信息
if ( srv_paraminfo(srvproc, 1, pbType, &ulMaxLen, &ulActualLen, NULL, &bfNULL) !=
织梦内容管理系统

SUCCEED )
{
// 一些异常处理代码
}
// 为起点站入参分配空间
pbStart = (PBYTE)::malloc(ulActualLen);
if ( pbStart == NULL)
{
// 一些异常处理代码
}
// 获得第1个参数的值
if ( srv_paraminfo(srvproc, 1, pbType, &ulMaxLen, &ulActualLen, pbStart, &bfNULL)
!= SUCCEED )
{
// 一些异常处理代码
}
// 重复上面的三步,但n变为2,pbStart变为pbEnd,读入终点站名
}
  第二步,从数据库中取得含二车站名的所有路线

  在扩展存储过程中连接数据库有两种方法,第一种请参见MS Sql Server ODS示例中的xp_dblib,这里只介绍第二种方法,采用SQL开头的一系列ODBC API.

  为了使用这些API,首先要在proc.cpp或者stdafx.h中加入#include .

  一次数据库连接的过程包括以下几个步骤:

  1、初始化ODBC连接,并分配环境句柄;

  2、设置环境;

  3、根据环境句柄分配数据库连接句柄;

  4、调用SQLDriverConnect连接MS SQL Serve数据源;
织梦好,好织梦


  5、分配和使用语句;

  6、调用SQLDisconnect断开连接;

  7、依次释放分配的句柄。

  直接用例子来说明,现在我们要从数据库中读取含此二车站名的所有路线,可以用下面的代码:

{
SQLHENV hEnv = SQL_NULL_ENV; // 环境句柄
SQLHDBC hDbc = SQL_NULL_HDBC; // 连接句柄
SQLHSTMT hStmt = SQL_NULL_HSTMT; // 语句句柄
SQLCHAR connStr[255] = "Driver={SQL Server};SERVER=localhost;UID=你的用户名;PWD=你的密码;DATABASE=Railway;";
// 分配环境句柄
SQLAllocHandle(SQL_HANDLE_ENV, NULL, &hEnv);
// 设置连接环境,ODBC版本设为3.x
SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
// 根据环境分配连接句柄
SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDbc);
// 建立数据库连接
SQLDriverConnect(hDbc, NULL, connStr, SQL_NTS, NULL, 255, NULL, SQL_DRIVER_NOPROMPT);
// 根据连接分配语句句柄
SQLAllocHandle(SQL_HANDLE_STMT, hDbc, &hStmt);

看完这篇,您有何感觉呢?

文章评论

共有位Admini5网友发表了评论 查看完整内容

24小时热门信息