c程序連接資料庫
『壹』 C璇璦鎬庝箞榪炴帴oracle鏁版嵁搴擄紵
瑕佸湪C璇璦涓榪炴帴Oracle鏁版嵁搴擄紝鎮ㄥ彲浠ヤ嬌鐢∣racle鎻愪緵鐨凮DBC錛圤pen Database Connectivity錛夋帴鍙f潵瀹炵幇銆備互涓嬫槸榪炴帴Oracle鏁版嵁搴撶殑涓鑸姝ラわ細
紜淇濇偍宸插畨瑁呬簡閫傚綋鐨凮DBC椹卞姩紼嬪簭鍜孫racle瀹㈡埛絝杞浠躲
鍦–浠g爜涓鍖呭惈蹇呰佺殑澶存枃浠訛紝濡<stdio.h>銆<stdlib.h>鍜<sql.h>銆
浣跨敤ODBC鍑芥暟錛屽係QLAllocHandle()鍜孲QLConnect()錛屽垎閰嶅拰榪炴帴鏁版嵁搴撶殑鍙ユ焺銆
閰嶇疆榪炴帴瀛楃︿覆錛屾寚瀹氭墍闇鐨勮繛鎺ュ弬鏁幫紝渚嬪傛暟鎹搴撳悕銆佺敤鎴峰悕鍜屽瘑鐮佺瓑淇℃伅銆
浣跨敤SQLExecDirect()鍑芥暟鎵ц孲QL璇鍙ユ垨璋冪敤鐩稿叧鐨凮DBC鍑芥暟鏉ユ墽琛屽叾浠栨暟鎹搴撴搷浣滐紝濡傛煡璇㈡暟鎹銆佹彃鍏ユ暟鎹絳夈
閫氳繃SQLFetch()鍑芥暟鑾峰彇鏌ヨ㈢粨鏋滈泦錛屽苟鏍規嵁闇瑕佽繘琛屽勭悊鍜岃緭鍑恆
榪欏彧鏄涓涓鍩烘湰鐨勭ず渚嬶紝瀹為檯鎯呭喌鍙鑳戒細鍥犱嬌鐢ㄧ殑緙栬瘧鍣ㄥ拰鎿嶄綔緋葷粺鑰屾湁鎵涓嶅悓銆傚緩璁鍙傝冪浉鍏崇殑Oracle鍜孫DBC鏂囨。錛屼互鍙婁嬌鐢ㄩ傚簲鎮ㄧ幆澧冪殑ODBC紺轟緥浠g爜鏉ヨ繘琛屾洿鍏蜂綋鐨勬搷浣溿
『貳』 c語言操作MySQL資料庫的基本步驟指南c使用mysql步驟
C語言是一種強大且廣泛應用於軟體開發的編程語言。在很多應用中,C語言需要與資料庫進行交互。MySQL資料庫是一種常用且開源的關系型資料庫,本文將介紹C語言操作MySQL資料庫的基本步驟。
一、安裝MySQL資料庫和C語言相關庫文件
要操作MySQL資料庫,首先需要安裝MySQL資料庫和相關的C語言庫文件。逐步完成以下操作:
1. 從官網下載MySQL資料庫安裝程序,安裝程序自帶了C語言庫文件。
2. 在C語言程序中,需要包括mysql.h頭文件,該頭文件是關於MySQL資料庫的聲明和定義。
3. 在C語言程序中還需要包括鏈接器庫libmysql.dll的定義。
二、連接MySQL資料庫
在C語言中連接MySQL資料庫需要進行以下步驟:
1. 初始化MySQL連接
在C語言程序中連接MySQL資料庫,首先需要初始化連接。MySQL提供了初始化函數mysql_init(),該函數返回一個類型為MYSQL*的指針,該指針用於連接MySQL伺服器。下面是一個示例代碼:
MYSQL *conn_ptr;
//初始化連接
conn_ptr = mysql_init(NULL);
if (!conn_ptr)
{
fprintf(stderr, “mysql_init對象出錯 %s\n”, mysql_error(conn_ptr));
exit(1);
}
2. 連接MySQL資料庫
調用mysql_real_connect()函數連接MySQL資料庫,將返回值與MYSQL*對象做比較。下面是一些常用的參數:
mysql_real_connect(MYSQL * mysql, const char * host, const char * user, const char * passwd, const char * db,
unsigned int port, const char * unix_socket, unsigned long clientflag);
參數解釋:
mysql:使用mysql_init()函數初始化後的MYSQL*對象。
host:MySQL伺服器的主機名或IP地址。
user:MySQL用戶名。
passwd:MySQL密碼。
db:連接到的資料庫名稱。
port:MySQL伺服器的埠號。
unix_socket:連接到MySQL伺服器使用的Unix套接字。
clientflag:客戶端屬性。
下面是連接MySQL資料庫的示例代碼:
MYSQL *conn_ptr;
//連接MySQL資料庫
conn_ptr = mysql_real_connect(conn_ptr, “localhost”, “root”, “password”, “test”, 3306, NULL, 0);
if (conn_ptr)
{
printf(“連接成功!\n”);
}
else
{
printf(“連接失敗: %s \n”, mysql_error(conn_ptr));
}
三、查詢MySQL資料庫
在C語言中查詢MySQL資料庫需要以下步驟:
1. 執行查詢語句
調用mysql_real_query()函數執行SELECT語句並返回結果集。
下面是函數的聲明:
int mysql_real_query(MYSQL *mysql, const char *query, unsigned long length);
參數解釋:
mysql:一個MYSQL*對象。
query:SQL查詢語句。
length:指定查詢緩沖區的長度。
下面是一個查詢MySQL資料庫的示例代碼:
MYSQL *conn_ptr;
MYSQL_RES *res_ptr;
MYSQL_ROW sqlrow;
//執行查詢語句
mysql_real_query(conn_ptr, “SELECT * FROM student”, (unsigned int)strlen(“SELECT * FROM student”));
res_ptr = mysql_store_result(conn_ptr);
if (res_ptr)
{
printf(“查詢成功!\n”);
while ((sqlrow = mysql_fetch_row(res_ptr)))
{
printf(“%s \n”, sqlrow[0]);
}
mysql_free_result(res_ptr);
}
else
{
printf(“查詢失敗: %s \n”, mysql_error(conn_ptr));
}
四、斷開MySQL資料庫
在完成MySQL資料庫操作後,需要斷開與MySQL伺服器的連接。調用mysql_close()函數即可。以下是函數的示例代碼:
MYSQL *conn_ptr;
//斷開MySQL資料庫連接
mysql_close(conn_ptr);
在使用C語言操作MySQL資料庫時,需貫徹於以上這些基本步驟,以確保代碼的完整性。
『叄』 我用VC程序建立ODBC方式資料庫連接,用CRecordSet關聯了兩個表,請問我這么向資料庫中插入數據。
CDatabase類用與和資料庫進行連接、斷開、插入...的操作。
CRecordSet類用與在資料庫中讀取數據。
你想向資料庫中插入數據,就用CDatabase類就可以了。
SQL語句你知道嗎?就是「insert into」什麼的。
例如:
CDatabase* m_Database;
//你已經和資料庫連接上了是嗎?沒有的話先連接上。
// m_Database->OpenEx(str, CDatabase::noOdbcDialog));
// str 是數據源。
//然後就向庫中插入數據吧!
CString strSQL;
strSQL.Format("//一條SQL語句,就是insert into");
m_Database->ExecuteSQL(strSQL);
//這樣就OK了。
『肆』 c語言可以連接access資料庫
#import "C:\program files\common files\system\ado\msado15.dll " no_namespace rename( "EOF ", "adoEOF ")
//#import "c:\program files\common files\system\ado\msado15.dll " rename ( "EOF ", "adoEOF ") no_namespace
#define CREATEiNSTANCE(sp,riid) { HRESULT _hr =sp .CreateInstance( __uuidof( riid ) ); \
if (FAILED(_hr)) _com_issue_error(_hr); }
#define RsITEM(rs,x) ((rs-> Fields-> Item[_variant_t(x)]-> Value))
class CHmbAdoDB
{
public:
BOOL m_bOpen;
_ConnectionPtr m_DbConn;
CString m_ErrMsg;
CString m_SQLState;
long mSqlCode;
public:
void Cancel();
BOOL IsOpen();
void RollbackTrans();
void CommitTrans();
long BeginTrans();
void Close();
BOOL Open(LPCSTR lpszConnect);
BOOL Execute(LPCTSTR lpSQL);
void ProviderError();
CHmbAdoDB()
{
}
virtual ~CHmbAdoDB()
{
}
};
class CHmbAdoDBRs : public CObject
{
public:
_RecordsetPtr m_Rs;
public:
CHmbAdoDBRs();
virtual ~CHmbAdoDBRs();
BOOL Open( CHmbAdoDB *pDB, LPCSTR szSource,long option=-1);
void Close();
void GetRs(_variant_t x,_bstr_t &ret);
void GetRs(_variant_t x,CString &ret);
BOOL IsEOF();
BOOL IsOpen();
BOOL MoveNext();
BOOL MovePrev();
BOOL MoveFirst();
BOOL MoveLast();
};
#endif // !defined(AFX_RfidAdoDB_H__7C539954_1C62_47B6_AB6E_1A5BB73A67E5__INCLUDED_) truct InitOle
{
InitOle() { ::CoInitialize(NULL); }
~InitOle() { ::CoUninitialize(); }
} _init_InitOle_;
long mSqlCode;
BOOL CHmbAdoDB::Open(LPCSTR lpszConnect)
{
try
{
CREATEiNSTANCE(m_DbConn,Connection);
m_DbConn-> Open(lpszConnect, " ", " ", adModeUnknown );
}
catch( _com_error &e)
{
return FALSE;
}
catch(...)
{
return FALSE;
}
return TRUE;
}
void CHmbAdoDB::Close()
{
if( IsOpen() )
{
m_DbConn-> Close();
}
}
long CHmbAdoDB::BeginTrans()
{
return m_DbConn-> BeginTrans();
}
void CHmbAdoDB::CommitTrans()
{
m_DbConn-> CommitTrans();
}
void CHmbAdoDB::RollbackTrans()
{
m_DbConn-> RollbackTrans();
}
void CHmbAdoDB::Cancel()
{
m_DbConn-> Cancel();
}
BOOL CHmbAdoDB::IsOpen()
{
return ( (m_DbConn-> GetState() != 0) ? TRUE : FALSE );
}
BOOL CHmbAdoDB::Execute(LPCTSTR lpSQL)
{
if (!IsOpen())
{
AfxMessageBox( "Network error, Database do not open. ");
return FALSE;
}
CString strSQL(lpSQL);
strSQL.TrimLeft();
strSQL.TrimRight();
try
{
m_DbConn-> Execute(_bstr_t(strSQL), NULL, adExecuteNoRecords);
}
catch( _com_error &e)
{
return FALSE;
}
catch(...)
{
return FALSE;
}
return TRUE;
}
void CHmbAdoDB::ProviderError()
{
// Print Provider Errors from Connection object.
// pErr is a record object in the Connection 's Error collection.
ErrorPtr pErr = NULL;
if( (m_DbConn-> Errors-> Count) > 0)
{
long nCount = m_DbConn-> Errors-> Count;
// Collection ranges from 0 to nCount -1.
for(long i = 0; i < nCount; i++)
{
pErr = m_DbConn-> Errors-> GetItem(i);
mSqlCode = pErr-> NativeError;
m_ErrMsg.Format( "SQLCODE : %ld\t%s ",mSqlCode, LPCTSTR(pErr-> Description));
m_SQLState.Format( "%s ",(char*)pErr-> SQLState);
printf( "%s // %s\n ",m_SQLState,m_ErrMsg);
}
}
m_DbConn-> Errors-> Clear();
}
CHmbAdoDBRs::CHmbAdoDBRs( )
{
}
CHmbAdoDBRs::~CHmbAdoDBRs()
{
}
BOOL CHmbAdoDBRs::Open( CHmbAdoDB *pDB, LPCSTR szSource,long option )
{
CString strSQL;
strSQL = CString(szSource);
strSQL.TrimLeft();
strSQL.TrimRight();
_variant_t vRecsAffected(0L);
// CREATEiNSTANCE( m_Rs,Recordset) ;
// m_Rs-> PutRefActiveConnection( pDB-> m_DbConn );
try
{
m_Rs = pDB-> m_DbConn-> Execute(_bstr_t(strSQL),
&vRecsAffected,
adOptionUnspecified);
m_Rs-> AddRef();
// m_Rs-> Open(szSource, vtMissing, adOpenKeyset, adLockBatchOptimistic, adOptionUnspecified);
// m_Rs-> Open(szSource, vtMissing, adOpenKeyset, adLockReadOnly, option);
// m_Rs-> Open(szSource,pDB-> m_DbConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic, adCmdText);
}
catch( _com_error &e)
{
//ErrorMessage();
m_Rs-> Close();
m_Rs-> Release();
return FALSE;
}
catch(...)
{
m_Rs-> Close();
m_Rs-> Release();
return FALSE;
}
return TRUE;
}
void CHmbAdoDBRs::Close()
{
m_Rs-> Close();
m_Rs-> Release();
}
void CHmbAdoDBRs::GetRs(_variant_t x,_bstr_t &ret)
{
ret = (m_Rs-> Fields-> Item[x]-> Value);
}
void CHmbAdoDBRs::GetRs(_variant_t x,CString &ret)
{
_bstr_t retVal;
try{
retVal = (m_Rs-> Fields-> Item[x]-> Value);
}
catch(...){
ret = " ";
return;
}
ret = CString((char*) retVal);
}
BOOL CHmbAdoDBRs::IsEOF()
{
return m_Rs-> adoEOF;
}
BOOL CHmbAdoDBRs::IsOpen()
{
return ( (m_Rs-> GetState() != 0) ? TRUE : FALSE );
}
BOOL CHmbAdoDBRs::MoveNext() { return (FAILED(m_Rs-> MoveNext()) ? FALSE : TRUE ); }
BOOL CHmbAdoDBRs::MovePrev() { return (FAILED(m_Rs-> MovePrevious()) ? FALSE : TRUE ); }
BOOL CHmbAdoDBRs::MoveFirst() { return (FAILED(m_Rs-> MoveFirst()) ? FALSE : TRUE ) ; }
BOOL CHmbAdoDBRs::MoveLast() { return (FAILED(m_Rs-> MoveLast()) ? FALSE : TRUE ) ; }
以上為一個ADO的封裝類.
c語言如何連接access資料庫
現在一般是用ADO的方法.
『伍』 c語言連接SQL Server資料庫並操作表中數據的代碼沒有錯誤,但是無法執行
1、配置
ODBC數據源
。
2、使用
SQL函數
進行連接。
對於1、配置數據源,配置完以後就可以編程操作資料庫了。
對於2、使用SQL函數進行連接,參考代碼如下:
#include
#include
#include
void
main()
{
HENV
henv;
//環境
句柄
HDBC
hdbc;
//數據源句柄
HSTMT
hstmt;
//執行語句句柄
unsigned
char
datasource[]="數據源名稱";
//即源中設置的源名稱
unsigned
char
user[]=
"用戶名";
//資料庫的帳戶名
unsigned
char
pwd[]=
"密碼";
//資料庫的密碼
unsigned
char
search[]="select
xm
from
stu
where
xh=0";
SQLRETURN
retcode;
//記錄各SQL函數的返回情況
//
分配環境句柄
retcode=
SQLAllocEnv(&henv);
//
等介於
SQLAllocHandle(SQL_HANDLE_ENV,
SQL_NULL
,
&henv);
//
設置ODBC環境版本號為3.0
retcode=
SQLSetEnvAttr(henv,
SQL_ATTR_ODBC_VERSION,
(void*)SQL_OV_ODBC3,
0);
//
分配連接句柄
retcode=
SQLAllocConnect(henv,&hdbc);
//
等介於
SQLAllocHandle(SQL_HANDLE_DBC,
henv,
&hdbc);
『陸』 C語言實現MySQL資料庫連接驅動cmysql連接驅動
C語言實現MySQL資料庫連接驅動
MySQL是一種流行的關系型資料庫管理系統,它可以輕松存儲和管理大量數據。為了連接MySQL資料庫,需要使用一種稱為「驅動」的軟體。
在本文中,我們將學習如何使用C語言來實現MySQL資料庫連接驅動。我們將涵蓋以下內容:
1. 安裝MySQL Connector/C
2. 建立連接
3. 查詢資料庫
4. 插入、更新和刪除數據
第一步:安裝MySQL Connector/C
MySQL Connector/C是一個MySQL資料庫連接器,它可以允許你從C語言編程環境中連接到MySQL伺服器。你需要先安裝這個連接器,才能開始實現我的下面的代碼。
打開命令行窗口,輸入以下命令:
sudo apt-get install libmysqlclient-dev
這會安裝最新的Connector/C庫。
第二步:建立連接
為了建立連接,我們需要在程序中包含MySQL的庫頭文件mysql.h,並調用相關的函數。
#include
#include
int mn()
{
MYSQL *conn;
conn = mysql_init(NULL);
if (!mysql_real_connect(conn, “localhost”, “username”, “password”, “database”, 0, NULL, 0))
{
printf(“Connection Fled: %s\n”, mysql_error(conn));
}
else
{
printf(“Connection Successful\n”);
}
mysql_close(conn);
return 0;
}
在上面的程序中,我們使用了mysql_init()函數來初始化連接對象,然後使用mysql_real_connect()函數來實際建立連接。這個函數需要四個參數:
1. 主機名或IP地址(本地主機為「localhost」)
2. 用戶名
3. 密碼
4. 資料庫名
如果連接成功,這個函數將返回一個MYSQL對象,我們可以用它來進行後續的操作。否則,我們需要使用mysql_error()函數來顯示錯誤信息。
我們用mysql_close()函數來關閉連接對象。
第三步:查詢資料庫
一旦我們建立了連接,我們就可以開始查詢資料庫。這個過程涉及使用mysql_query()函數來執行SQL語句。
在這個例子中,我們將查詢一個名為「table」的表格,顯示每一行的數據。
#include
#include
int mn()
{
MYSQL *conn;
conn = mysql_init(NULL);
if (!mysql_real_connect(conn, “localhost”, “username”, “password”, “database”, 0, NULL, 0))
{
printf(“Connection Fled: %s\n”, mysql_error(conn));
}
else
{
printf(“Connection Successful\n”);
if (mysql_query(conn, “SELECT * FROM table”))
{
printf(“Query Fled: %s\n”, mysql_error(conn));
}
else
{
MYSQL_RES *res = mysql_store_result(conn);
MYSQL_ROW row;
while ((row = mysql_fetch_row(res)) != NULL)
{
printf(“%s %s\n”, row[0], row[1]);
}
mysql_free_result(res);
}
}
mysql_close(conn);
return 0;
}
在這個例子中,我們使用了mysql_query()函數來執行一個SELECT查詢。如果查詢失敗,我們需要使用mysql_error()函數來輸出錯誤信息。否則,我們將返回一個MYSQL_RES對象,它包含了查詢結果。
這里我們使用了mysql_fetch_row()函數來以行的方式讀取MYSQL_RES對象中的結果,直到NULL為止。我們將每一行的第一列和第二列輸出。
我們用mysql_free_result()函數來釋放MYSQL_RES對象。
第四步:插入、更新和刪除數據
我們可以使用mysql_query()函數來執行插入、更新和刪除等操作。
在下面的例子中,我們將插入一個新的行,然後更新一個行的數據。
#include
#include
int mn()
{
MYSQL *conn;
conn = mysql_init(NULL);
if (!mysql_real_connect(conn, “localhost”, “username”, “password”, “database”, 0, NULL, 0))
{
printf(“Connection Fled: %s\n”, mysql_error(conn));
}
else
{
printf(“Connection Successful\n”);
if (mysql_query(conn, “INSERT INTO table (col1, col2) VALUES (‘value1’, ‘value2’)”))
{
printf(“Query Fled: %s\n”, mysql_error(conn));
}
else
{
printf(“Insert Successful\n”);
}
if (mysql_query(conn, “UPDATE table SET col1 = ‘new_value’ WHERE col2 = ‘value2′”))
{
printf(“Query Fled: %s\n”, mysql_error(conn));
}
else
{
printf(“Update Successful\n”);
}
}
mysql_close(conn);
return 0;
}
在這個例子中,我們使用了mysql_query()函數來執行一個INSERT INTO查詢和一個UPDATE查詢。我們可以用相同的方式刪除一個行,只需在查詢中使用DELETE FROM語句即可。
總結
在本文中,我們學習了如何使用C語言來實現MySQL資料庫連接驅動。我們已經了解了如何安裝MySQL Connector/C、建立連接、查詢資料庫和插入、更新和刪除數據。對於需要從程序中訪問MySQL資料庫的開發人員,這些都是非常有用的技能。
『柒』 用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;
}
(7)c程序連接資料庫擴展閱讀
C語言使用注意事項:
1、指針是c語言的靈魂,一定要靈活的使用它:
(1)、指針的聲明,創建,賦值,銷毀等
(2)、指針的類型轉換,傳參,回調等
2、遞歸調用也會經常用到:
(1)、遞歸遍歷樹結構
(2)、遞歸搜索