int i=m_list.GetItemCount()//在列表的队尾添加,所以先获取行数
db.Open(Filepath)
Dbset.Open(AFX_DAO_USE_DEFAULT_TYPE,"SELECT * FROM DataTable",0)
Dbset.AddNew()//在记录集的队尾添加
Dbset.SetFieldValue("Name",_variant_t(m_name))
Dbset.SetFieldValue("Age",atol(m_age))//将CString格式转换为数据库规定的格式
Dbset.SetFieldValue("Extra",_variant_t(m_extra))
Dbset.Update()//一定要及时更新
Dbset.Close()
db.Close()//并关闭////////////////////////////
看这段代码,是把三个edit控件里的值写入Data.accdb数据库文件中。
1.可以使用ADO连接数据库,具体的知识还比较的多,所以建议随便找本mfc的书本看看,可以直接使用mfc向导里的选项,非常方便的。2.使用odbc连接数据库,较于复杂,而且速度明显无ado快(顺便吐槽一下odbc在windows程序开发中就是鸡肋,从来都很少有人用的。)
cdatabase::open;virtual
bool
open
(
lpctstr
lpszdsn,
bool
bexclusive
=
false,
bool
breadonly
=
false,
lpctstr
lpszconnect
=
“odbc”,
bool
busecursorlib
=
true
)
throw(
cdbexception,
cmemoryexception
)
参数含义:
lpszdsn指定了数据源名,在lpszconnect参数中也可包括数据源名,此时lpszdsn必需为null,若在函数中未提供数据源名且使lpszdsn为null,则会显示一个数据源对话框,用户可以在该对话框中选择一个数据源.
bexclusive说明是否独占数据源,由于目前版本的类库还不支持独占方式,故该参数的值应该是false,这说明数据源是被共享的.
breadonly若为true则对数据源的连接是只读的.
lpszconnect指定了一个连接字符串,连接字符串中可以包括数据源名、用户帐号(id)和口令等信息,字符串中的"odbc"表示要连接到一个odbc数据源上.
busecursorlib若为true,则会装载光标库,否则不装载,快照需要光标库,动态集不需要光标库.
参考代码:
#include
"afxdb.h"
cdatabase
database
cstring
sdriver
=
"microsoft
access
driver
(*.mdb)"
cstring
sdsn
cstring
sfile
=
"c://works//readdb//test.mdb"//change
path
here
//
create
odbc
connection
dinamically
sdsn.format("odbcdriver={%s}dsn=''dbq=%s",sdriver,sfile)
//
open
the
database
database.open(null,false,false,sdsn)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)