如何使用DB_Library

zhangzhiqiang 2000-03-15 11:20:00
有谁知道如何在C语言调用DB_Library时,
取得Numeric型字段的值。
如11111111,45
谢谢。
...全文
310 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wujp1976 2001-06-25
  • 打赏
  • 举报
回复

我的源码:



int f_get_memberbasicinfo(char *gs_membercode,MEMBERINFO *meminfo) //取得会员基本信息
{
int ret,retcode = RET_NO ;

dbcmd(dbproc," select cMemberNo,vcMemberName,cMemberClass, " );
dbcmd(dbproc," cGenderNo,cNationNo,cDegreeNo,vcIdentity, " );
dbcmd(dbproc," vcAddr,vcZip,vcPhone, " );
dbcmd(dbproc," vcCompany,mDTCAmt,mMTCAmt,mYTCAmt,mTCAmt,mMarkAmt");
dbcmd(dbproc," from soMemberCardVw " );
dbfcmd(dbproc," where cMemberNo = '%s' ",gs_membercode );

if(dbsqlexec(dbproc) == FAIL){
f_messagebox("数据库错误(cMemberNo)",1);
return RET_ERROR;
}

while((ret = dbresults(dbproc)) != NO_MORE_RESULTS )
{
if(ret == SUCCEED) {
dbbind(dbproc,1,STRINGBIND, (DBCHAR) 0,meminfo->cMemberNo );
dbbind(dbproc,2,STRINGBIND, (DBCHAR) 0,meminfo->vcMemberName);
dbbind(dbproc,3,STRINGBIND, (DBCHAR) 0,meminfo->cMemberClass);
dbbind(dbproc,4,STRINGBIND, (DBCHAR) 0,meminfo->cGenderNo );
dbbind(dbproc,5,STRINGBIND, (DBCHAR) 0,meminfo->cNationNo );
dbbind(dbproc,6,STRINGBIND, (DBCHAR) 0,meminfo->cDegreeNo );
dbbind(dbproc,7,STRINGBIND, (DBCHAR) 0,meminfo->vcIdentity );
dbbind(dbproc,8,STRINGBIND, (DBCHAR) 0,meminfo->vcAddr );
dbbind(dbproc,9,STRINGBIND, (DBCHAR) 0,meminfo->vcZip );
dbbind(dbproc,10,STRINGBIND, (DBCHAR) 0,meminfo->vcPhone );
dbbind(dbproc,11,STRINGBIND, (DBCHAR) 0,meminfo->vcCompany );
dbbind(dbproc,12,FLT8BIND, (DBCHAR) 0,&meminfo->mDTCAmt );
dbbind(dbproc,13,FLT8BIND, (DBCHAR) 0,&meminfo->mMTCAmt );
dbbind(dbproc,14,FLT8BIND, (DBCHAR) 0,&meminfo->mYTCAmt );
dbbind(dbproc,15,FLT8BIND, (DBCHAR) 0,&meminfo->mTCAmt );
dbbind(dbproc,16,FLT8BIND, (DBCHAR) 0,&meminfo->mMarkAmt );

while(dbnextrow(dbproc) != NO_MORE_ROWS){
meminfo->cMemberNo[14] = 0 ;
meminfo->vcMemberName[16] = 0;
meminfo->cMemberClass[1] = 0 ;
meminfo->cGenderNo[1] = 0 ;
meminfo->cNationNo[3] = 0 ;
meminfo->cDegreeNo[3] = 0 ;
meminfo->vcIdentity[40] = 0 ;
meminfo->vcAddr[60] = 0 ;
meminfo->vcZip[6] = 0 ;
meminfo->vcPhone[40] = 0 ;
meminfo->vcCompany[40] = 0 ;
retcode = RET_OK;
}/* while(dbnextrow(dbproc) */
}/* if */
}/*while*/

return retcode;
}/* f_getmemberbasicinfo */


taosi 2001-06-22
  • 打赏
  • 举报
回复
gz
coolstar 2001-06-22
  • 打赏
  • 举报
回复
给分呀
929 2000-03-16
  • 打赏
  • 举报
