南大通用数据库(5):windows上代码运行调试。

example分享

链接:https://pan.baidu.com/s/1dRjSCMvJ5xkwPX7baOpxLA 
提取码:7ikk 


一、示例1:测试Cursors.cpp

/*
*GBase数据库示例
*本示例主要演示了游标的使用
*数据库用户名:sysdba 密码:1 数据库:northwind 服务器:localhost
*/
#include <exception>
#include <windows.h>
#include <sql.h>
#include <stdio.h> 
#include <sqlext.h>
#include <stdlib.h>
#include <mbstring.h>
#include <iostream.h>

#define MAX_DATA 100
#define GBASESUCCESS(rc) ((rc==SQL_SUCCESS)||(rc==SQL_SUCCESS_WITH_INFO))

class direxec
{
   RETCODE rc;        // ODBC return code
   HENV henv;         // Environment 句柄   
   HDBC hdbc;         // Connection 句柄
   HSTMT hstmt;       // Statement 句柄
   unsigned char szData[MAX_DATA];   // 返回的数据
   SDWORD cbData;     // 输出数据长度
   unsigned char chr_ds_name[SQL_MAX_DSN_LENGTH];   // 数据源名称
   SQLCHAR      szConnStrOut[100];

public:
   direxec();           // 构造器
   void sqlconn();      // 分配 env, stat, and conn
   void sqlexec(unsigned char *);   // 执行 SQL statement
   void sqldisconn();   // 释放env, stat, conn的指针并且断开连接
   void error_out();    // 显示错误
};

// 构造器使用数据源初始化chr_ds_name字符串。
direxec::direxec()
{
}

// 分配environment句柄,分配connection句柄,
// 连接数据源,并且分配statement。
void direxec::sqlconn(void)
{
   SQLAllocEnv(&henv);
   SQLAllocConnect(henv,&hdbc);
   // 使用SQLConnect进行连接
   rc=SQLDriverConnect(hdbc,NULL,(SQLCHAR *)"Driver={GBase ODBC 8.3 Driver};SERVER=192.168.1.225;UID=sysdba;PWD=111111;Database=northwind",SQL_NTS,szConnStrOut,SQL_NTS,NULL,0);   
   // 释放句柄,显示错误信息,并且退出
   if (!GBASESUCCESS(rc))
   {
      SQLFreeConnect(hdbc);
	  SQLFreeEnv(henv);
      printf("连接GBase服务器失败,程序退出。 \n\n");
      exit(-1);
   }
   else
   {
	  printf("使用SQLDriverConnect成功连接GBase服务器。 \n\n");
   }

   rc=SQLAllocStmt(hdbc,&hstmt);

}

// 使用 ODBC API SQLExecDirect()执行SQL指令,并且使用游标取得记录。
void direxec::sqlexec(unsigned char * cmdstr)
{
	SQLCHAR FirstNameArray[50], LastNameArray[50];	
	SDWORD  cbValue=0;
	UWORD fLevel2=FALSE;
	
	// 判断可滚动游标是否可用
	rc = SQLGetFunctions(hdbc, SQL_API_SQLFETCHSCROLL,&fLevel2);

	if(fLevel2){
		printf("游标可用\n");
	}
	else
	{
		printf("游标不可用\n");
		exit(-1);
	}
	
	//设定游标类型
	SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_STATIC, 0); 
	
	//绑定数组
	SQLBindCol(hstmt, 1, SQL_C_CHAR, FirstNameArray, sizeof(FirstNameArray),&cbValue);
	SQLBindCol(hstmt, 2, SQL_C_CHAR, LastNameArray, sizeof(LastNameArray),&cbValue);
	
	rc=SQLExecDirect(hstmt,cmdstr,SQL_NTS);

	if (!GBASESUCCESS(rc))  //错误
	{
		error_out();
		// 释放句柄断开连接
		SQLFreeStmt(hstmt,SQL_DROP);
		SQLDisconnect(hdbc);
		SQLFreeConnect(hdbc);
		SQLFreeEnv(henv);
		exit(-1);
	}
	else
	{
		rc=SQLFetchScroll(hstmt,SQL_FETCH_LAST,0);
		printf("最后的一条记录:  ");
		printf((const char *)FirstNameArray);
		printf(" ");
		printf((const char *)LastNameArray);
		printf("\n");

		
		rc=SQLFetchScroll(hstmt,SQL_FETCH_FIRST,0);
		printf("第1条记录:  ");
		printf((const char *)FirstNameArray);
		printf(" ");
		printf((const char *)LastNameArray);
		printf("\n");

		rc=SQLFetchScroll(hstmt,SQL_FETCH_ABSOLUTE,5);
		printf("第5条记录:  ");
		printf((const char *)FirstNameArray);
		printf(" ");
		printf((const char *)LastNameArray);
		printf("\n");

		//关闭游标
		SQLCloseCursor(hstmt);

	}
}

// 释放statement句柄,断开连接,释放connection句柄,释放enviroment句柄。
void direxec::sqldisconn(void)
{
   SQLFreeStmt(hstmt,SQL_DROP);
   SQLDisconnect(hdbc);
   SQLFreeConnect(hdbc);
   SQLFreeEnv(henv);
}

// 显示错误信息
void direxec::error_out(void)
{
   unsigned char szSQLSTATE[10];
   SDWORD nErr;
   unsigned char msg[SQL_MAX_MESSAGE_LENGTH+1];
   SWORD cbmsg;

   while(SQLError(0,0,hstmt,szSQLSTATE,&nErr,msg,sizeof(msg),&cbmsg)==
   SQL_SUCCESS)
   {
      wsprintf((char *)szData,"Error:\nSQLSTATE=%s,Native error=%ld,msg='%s'",szSQLSTATE,nErr,msg);
 	  printf((const char *)szData);
   }

}

int main ()
{
   // 声明一个direxec对象的实例
   direxec x;
   
   // 分配句柄,并且建立连接.
   x.sqlconn();

   // 执行SQL指令 "SELECT first name, last_name FROM employee".
   x.sqlexec((UCHAR FAR *)"SELECT FirstName, LastName FROM employees");

   // 释放句柄,断开连接.
   x.sqldisconn();

   // 返回success code;示例执行成功
   return (TRUE);
}

二、代码调试测试

注意:修改为自己的IP,用户名和密码。

本机按照的驱动是win10 ,安装的ODBC驱动是【ODBC 数据源(32 位)】

在本机VS2017 创建的环境中,在DEBUG X86 设置下是可以正确跑通程序的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值