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);
}