vc操作数据库
❶ 在VC++中如何从数据库中读取数据和向数据库中写入数据
#include "stdafx.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
ADOConn::ADOConn()
{
}
ADOConn::~ADOConn()
{
}
// 初始化—连接数据库
void ADOConn::OnInitADOConn()
{
// 初始化OLE/COM库环境
::CoInitialize(NULL);
try
{
// 创建Connection对象
m_pConnection.CreateInstance("ADODB.Connection");
// 设置连接字符串,必须是BSTR型或者_bstr_t类型
_bstr_t strConnect = "Provider=MSDAsql.1;Persist Security Info=False;User ID=***;Data Source=***;";
m_pConnection->Open(strConnect,"","",adModeUnknown);
}
// 捕捉异常
catch(_com_error e)
{
// 显示错误信息
AfxMessageBox(e.Description());
}
}
// 执行查询
_RecordsetPtr& ADOConn::GetRecordSet(_bstr_t bstrSQL)
{
try
{
// 连接数据库,如果Connection对象为空,则重新连接数据库
if(m_pConnection==NULL)
OnInitADOConn();
// 创建记录集对象
m_pRecordset.CreateInstance(__uuidof(Recordset));
// 取得表中的记录
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}
// 捕捉异常
catch(_com_error e)
{
// 显示错误信息
AfxMessageBox(e.Description());
}
// 返回记录集
return m_pRecordset;
}
// 执行SQL语句,Insert Update _variant_t
BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL)
{
// _variant_t RecordsAffected;
try
{
// 是否已经连接数据库
if(m_pConnection == NULL)
OnInitADOConn();
// Connection对象的Execute方法:(_bstr_t CommandText,
// VARIANT * RecordsAffected, long Options )
// 其中CommandText是命令字串,通常是SQL命令。
// 参数RecordsAffected是操作完成后所影响的行数,
// 参数Options表示CommandText的类型:adCmdText-文本命令;adCmdTable-表名
// adCmdProc-存储过程;adCmdUnknown-未知
m_pConnection->Execute(bstrSQL,NULL,adCmdText);
return true;
}
catch(_com_error e)
{
AfxMessageBox(e.Description());
return false;
}
}
void ADOConn::ExitConnect()
{
// 关闭记录集和连接
if (m_pRecordset != NULL)
m_pRecordset->Close();
m_pConnection->Close();
// 释放环境
::CoUninitialize();
}
❷ 如何用VC++ 连接 Mysql数据库
#include <mysql.h>
main()
{
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;
char *server = "localhost";
char *user = "root";
char *password = ""; /* 此处改成你拍含的密码 */
char *database = "mysql";
conn = mysql_init(NULL);
/* Connect to database */
if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0))
{
fprintf(stderr, "%sn", mysql_error(conn));
exit(1);
}
/* send SQL query */
if (mysql_query(conn, "show tables"))
{
fprintf(stderr, "%sn", mysql_error(conn));
清巧 exit(1);
}
res = mysql_use_result(conn);
/* output table name */
printf("MySQL Tables in mysql database:n");
while ((row = mysql_fetch_row(res)) != NULL)
{
printf("%s n", row[0]);
}
/* close connection */
mysql_free_result(res);
答贺键mysql_close(conn);
}
❸ 在VC6.0中,如何操作Access数据库”压缩和修复数据库“功能
cdatabase*
m_pdatabase;
crecordset*
m_precordset;
m_pdatabase=new
cdatabase;
try
{
m_pdatabase->open("dbstu.mdb");
m_precordset=new
crecordset(m_pdatabase);
}
以上是建立数据库连接和数据集对象,有了m_precordset对象,就可以对数据库进行查询操作。
cstring
strselect(_t("select
*
from
["));
strselect
+=tbstu;
strselect
+=
_t("]");
m_precordset->open(dbopendynaset,strselect);
查询stuid:
sql="select
*
from
tbstu
where
stuid="+id
如果stuid是字符串类型的:
sql="select
*
from
tbstu
where
stuid='"+id+"'"
你的数据库是不是放在程序文件一个目录?如果不是修改一下。m_pdatabase->open("dbstu.mdb");
还有在文件头添加:#include
❹ VC怎么操作数据库
你必须建立数据库的工作...
在“控制面板”,选择“管理工具”,打开数据源(ODBC),然后ODBC数据源管理器对话框弹出。系统
打开“DNS”选项卡上,单击“添加”,选择。附上海涂种植Access驱动程序(* mdb)中,单击“完成”,然后输入数据源的名称和说明。 (如果你是在其他人的代码,数据源的名称可能得到,所以你必须找到工作,他使用的数据源名称)。
(你下载的源代码的数据库的路径),然后选择数据库。
它只是设置。 。 。
❺ 急。。哪位高手,能详细的给我讲一下vc连接数据库的步骤。。。着急用,,谢谢。
VC++ ADO操作数据库方法步骤
大致步骤:
1, 引入液老ADO库定义文件凳洞,初始化COM环境
2, 初始化connection指针,连接数据库并打开
3, 利用已经建立好的连接,通过connection,command或者recorder对象操作数据库,对数据进行查询,处理等操作
4, 使用完毕后,关闭数据库,释放指针,并注释COM
示例程序如下:
#include "stdafx.h"
#include "iostream"
#include "string"
#include "vector"
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
CoInitialize(NULL); //初始化COM环境
_ConnectionPtr pMyConnect(__uuidof(Connection));//定义连接对象并实例化对象
_RecordsetPtr pRst(__uuidof(Recordset));//定义记录集对象并实例化对象
try
{
/*打开数据枣埋枯库“access2007” */
pMyConnect->Open("Provider=Microsoft.ACE.OLEDB.12.0;DataSource=xtreme.accdb;Persist Security Info=False;","","",adModeUnknown);
} catch (_com_error &e)
{
cout<<"数据库初始化错误"<<endl;
cout<<e.Description()<<endl;
cout<<e.HelpFile()<<endl;
return 0;
}
cout<<"连接成功"<<endl;
try
{
pRst=pMyConnect->Execute("select * from Employee",NULL,adCmdText);
if(!pRst->BOF)
pRst->MoveFirst();
else
{
cout<<"表内数据为空"<<endl;
return 0;
}
vector<_bstr_t> column_name;
/*存储表的所有列名*/
for(int i=0; i< pRst->Fields->GetCount();i++)
{
cout<<pRst->Fields->GetItem(_variant_t((long)i))->Name<<endl;
column_name.push_back(pRst->Fields->GetItem(_variant_t((long)i))->Name);
}
/*对表进行遍历访问*/
while(!pRst->adoEOF)
{
vector<_bstr_t>::iterator iter=column_name.begin();
for(iter;iter!=column_name.end();iter++)
{
if(pRst->GetCollect(*iter).vt !=VT_NULL)
{
cout<<(_bstr_t)pRst->GetCollect(*iter)<<endl;
}
else
cout<<"NULL"<<endl;
}
pRst->MoveNext();//关闭记录集
cout<<endl;
}
}catch(_com_error &e)
{
cout<<e.Description()<<endl;
cout<<e.HelpFile()<<endl;
return 0;
}
/*关闭数据库并释放指针*/
try
{
pRst->Close(); //关闭记录集
pMyConnect->Close();//关闭数据库
pRst.Release();//释放记录集对象指针
pMyConnect.Release();//释放连接对象指针
}catch(_com_error &e)
{
cout<<e.Description()<<endl;
cout<<e.HelpFile()<<endl;
return 0;
}
CoUninitialize(); //释放COM环境
return 0;
}
说明:
本程序是在vs2008和access2007上编译通过的,如果有编译问题,可能因版本不同引起一些问题。
连接字符串因数据源不同而不同,所以因情况而变,可以直接连接ODBC的数据源,也可以直接连接其提供驱动的数据源。
❻ 怎样用vc++ 6.0访问SQL Server数据库
从功能简单的数据库(如Jet Engine)到复杂的大型数据库系统(如oracle),VC++6.0都提供了一些编程接口。本文主要介绍以下五种: 1.ODBC API;2.MFC ODBC类;3.MFC DAO类;(数据访问对象)4.MFC的OLE/DB;5.ActiveX数据对象(ADO)。6.RDO远程数据访问
1.开放数据库连接(ODBC API):提供了一个通用的编程接口,允许程序与多种不同的数据库连接。它为Oracle,SQL Server,MS Excel等都提供了驱动程序,使得用户可以使用SQL语句对数据库进行直接的底层功能操作。在使用ODBC API时,用户须引入的头文件为 "sql.h ", "sqlext.h ", "sqltypes.h "。用ODBC API创建数据库应用程序遵循一定的基本步骤:
第一步是分配ODBC环境,使一些内部结构初始化。完成这一步,须分配一个SQLHENV类型的变量在ODBC环境中做句柄使用。
第二步是为将要使用的每一个数据源分配一个连接句柄,由函数SQLALLocHandle()完成。
第三步是使用SQLConnect()把连接句柄与数据库连接,可以先通过SQLSetConnectAttr()设置连接属性。
然后就可以进行SQL语句的操作,限于篇幅,相关的函数就不具体介绍了,读者可以参考相关书籍。
操作完成后,用户取回相应的结果,就可以取消与数据库的连接。
最后需要释放ODBC环境。
ODBC API的特点是功能强大丰富,提供了异步操作,事务处理等高级功能,但相应的编程复杂,工作量大。
2.MFC ODBC类:MFC1.5后的版本里引入封装了ODBC功能的类。通过这些类提供与ODBC的接口,使得用户可以不须处理ODBC API中的繁杂处理就可以进行数据库操作。主要的MFC ODBC类如下。
CDatabase类:一个CDatabase对象表示一个到数据源的连接,通过它可以操作数据源。应用程序可使用多个CDatabase对象:构造一个对象并调用OpenEx()成员函数打开一个连接。接着构造CRecordSet对象以操作连接的数据源,并向CDatabase对象传递记录集构造程序指针。完成使用后用Close()成员函数销毁CDatabase对象。一般情况下并不需要直接使用CDatabase对象,因为CRecordSet对象可以实现大多数的功能。但是在进行事务处理时,CDatabase就起到关键作用。事务(Transaction)指的是将一系列对数据源的更新放在一起,同时提交或一个也不提交,为的是确保多用户对数据源同时操作时的数据正确性。
CRecordSet类:一个CRecordSet对象代表一个从数据源选择的一组记录的集合-记录集。记录集有两种形式:snapshot和dynaset。前者表示数据的静态视图,后者表示记录集与其他用户对数据库的更新保持同步。通过CRecordSet对象,用户可以对数据库中的记录进行各种操作。
CRecordView类:CRecordView对象是在空间中显示数据库记录的视图。这种视图是一种直接连到一个CRecordSet对象的格式视图,它从一个对话框模板资源创建,并将CRecordSet对象的字段显示在对话框模板的控件里。对象利用DDX和RFX机制,使格式上的控件和记录集的字段之间数据移动自动化,也就是说,用户甚至不要编写一行代码就可以实现简单的数据库记录查看程序。
CDBException类:由Cexception类派生,以三个继承的成员变量反映对数据库操作时的异常:
m_nRetCode:以ODBC返回代码(SQL_RETURN)的形式表明造成异常的原因。
m_strError:字符串,描述造成抛出异常的错误原因。
m_strStateNativeOrigin:字符串,用以描述以ODBC错误代码表示的异常错误。
MFC数据库类成员函数都能抛出CDBException类型的异常,所以在代码对数据库进行操作后监测异常是正确做法。
MFC ODBC类在实际开发中应用最广,因为它功能丰富,操作相对简便。
3.MFC DAO(数据访问对象)编程:DAO用于和微软的Access数据库接口。在数据库应用程序如果只需与Access数据库接口时,使用DAO编程较方便。其主要类如下。
CDaoWorkspace:CDaoWorkspace对象可以让一个用户管理从登陆到离开期间,指定的密码保护的数据库会话全过程。大多数情况下不要多个工作区也不要创建明确的工作区对象。因为在打开数据库和记录集对象时,它们可以使用DAO缺省工作区。
CDaoDatabase:代表一个连接,类似上述CDatabase类。
CDaoRecordSet:用来选择记录集并操作,类似上述CRecordSet类。
CDaoRecordView:类似上述CRecordView类。
CDaoException:类似上述CDBException类。
CDaoTableDef:表示基本表或附加表的定义。每个DAO数据库对象包括一个称为TableDef的收集,包含所有存储的DAO表定义对象。CDaoTableDef对象可以用来控制表定义。
CDaoQueryDef:CDaoQueryDef对象表示了一个查询定义(querydef)。
CDaoFieldExchange:支持数据库类使用的DAO字段交换(DFX)例程。也可处理事务,类似MFC ODBC类。
MFC DAO仅用来支持Access数据库,应用范围相对固定。
4.OLE DB:OLE DB在数据提供程序和用户之间提供了灵活的组件对象模型(COM)接口,这种灵活性有时会使得操作复杂化。OLE DB框架定义了应用的三个基本类。
数据提供程序Data Provider:拥有自己的数据并以表格形式显示数据的应用程序。提供OLE DB的行集COM接口,期显示范围可以从单一数据表格的简单提供者知道更复杂的分布式数据库系统。
使用者Consumers:使用OLE DB接口对存储在数据提供程序中的数据进行控制的应用程序。用户应用程序归为使用类。
服务提供程序Service Provider:是数据提供程序和使用者的组合。服务提供程序没有自己的数据,但使用
OLE DB使用者接口来访问存储在数据提供程序中的数据。然后,服务提供程序通过打开数据提供程序接口使得数据对使用者有效。服务提供程序常用于向应用程序提供高层次服务,比如高级分布式查询。
OLE DB编程时,用户使用组件对象开发应用程序。这些组件有:
枚举器:用于列出可用的数据源;
数据源:代表单独的数据和服务提供程序,用于创建对话;
对话:用于创建事务和命令;
事务:用于将多个操作归并为单一事务处理;
命令:用于向数据源发送文本命令(SQL),返回行集;
错误:用于获得错误信息。
5.ActiveX数据对象(ADO):是微软提供的面向对象的接口,与OLE DB类似,但接口更简单,具有更广泛的特征数组和更高程度的灵活性。ADO基于COM,提供编程语言可利用的对象,除了面向VC++,还提供面向其他各种开发工具的应用,如VB,VJ等。ADO在服务器应用方面非常有用,特别是对于动态服务器页面ASP(Active Server Page)。
ADO对象结构类似于OLE DB,但并不依靠对象层次。大多数情况下,用户只需要创建并只使用需要处理的对象。下面的对象类组成了ADO接口。
Connection:用于表示与数据库的连接,以及处理一些命令和事务。
Command:用于处理传送给数据源的命令。
Recordset:用于处理数据的表格集,包括获取和修改数据。
Field:用于表示记录集中的列信息,包括列值和其他信息。
Parameter:用于对传送给数据源的命令之间来回传送数据。
Property:用与操作在ADO中使用的其他对象的详细属性。
Error:用于获得可能发生的错误的详细信息。
在VC++使用ADO需要进行COM操作,详细方法在此就不赘述了。
在当今流行的分布式开发环境下,VC++6.0在数据库开发方面有较强的优势,学会
在不同的场合选用不同的技术,对开发人员来说是必要的技术。
❼ 用VC怎么连接SQL数据库
我用的是数据源ODBC。先打开控制面板上的管理工具。然后打开数据源。添加描述数据什么。然后去到vc那里。新建单个文档。下一步选择W数据库查看使用文件支持,单击DatabaseSource按钮。选择之前你设好的数据源。就连好了数据库了。
❽ VC++对数据库的操作
你弊汪写的这个m_strSource+=strSQL; 没有用啊?也没有事先进行查询。
可以这样:
UpdateData(TRUE);
CDBVariant var;
memset(var,0,sizeof(Var));
m_recordset.strFilter = strSQL;//这个SQL语句根据你轮坦的需要自己写
m_recordset.Requery();
while(!m_recordset.IsEOF() && m_recordset.GetCount() > 0)
{
for(int i = 0; i<m_recordset.m_nFields-1; i+=1)
{
GetFieldValue(i,var);
switch(var.m_dwType)
{
case DBVT_STRING:
case DBVT_WSTRING:
m_strSource += *var.m_pstring;
break;
case DBVT_LONG:
break;
m_strSource += itoa(var.m_lVal);//如果是UNICODE则是_wtoa(var.m_lVal);
/租桐仔/等等
default:
m_strSource += "?";
}
m_strSource += m_recordset.
}
UpdateData(FALSE);
//jiangmeng,2009,5,20
❾ 在VC6中,使用ODBC的SQL语句操作数据库时,如何提交和回滚事务
BEGIN
TRAN
为开始事务
COMMIT
TRAN
为提交事务
ROLLBACK
TRAN
为回滚事务
BeginTrans
启动新的事务,之后任何改变不会立即提交
CommitTrans
保存所有更改并结束当前事务。它也可以启动新事务。
RollbackTrans
取消当前事务中所做的任何更改并结束事务。它也可以启动新事务。
❿ 如何在VC++中使用ACCESS数据库
很简单,建好数据库表后,到控制面板--管理工具的数据源中,添加你建数据库驱动,即是设置数据源。命个名字。以便在VC程序中连接这个数据源。就可以用了。
在类中声明一个数据库对象。
CDatabase m_database;
m_database.Open(_T("数据源名");这样就连接了数据源。
C**Recordset m_recordset;//这个记录集是和你表相联的类。关联你会吧,就是在工作区中新建一个类,该类命名为C**Recordset。选择基类CRecordset.向导会弹出一个对话框,然后你找到你建表的目录,双击你要关联的表。向导就会自动完成。这个记录集,你完全要可不要动。在程序中直接引用就形了。
m_recordset(&m_database);//记录集关联数据库。
CString csSQL;
csSQL=_T("");//字符串初始化
csSQL=_T("select * from **/*表名*/where CHEPAIHAO_ID=%d"),1);
m_recordset.Open(AFX_DB_DEFAULT_TYPE,csSQL);//打开记录集第一行。
if(m_recordset.GetRecordCount()==0)
{
csSQL.Format(_T("insert into **/*表名*/ values(%d,\'%d-%d-%d\')"),m_chepaihao,m_datatime.GetYear(),m_datatime.GetMonth,m_datatime.GetDay());
//其中m_chepaihao是与车牌编辑框相关联的字符串,m_datatime是与日期控件相关联的Time变量。
m_database.ExecuteSQL(csSQL);//
m_database.Close();
}
//这就添加了一行。
当然这是简化的主要操作。你想,如果要添加一行,一般就是在对话框中,按一个按钮,弹出令一个对话框,从这个对话框中填上车牌号,和选择日期。然后按确定按钮。即执行上面的代码,添加了一行。
自己多想点。如果会VC难不到你的。