c連接本地資料庫
分類: 電腦/網路 >> 程序設計 >> 其他編程語言
問題描述:
C或者以C++與SQL應該如何連接,謝謝!
解析:
用odbc或db-libary給你一小段db-library程序
int CreateProc(PDBPROCESS * dbproc,char * pwd,char * sname)
{
PLOGINREC login;
char sname[20];
unsigned short num;
memset(sname,0,sizeof(sname));
login=dblogin();
DBSETLUSER(login,"sa");
if(strlen(pwd)>0)
{
DBSETLPWD(login,pwd);
}
DBSETLVERSION(login, DBVER60);
dbprocerrhandle(login,err_handler);
dbprocmsghandle(login,msg_handler);
dbserverenum(LOC_SEARCH,sname,sizeof(sname),&num);
DBSETLTIME(login,20);
*dbproc=dbopen(login,sname);
if(*dbproc == NULL){
return ERR;
}
dbuse(*dbproc,"ccenter");
dbfreelogin(login);
return OK;
}
int check_grp_no(int grp_no, unsigned int * *** all_len)
{
int res=0;
int t=0;
dbcancel(dbproc);
dbfcmd(dbproc," select *** all_len from grp_table where grp_no=%d",grp_no);
res=dbsqlexec(dbproc);
if((res=dbresults(dbproc))==SUCCEED){
dbbind(dbproc,1,INTBIND,0,(unsigned char *) *** all_len);
while(dbnextrow(dbproc)!=NO_MORE_ROWS){
t++;
return OK;
}
}
return ERR;
}
B. 如何在C/C++程序中使用資料庫
一般要看使用的資料庫。如果 操作 sql server 需要用到 ADO 驅動,這種驅動使用MFC做的包裝類比較多一些,在控制台直接編寫代碼可能稍顯繁瑣。
如果操作mysql,在安裝mysql的時候,有相應的include頭文件和庫文件,可以在自己的IDE開發環境中進行設置。
C. 幫忙用C++實現與資料庫的連接
用VC中的MFC吧,很好上手
#include <afxdb.h>
/* 連接資料庫 */
CDatabase db;
BOOL bRtn;
try {
bRtn = db.OpenEx("DSN=數據源名;UID=sa", CDatabase::noOdbcDialog);
}catch (CDBException *pDBEx) {
pDBEx->ReportError();
}catch (CMemoryException *pMemEx) {
pMemEx->ReportError();
}
if (!bRtn)
printf("連接資料庫失敗!");
/* 操作結束後,關閉資料庫 */
db.Close();
添加記錄操作
#include <afxdb.h>
CDatabase db;
BOOL bRtn;
CString sql;
/* 1、連接資料庫,見(1) */
/* 2、生成INSERT語句,叢肆稿賦給sql,例如: */
sql = "insert into student_table (s_sID, s_sName, s_sAge) values (『001』, 『ZhangSan』, 20);" ;
/* 3、往資料庫中添加紀錄 */
try {
db.ExecuteSQL(sql);
} catch (CDBException *pDBEx) {
pDBEx->ReportError();
}
/* 4、關閉資料庫 */
db.Close();
刪除記錄操作
#include <afxdb.h>
CDatabase db;
BOOL bRtn;
CString sql;
/* 1、連接資料庫,見(1) */
/* 2、生成DELETE語句,賦給sql,例如: */
sql = "delete from student_table where s_SID =』001』;" ;
/* 3、從資料庫中刪除紀錄 */
try {
db.ExecuteSQL(sql);
} catch (CDBException *pDBEx) {
pDBEx->ReportError();
}
/* 4、關閉資料庫 */
db.Close();
修改記錄操作
#include <afxdb.h>
CDatabase db;
BOOL bRtn;
CString sql;
/* 1、連接資料庫,見(1) */
/* 2、生成UPDATE語句,賦給sql,例如: */
sql = "update from student_table set s_sName=『LiSi』,s_sAge=21 where s_SID =『001』;" ;
/* 3、更新資料庫中的紀錄 */
try {
db.ExecuteSQL(sql);
} catch (CDBException *pDBEx) {
pDBEx->ReportError();
}
/* 4、關閉資料庫 */
db.Close();
查詢、統計操作
#include <myRecordset.h>滲孝
CDatabase db;
BOOL bRtn;
CString sql;
/* 1、連雹渣接資料庫,見(1) */
/* 2、生成查詢/統計語句,賦給sql,例如: */
sql = "Select * From student_table where s_sAge=20;" ;
/* 3、打開記錄集,查詢/統計 */
CMyRecordset rs(&db);
try {
bRtn = rs.Open(CRecordset::snapshot,sql);
} catch(CDBException *pDBEx) {
pDBEx->ReportError();
} catch(CMemoryException *pMemEx) {
pMemEx->ReportError();
}
if(!bRtn) {
AfxMessageBox("Query table failed!",MB_OK|MB_ICONERROR);
return ;
}
/* 4、逐條獲取查詢結果 */
for(rs.MoveFirst();!rs.IsEOF();rs.MoveNext()) {
// TODO: Add code here
}
/* 5、關閉記錄集、資料庫 */
rs.Close();
db.Close();
註:對連接查詢,可以先創建視圖,再對視圖進行查詢。
D. c語言連接Access資料庫如何實現標準的c語言
1、C/C++與資料庫交互,像 mssql/ mysql / oracle 等,一般都有成熟的第三方庫,這些庫裡面無非就是封裝了與資料庫通訊的方式和通訊協議搜一下要用的資料庫相關的 API 文檔,會說得很清楚任何文件都是二進制數據,關鍵是數據存儲的組織方式通用擴展名的文件,像gif/doc/jpg/wav,格式都是固定的。
2、舉個例子,連接SQL:
//打開資料庫
strDBClass.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=%s;JetOLEDB:DatabasePassword=%s"),m_strUnEntryptMdbFilePath,m_strMDBPassword);
//創建連接
HRESULThr=m_pConnection.CreateInstance(_uuidof(Connection));
_ConnectionPtrm_pConnection->Open(m_strDBClass,_T(""),_T(""),adConnectUnspecified);
//聲明表單指針
_RecordsetPtrpBandRecordset;
pBandRecordset.CreateInstance(__uuidof(Recordset));
//執行語句
CStringstrSQL(L"SELECT*FROM[Band]");
m_pConnection->Execute((LPCTSTR)strSQL,NULL,0);
//提取某一項例如BandInfo
intiBandInfo=wcscmp(colum,L"BandInfo");
while(!recordsetPtr->adoEOF)
{
var=recordsetPtr->GetCollect(colum);
if(var.vt!=VT_NULL)
strName=(LPCSTR)_bstr_t(var);
recordsetPtr->MoveNext();
}
E. 用C語言怎麼實現與資料庫的連接
#include<mysql/mysql.h>
#include<stdio.h>
intmain()
{
MYSQL*conn;
MYSQL_RES*res;
MYSQL_ROWrow;
char*server="localhost";//本地連接
char*user="root";//
char*password="525215980";//mysql密碼
char*database="student";//資料庫名
char*query="select*fromclass";//需要查詢的語句
intt,r;
conn=mysql_init(NULL);
if(!mysql_real_connect(conn,server,user,password,database,0,NULL,0))
{
printf("Errorconnectingtodatabase:%s ",mysql_error(conn));
}else{
printf("Connected... ");
}
t=mysql_query(conn,query);
if(t)
{
printf("Errormakingquery:%s ",mysql_error(conn));
}else{
printf("Querymade... ");
res=mysql_use_result(conn);
if(res)
{
while((row=mysql_fetch_row(res))!=NULL)
{
//printf("num=%d ",mysql_num_fields(res));//列數
for(t=0;t<mysql_num_fields(res);t++)
printf("%8s",row[t]);
printf(" ");
}
}
mysql_free_result(res);
}
mysql_close(conn);
return0;
}
(5)c連接本地資料庫擴展閱讀
C語言使用注意事項:
1、指針是c語言的靈魂,一定要靈活的使用它:
(1)、指針的聲明,創建,賦值,銷毀等
(2)、指針的類型轉換,傳參,回調等
2、遞歸調用也會經常用到:
(1)、遞歸遍歷樹結構
(2)、遞歸搜索
F. C++或C程序如何與資料庫建立連接
當然能.
以比較流行的ORACLE為例,它就專門為C提供了專門的編程介面.OCI(oracle call interface).讓C/C++代碼更高效的訪問ORACLE.不用其它方的連接緩存,最大的方便C開發人員.
同樣DB2、Sysbase也有其專門訪問介面,方便大應用級別的訪問.
因為相對比較低級,所以要學的東西很多.
G. c語言怎樣連接資料庫(c語言和資料庫連接)
1、配置ODBC數據源。
2、使用SQL函數進行連接。
對於1、配置數據源,配置完以後就可以編程操作資料庫了。
對於2、使用SQL函數進行連接,參考代碼如下:
#include
#include
#include
voidmain()
{
HENVhenv;//環境句柄
HDBChdbc;//數據源句柄
HSTMThstmt;//執行語句句柄
unsignedchardatasource[]="數據源名稱";//即源中設置的源名稱
unsignedcharuser[]="用戶名";//數襲此據庫的帳戶拍野迅名
unsignedcharpwd[]="密碼";//資料庫的密碼
unsignedcharsearch[]="selectxmfromstuwherexh=0";
SQLRETURNretcode;//記錄各SQL函數的返回情況
//分配環境句柄
retcode=SQLAllocEnv(&henv);//等介於(SQL_HANDLE_ENV,SQL_NULL
,&henv);
//設置ODBC環境版本號為3.0
retcode=(henv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);
//分配連接句柄
retcode=(henv,&hdbc);//等介於(SQL_HANDLE_DBC,henv,&hdbc);
//設置連接屬性,登錄超時為*rgbValue秒(可以沒有)
//(hdbc,SQL_LOGIN_TIMEOUT,(SQLPOINTER)(rgbValue),0);
//直接連接數據源
//如果是windows身份驗證,第二、三參數可以是
,也可以是任何字串
//SQL_NTS即"
retcode=SQLConnect(hdbc,datasource,SQL_NTS,user,SQL_NTS,pwd,SQL_NTS);
//分配語句句柄
retcode=(hdbc,&hstmt);//等介於(SQL_HANDLE_STMT,hdbc,&hstmt);
//直接執行查詢語句
retcode=(hstmt,search,SQL_NTS);
//將數據緩沖區綁定資料庫中的相應脊塵欄位(i是查詢結果集列號,queryData是綁定緩沖區,BUFF_LENGTH是緩沖區長度)
SQLBindCol(hstmt,i,SQL_C_CHAR,queryData[i-1],BUFF_LENGTH,0);
//遍歷結果集到相應緩沖區queryData
SQLFetch(hstmt);
/*
*對遍歷結果的相關操作,如顯示等
*/
//注意釋放順序,否則會造成未知錯誤!
(SQL_HANDLE_STMT,hstmt);
(hdbc);
(SQL_HANDLE_DBC,hdbc);
(SQL_HANDLE_ENV,henv);
}