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)、递归搜索