PB提供了很多数据库连接的接口还有PB自己专有的连接(我这里就说是专连吧)。
我想知道他们之间有什么区别。特别是专连和其他的连接,在连接速度上、稳定性方面、安装方面等等。
我手上的一个项目用到了专连和ODBC连接两种方式,现在我想舍弃一种。或者干脆用第三种,谢谢各位大哥大姐给予小弟宝贵意见。
------解决方案--------------------
有专用,还是用专用比较好,ODBC还需要配置,发布不方便,专用的和执行文件拷在一起就行了.
连SQL SERVER OLE DB也是比较好的方法.
------解决方案--------------------
同意宝宝传奇。情况就是这样的。
------解决方案--------------------
学习了....
------解决方案--------------------
是传sqlca.dbhandle(),还是使用pbni传transaction呢?
------解决方案--------------------
------解决方案--------------------
这也试了一下。
VOID FAR WINAPI PASCAL dblisten(LONG dbhandle)
{
Lda_Def FAR *pLda = (Lda_Def FAR *)dbhandle;
Cda_Def FAR *pCda = (Cda_Def FAR *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(Cda_Def));
if(!pCda )
return;
__try
{
if(!oopen(pCda, pLda,NULL, -1, -1, NULL, -1)==0)//这里一直不成功
return;
if(oparse(pCda,(OraText *)"select count(1) from z_scanning", -1, 0, 1))
{
if (pCda->rpc)
::MessageBox(0,"1","1",MB_OK);
else
::MessageBox(0,"2","2",MB_OK);
}
oclose(pCda);
}
__finally
{
HeapFree(GetProcessHeap(), 0,pCda);
}
}
------解决方案--------------------
头文件:
#pragma warning(disable : 4786)
#include <windows.h>
#include <pbext.h>
#include <richedit.h>
#include <commctrl.h>
#include <math.h>
#include <string>
extern "C"
{
#include <oratypes.h>
#include <ociapr.h>
/* demo constants and structs */
#include <ocidem.h>
}
#pragma comment(lib,"oci.lib")
------解决方案--------------------
传参重连就可以:
VOID FAR WINAPI PASCAL dblisten(OraText *username,OraText *password)
{
Lda_Def FAR pLda;// = (Lda_Def FAR *)dbhandle;
Cda_Def FAR pCda;// =(Cda_Def FAR *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(Cda_Def));//(Cda_Def FAR *)GlobalAlloc(GMEM_MOVEABLE,sizeof(Cda_Def));
ub1 hda[HDA_SIZE];
sword rowcount;
#define DEFER_PARSE 1
#define VERSION_7 2
__try
{
memset(hda,0,HDA_SIZE);
if(olog(&pLda,hda,username,-1,password,-1,NULL,-1,OCI_LM_DEF) == 0)
{
if(oopen(&pCda,&pLda,NULL, -1, -1, NULL, -1) == 0)
{
if(oparse(&pCda,(OraText *) "select count(1) from z_scanning ", -1, DEFER_PARSE, (ub4) VERSION_7) == 0)
{
if (odefin(&pCda, 1, (ub1 *) &rowcount, (sword) sizeof(sword),(sword) INT_TYPE,(sword) -1, (sb2 *) 0, (text *) 0, -1, -1,(ub2 *) 0, (ub2 *) 0)==0)
{
if(oexfet(&pCda, (ub4)1, FALSE, FALSE)==0)
{
if(rowcount)
::MessageBox(0, "1 ", "1 ",MB_OK);
else
::MessageBox(0, "2 ", "2 ",MB_OK);
}
}
}
}
oclose(&pCda);
}
}
__finally
{
//GlobalFree(pCda);
//HeapFree(GetProcessHeap(), 0,pCda);
}
}
------解决方案--------------------