用VC訪問Sybase資料庫(用Sybase提供的ct-library介面) (轉)
前段我在做一個專案時,要用到透過客戶端連線Sybase的問題。
在此之前,我做過好多access, SERVER資料庫的專案,都是用ADO技術來實現的。但是這一次,領導要求用Sybase資料庫提供的ct-library介面,所以一下子以前所知道的資料庫訪問技術都沒有了用武之地,我當時在csdn上發過貼子,問過這個問題,但回應很少,現在這個問題已解決了,我想寫出來,和大家一塊探討,共同學習,也好給以後遇到這個問題的人一個指導。
首先,必須Sybase客戶端並Sybase客戶端。安裝完成後要從中執行
dsedit進行配置。server為要訪問的資料庫的名字,還有Sybase資料庫所在機子的IP和
Port及訪問的TCP;不會配置的,可以請教一下身邊的高手。
當配置完畢後,可以用來檢查配置的正確性。
下面就進入到了。
在此,你還要讓你的工程包含Sybase的頭和動態連結庫。讓程式能認識Sybase
。打Tool--->Options後,選擇Directories標籤,Show directories for 中選擇
Include files後,你就可以增加Sybase的包含:例我這裡Sybase是安裝在C:所以我指
定為:C:sybaseinclude;同樣,再選擇Library files指定:C:sybaselib,就ok了。
1.包含標頭檔案。在你要連線Sybase資料庫程式碼的標頭檔案中新增#include
2.宣告兩個連線 Sybase 資料庫必須的變數。
CS_CONTEXT *context; /* 內容結構 */
CS_CONNECTION *ptrconnection; /* 連線結構 */
我個人認為用ct-library介面訪問sybase資料庫與用ADO技術有很多相似之處,也
可以說訪問資料庫一般差不多,都是先建立空間,再建立連線。
並初始化context: context = (CS_CONTEXT *)NULL;
3.我定義了下面幾個函式:
BOOL ConnectSybase(CString strDBName,CString strUser,CString
strPass); //連線資料庫:true成功,false失敗 其引數分別為:資料庫名,訪問資料庫
的名,密碼。這個strDBName就是Sybase客啟端配置時的Server名字。
void DinnectSybaseDB(); //斷開資料庫
void ShowDBError(int nErrCode); //顯示連線資料庫時的錯誤資訊
4.具體實現:
//////////////**********建立連線函式***********//////////////
ConnectSybaseDB(CString strDBName,CString strUser,CString strPass)
{
CS_RETCODE ret;
char username[32],pass[32];
memset(username,0,sizeof(username));
memset(password,0,sizeof(password));
strcpy(username,strUser);
strcpy(password,strPassword);
/*分配內容結構*/
if((ret=cs_ctx_alloc(CS_VERSION_100, &context)) != CS_SUCCEED)
{ //不成功則ShowDBError顯示錯誤程式碼
ShowDBError(ret);
return FALSE;
}
/*初始化Client_Library*/
if((ret=ct_init(context,CS_VERSION_100)) != CS_SUCCEED)
{
ShowDBError(ret);
return FALSE;
}
/*分配連線結構*/
if((ret=ct_con_alloc(context,&ptrconnection))!=CS_SUCCEED)
{
ShowDBError(ret);
return FALSE;
}
/*設定使用者名稱和口令*/
if((ret=ct_con_props(ptrconnection,CS_SET,CS_USERNAME,username,CS_NULLTERM,NU
LL))!=CS_SUCCEED)
{
ShowDBError(ret);
return FALSE;
}
if((ret=ct_con_props(ptrconnection,CS_SET,CS_PASSWORD,password,CS_NULLTERM,NU
LL))!=CS_SUCCEED)
{
ShowDBError(ret);
return FALSE;
}
/*建立連線*/
char instance[20];
strcpy(instance,strDBName);
if((ret=ct_connect(ptrconnection, (CS_CHAR *)instance,
sizeof(instance))) != CS_SUCCEED)
{
ShowDBError(ret);
return FALSE;
}
else
return TRUE;
}
//////////////**********斷開連線函式***********//////////////
void DisConnectSybaseDB()
{
CS_RETCODE ret;
if ((ret = ct_close(ptrconnection, CS_UNUSED))!= CS_SUCCEED)
{
ShowDBError(ret);
}
if ((ret = ct_con_drop(ptrconnection)) != CS_SUCCEED)/*釋放資源*/
{
ShowDBError(ret);
}
if((ret=ct_exit(context,CS_UNUSED))!=CS_SUCCEED)/*關閉與的所有
連線,退出CT-L*/
{
ShowDBError(ret);
}
if((ret=cs_ctx_drop(context))!=CS_SUCCEED)/*釋放環境結構佔用的資源*/
{
ShowDBError(ret);
}
context = (CS_CONTEXT *)NULL;
return;
}
//////////////**********顯示錯誤程式碼函式***********//////////////
void ShowDBError(int nErrCode)
{
CString strDBErrorInfo;
switch(nErrCode)
{
case CS_MEM_ERROR:
strcpy(strDBErrorInfo, "不足或地址分配錯誤!");
break;
case CS_PENDING:
strcpy(strDBErrorInfo, "非同步網路I/O正在進行!");
break;
case CS_BUSY:
strcpy(strDBErrorInfo, "當前連線內有一非同步操作正在進行!");
break;
case CS_CANCELED:
strcpy(strDBErrorInfo, "操作被取消!");
break;
case CS_END_RESULTS:
strcpy(strDBErrorInfo, "從伺服器返回的結果處理結束!");
break;
case CS_ROW_FAIL:
strcpy(strDBErrorInfo, "提取當前行的資料失敗!");
break;
case CS_END_DATA:
strcpy(strDBErrorInfo, "資料提取結束!");
break;
case CS_FAIL:
strcpy(strDBErrorInfo, "函式失敗!");
break;
default:
strcpy(strDBErrorInfo, "不識別的錯誤!");
break;
}
AfxMessageBox(strDBErrorInfo);
}
以上是簡單的連線斷開與顯示錯誤資訊的一些程式碼,供大家參考。請大家多指導,和
大家共同進步。我的信箱:to:moorhen@263">moorhen@263.net 如轉載請標明作者:luckyegg
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-993882/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- sybase iq 資料庫 問題資料庫
- Sybase ASE資料庫的license問題資料庫
- Sybase資料庫簡介 (轉載)資料庫
- Sybase資料庫安全資料庫
- sybase資料庫恢復資料庫
- jive的資料庫sybase7資料庫
- 通過Oracle Gateways 訪問SybaseOracleGateway
- 理解Sybase ASE資料庫中的索引資料庫索引
- Sybase資料庫空間相關資料庫
- Sybase 資料庫啟停指令碼資料庫指令碼
- hibernate 於sybase資料庫的問題-尋求答案資料庫
- 用perl訪問mysql資料庫(轉)MySql資料庫
- 急:webshere配置資料庫sybase的連線池的問題Web資料庫
- Sybase ASE資料庫恢復,Sybase資料恢復,資料誤刪除恢復工具READSYBDEVICE資料庫資料恢復dev
- SYBASE資料庫dbcc命令詳解(zt)資料庫
- 用.NET新提供的managedprovider來訪問Oracle資料(轉)IDEOracle
- SYBASE 資料庫遷移到AS 400 db2的FAQ(五) (轉)資料庫DB2
- SYBASE 資料庫遷移到AS 400 db2的FAQ(四) (轉)資料庫DB2
- SYBASE 資料庫遷移到AS 400 db2的FAQ(三) (轉)資料庫DB2
- SYBASE 資料庫遷移到AS 400 db2的FAQ(一) (轉)資料庫DB2
- 用JDBC訪問一個資料庫(轉)JDBC資料庫
- sybase EDCA異構訪問oracle 亂碼問題Oracle
- 簡單介紹Sybase資料庫的備份與恢復(轉)資料庫
- 教小白搭建sybase資料庫環境資料庫
- 請教,JIVE如何聯接SYBASE資料庫?資料庫
- 使用oracle Transparent gateway 連線 sybase 資料庫OracleGateway資料庫
- Sybase或SQLServer資料庫分批歸檔方案SQLServer資料庫
- 常見資料庫系統之比較 - SYBASE 和 SQL SERVER(轉)資料庫SQLServer
- Sybase資料庫日誌過大導致不能啟動(轉)資料庫
- Sybase正式釋出資料倉儲產品Sybase IQ 15.0
- 常見資料庫SYBASE和SQL SERVER的比較資料庫SQLServer
- 資料庫廠商的發展歷史之Sybase資料庫
- sybase 的裝置和資料庫,是啥關係?資料庫
- sybase線上文件庫
- 大資料分析: SAP Sybase IQ功能特性及適用場景大資料
- 關於Sybase資料庫中時間表的建立和生成!資料庫
- 用連線池提高Servlet訪問資料庫的效率 (轉)Servlet資料庫
- Sybase EAServer 6.x資料庫緩衝池配置Server資料庫