db2 可以用c++来编写潜入c的sql程序,oracle也可以用c++来编写嵌入c的sql,有谁知道,急需知道sqlserver,sybase能否用c++编写嵌入c的sql程序。拜托!
---------------------------------------------------------------
cpre 可以做 c + sql
---------------------------------------------------------------
都可以支持!
---------------------------------------------------------------
sybase有db library和ct library,都可以做这些事情
---------------------------------------------------------------
连接sybase的:
#include
1<stdio.h>
2#include <stdlib.h>
3#include <string.h>
4#include <ctype.h>
5#include <sybhesql.h>
6#include <sybtesql.h>
7char logheader[15]="[gjq.kmymenu]:";
8/* Declare the SQLCA. */
9EXEC SQL INCLUDE SQLCA;
10void err_p();
11void warn_p();
12
13/*去右边的空格*/
14char* myrtrim(char* in)
15{
16int i;
17
18for(i=strlen(in)-1;i>0;i--)
19{
20if(in[i]==' ')
21continue;
22else
23break;
24}
25in[i+1]=0;
26return in;
27}
28
29char * encrypt1(char * sstr)
30{
31int i,slen;
32
33slen = strlen(sstr);
34for(i=0;i<slen;i++) "");="" "sa");="" "sybase");="" (sqlca.sqlcode)="" );="" *="" *argv[])="" *rqst)="" *一级菜单序号*="" *临时变量*="" *二级菜单序号*="" *优惠权限="" *单位级别="" *备用1="" *备用2="" *密码*="" *快捷命令="" *提示内容="" *操作员名称*="" *操作员密码*="" *操作员工号*="" *操作员级别信息*="" *文件名="" *文件最新版本*="" *显示内容="" *模块号="" *登录位置*="" *登录日志信息*="" *登录系统名称*="" *组长标志="" *职务="" *菜单项内容*="" *输入数据*="" *输入数据3="" *输入数据4="" *部门代码="" *错误提示内容*="" *错误提示属性0:不可选项1:提示时可选择,选择yes可继续*="" *错误编号*="" *附加参数="" ,'\0',sizeof(iczygh)="" ,'\0',sizeof(iczymm)="" ,'\0',sizeof(idlwz)="" ,'\0',sizeof(idlxtmc)="" ,'\0',sizeof(obmdm)="" ,'\0',sizeof(oby1)="" ,'\0',sizeof(oby2)="" ,'\0',sizeof(oczymc)="" ,'\0',sizeof(odwjb)="" ,'\0',sizeof(oerrmsg)="" ,'\0',sizeof(ofjcs)="" ,'\0',sizeof(okjml)="" ,'\0',sizeof(omkh)="" ,'\0',sizeof(otsnr)="" ,'\0',sizeof(owjm)="" ,'\0',sizeof(owjzxbb)="" ,'\0',sizeof(oxsnr)="" ,'\0',sizeof(oyhqx)="" ,'\0',sizeof(ozw)="" ,'\0',sizeof(ozzbz)="" ,'\0',sizeof(vmm)="" -1;="" :password="" :str;="" :username="" :登录位置*="" :登录系统名称*="" <="" all;="" argc,="" begin="" by="" call="" char="" close="" connect="" continue;="" database="" db:sqlerrmc='%s",' declare="" disconnect="" end="" err_p();="" exec="" fail="" fbfr32*="" for(i="0;" found="" getmenuitem(tpsvcinfo="" i="" i;="" iczygh[9];="" iczymm[21];="" identified="" idlwz[21];="" idlxtmc[21];="" if="" int="" logheader,sqlca.sqlerrm.sqlerrmc);="" long="" memset(iczygh="" memset(iczymm="" memset(idlwz="" memset(idlxtmc="" memset(obmdm="" memset(oby1="" memset(oby2="" memset(oczymc="" memset(odwjb="" memset(oerrmsg="" memset(ofjcs="" memset(okjml="" memset(omkh="" memset(otsnr="" memset(owjm="" memset(owjzxbb="" memset(oxsnr="" memset(oyhqx="" memset(ozw="" memset(ozzbz="" memset(vmm="" my_buf;="" not="" obmdm[2];="" oby1[2];="" oby2[61];="" oczymc[61];="" odlwz[21];="" odlxtmc[21];="" odwjb[2];="" oejcdxh="0;" oejcdxh;="" oerr[2];="" oerrmsg[61];="" oerrno="0;" oerrno;="" oerrtssx="0;" oerrtssx;="" ofjcs[21];="" okjml[4];="" omkh[7];="" open="" otsnr[61];="" owjm[61];="" owjzxbb[21];="" oxsnr[21];="" oyhqx[11];="" oyjcdxh="0;" oyjcdxh;="" ozw[61];="" ozzbz[2];="" password[30];="" rcvbuf;="" return="" return(0);="" rqst-="" section;="" sql="" sqlerror="" sqlwarning="" sstr;="" sstr[i]="(((sstr[i]*(i+1)+slen)%96)+32)%128;" str[30];="" strcpy(password,="" strcpy(str,="" strcpy(username,="" tpsvrdone()="" tpsvrinit(int="" userlog("%s="" userlog("tperrno:%d,tperr:%s\n",tperrno,tpstrerror(tperrno));="" username[30];="" using="" vmm[21];="" void="" warn_p();="" whenever="" {="" }="">len-1; i++) rqst->data[i] = toupper(rqst->data[i]);*/
35
36rcvbuf=(FBFR32 *) tpalloc("FML32",NULL,500);
37rcvbuf=(FBFR32 *)rqst->data;
38Fget32(rcvbuf,STR01,0,Iczygh, NULL);
39Fget32(rcvbuf,STR02,0,Iczymm, NULL);
40Fget32(rcvbuf,STR03,0,Idlxtmc,NULL);
41Fget32(rcvbuf,STR04,0,Idlwz, NULL);
42tpfree((char *)rcvbuf);
43myrtrim(Iczygh);
44myrtrim(Iczymm);
45myrtrim(Idlxtmc);
46myrtrim(Idlwz);
47
48/*提取操作员信息*/
49EXEC SQL COMMIT WORK;
50EXEC SQL COMMIT WORK;
51EXEC SQL COMMIT WORK;
52EXEC SQL SELECT rtrim(dlkl),CASE zzbz WHEN '1' THEN '1' ELSE '0' END zzbz,
53CASE WHEN DATEDIFF(day, qsrq, GETDATE())<0 THEN '1'
54WHEN DATEDIFF(day,GETDATE(),jzrq)<0 THEN '2' ELSE '0' END rqerr,
55czymc,isnull(bmdm,'Z'),zw,dwjb,yhqx
56INTO :Vmm, :Ozzbz, :Oerr, :Oczymc, :Obmdm, :Ozw, :Odwjb, :Oyhqx
57FROM jtsjk..CZYXXB
58WHERE czygh=rtrim(:Iczygh);
59
60myrtrim(Vmm);
61
62if (sqlca.sqlcode == 100)
63{
64Oerrno = -2;
65sprintf(Oerrmsg,"此操作员不存在!");
66}
67else
68if (sqlca.sqlcode != 0)
69{
70userlog("%s:提取操作员信息失败!\n",logheader);
71userlog("sqlerrmc=%s", sqlca.sqlerrm.sqlerrmc);
72userlog("tperrno:%d,tperr:%s\n",tperrno,tpstrerror(tperrno));
73Oerrno = -1;
74sprintf(Oerrmsg,"提取操作员信息失败!请稍候再试!");
75}
76EXEC SQL COMMIT WORK;
77EXEC SQL COMMIT WORK;
78EXEC SQL COMMIT WORK;
79if (Oerrno==0)
80if (strcmp(Oerr,"1")==0)
81{
82Oerrno = -3;
83sprintf(Oerrmsg,"此操作员的工号还没有到生效期!");
84}
85else
86if (strcmp(Oerr,"2")==0)
87{
88Oerrno = -4;
89sprintf(Oerrmsg,"此操作员的工号已经失效!");
90}
91else
92if (strcmp(encrypt1(Iczymm),Vmm)!=0)
93{
94Oerrno = -5;
95sprintf(Oerrmsg,"错误的密码!密码是区分大小写的,请确认使用正确的大小写!");
96}
97if (Oerrno<0) /*有错误直接返回啦*/
98{
99my_buf=(FBFR32 *) tpalloc("FML32",NULL,200);
100Fadd32(my_buf, LONG11, (char *)&Oerrno, 0);
101Fadd32(my_buf, LONG12, (char *)&Oerrtssx, 0);
102Fadd32(my_buf, STR21, Oerrmsg, 0);
103tpreturn(TPSUCCESS, 0, (char *) my_buf, 0L, 0);
104}
105
106/*检查操作员登录日志*/
107EXEC SQL SELECT dlxtmc,dlwz INTO :Odlxtmc, :Odlwz
108FROM ywsjk..CZYDLJLB WHERE czygh=rtrim(:Iczygh) AND dlbz='1';
109if ((sqlca.sqlcode!=0)&&(sqlca.sqlcode!=100))
110{
111Oerrno = -6;
112sprintf(Oerrmsg,"提取操作员的登录信息失败!请稍候再试或与管理员联系!");
113}
114else
115if (sqlca.sqlcode==0)
116{
117Oerrno = -7;
118myrtrim(Odlxtmc);
119myrtrim(Odlwz);
120sprintf(Oerrmsg,"此工号已经在<%s>登录了<%s>系统!",Odlwz,Odlxtmc);
121}
122EXEC SQL COMMIT WORK;
123EXEC SQL COMMIT WORK;
124EXEC SQL COMMIT WORK;
125if (Oerrno<0) /*有错误返回啦*/
126{
127my_buf=(FBFR32 *) tpalloc("FML32",NULL,200);
128Fadd32(my_buf, LONG11, (char *)&Oerrno, 0);
129Fadd32(my_buf, LONG12, (char *)&Oerrtssx, 0);
130Fadd32(my_buf, STR21, Oerrmsg, 0);
131tpreturn(TPSUCCESS, 0, (char *) my_buf, 0L, 0);
132}
133
134
135/*记录操作员登录日志*/
136EXEC SQL INSER</slen;i++)></sybtesql.h></sybhesql.h></ctype.h></string.h></stdlib.h></stdio.h>