回复
我想关键是找对应的数据类型:
NUMERIC对应的数据类型为:
vartype varaddr SQL Server type of column
NUMERICBIND DBNUMERIC SQLNUMERIC
其中VARTYPE是指DBBIND中连接的类型,VARADDR是指在DB编程中所能用到的变量类型,而SQL SERVER TYPE OF COLUMN指的是SQL SERVER中的数据类型。找好对应的类型就容易取数了。
应用DB_Library,可用这两个函数之一来取得字段值。
RETCODE dbbind (
PDBPROCESS dbproc,
INT column,
INT vartype,
DBINT varlen,
LPBYTE varaddr );


有一例子:
DBNUMERIC xvariable;
DBCHAR yvariable[10];

// Read the query into the command buffer.
dbcmd(dbproc, "select x = 100, y = 'hello'");
// Send the query to SQL Server.
dbsqlexec(dbproc);
// Get ready to process the results of the query.
dbresults(dbproc);
//这两步很重要,在进行BIND前,要指明NUMERIC型变量的精度信息。可用DEFAULTPRECISION和DEFAULTSCALE设置。

xvariable.precision=DEFAULTPRECISION

xvariable.scale=DEFAULTSCALE


// Bind column data to program variables.
dbbind(dbproc, 1, NUMERICBIND, (DBINT) 0, (BYTE *) &xvariable);
dbbind(dbproc, 2, STRINGBIND, (DBINT) 0, yvariable);

// Now process each row.
while (dbnextrow(dbproc) != NO_MORE_ROWS)
{
// C-code to print or process row data
}
....

还有一函数稍微麻烦:
LPCBYTE dbdata (
PDBPROCESS dproc,
INT column );


DBPROCESS *dbproc;
DBINT row_number = 0;
DBINT object_id;

// Put the command into the command buffer.
dbcmd(dbproc, "select id from sysobjects");

// Send the command to SQL Server and begin execution.
dbsqlexec(dbproc);

// Process the command results.
dbresults(dbproc);
// Examine the data in each row.
while (dbnextrow(dbproc) != NO_MORE_ROWS)
{
row_number+;
object_id = *((DBINT *)dbdata(dbproc, 1));
printf("row %ld, object id is %ld.\n", row_number, object_id);
}
此例子以整形数据为例,改变数据类型,访问NUMERIC列即可。
以上介绍均可由SQL SERVER BOOK ONLINE获得。
db服务器连接mysql+redis高可用高性能框架干货1、使用c++语言,vs2019开发垮平台[windows和linux]连接MySql和redis框架。2、使用MySql持久化玩家数据,redis做玩家数据缓存层,redis不做数据持久化。mysql搭配redis工作效率非常高效,就好比男女搭配干活不累,没有redis,mysql也能独立很好的完成用户读写请求。有了redis,用户访问数据的效率更高,时间更短,快速的完成请求。3、讲解如何保持mysql和redis数据强一致性策略,并在代码里实现。每次启动redis,使用管道技术,从mysql批量导入活跃用户数据到redis中,并设置过期时间.4、教程使用线程池技术,每个线程拥有自己独立的数据,线程绑定类。每一个实例就包含一个线程每个线程数据里包含:mysql连接器、redis连接器、内存回收池、安全的串行队列、条件变量、互斥量保证线程内的数据安全。5、工作原理:没有请求时,各个工作线程处于休眠状态。有读写请求时,从线程池获取一个线程,添加读写请求,把数据推送到线程工作队列中。然后工作线程获取队列的数据,进行串行工作任务安排,进行mysql数据库读写操作,以及redis读写数据操作,当完成工作任务时,执行下一个工作任务,同时把处理结果推送到逻辑线程,把数据给用户。6、用户读数据策略:用户获取数据首先是先从redis查找数据,redis命中,返回数据给玩家,redis命中失败,mysql中查找数据,然后写入数据到redis中,返回数据给用户。7、用户写数据策略:用户先从redis中删除数据,然后写数据到mysql中,最后再把数据写入到redis中,保持数据一致性。8、教程是一个干货教程,不是新手教程,mysql基础语法讲解的少,redis有讲解基础系列。教程讲解的是如何搭建一个支持高并发,高性能的读写数据库框架,使用mysql+redis搭配的高可用、高性能框架。该套框架在多个项目使用过,也在棋牌类项目里面使用过。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