欢迎进入c/c++编程社区论坛,与200万技术人员互动交流 >>进入 (1)通过jet数据库引擎对access2000数据库的连接: m_pconnection-open(\provider=microsoft.jet.oledb.4.0; data source=c:\\\\test.mdb\,\\,\\,admodeunknown); (2)通过dsn数据源对任
欢迎进入c/c++编程社区论坛,与200万技术人员互动交流 >>进入
(1)通过jet数据库引擎对access2000数据库的连接:
m_pconnection->open(\provider=microsoft.jet.oledb.4.0;
data source=c:\\\\test.mdb\,\\,\\,admodeunknown);
(2)通过dsn数据源对任何支持odbc的数据库进行连接:
m_pconnection->open(\data source=adotest;uid=sa;pwd=;\,\\,\\,admodeunknown);
(3)不通过dsn对sql server数据库进行连接:
m_pconnection->open(\driver={sql server};server=127.0.0.1;database=vckbase;
uid=sa;pwd=139\,\\,\\,admodeunknown);
其中server是sql服务器的名称,database是库的名称。
connection对象除open()方法外还有许多方法,我们先介绍connection对象中两个有用的属性connectiontimeout与state。connectiontimeout用来设置连接的超时时间,需要在open之前调用,例如:
m_pconnection->connectiontimeout = 5;///设置超时时间为5秒
m_pconnection->open(\data source=adotest;\,\\,\\,admodeunknown);
state属性指明当前connection对象的状态,0表示关闭,1表示已经打开,我们可以通过读取这个属性来作相应的处理,例如:
if(m_pconnection->state)
m_pconnection->close(); ///如果已经打开了连接则关闭它
4、执行sql命令并取得结果记录集
为了取得结果记录集,我们定义一个指向recordset对象的指针:_recordsetptr m_precordset;
并为其创建recordset对象的实例: m_precordset.createinstance(\adodb.recordset\),sql命令的执行可以采用多种形式,下面我们一一进行阐述。
(1)利用connection对象的execute方法执行sql命令
execute()方法的原型如下所示:
_recordsetptr connection15::execute ( _bstr_t commandtext, variant * recordsaffected, long options )
其中commandtext是命令字串,通常是sql命令。参数recordsaffected是操作完成后所影响的行数, 参数options表示commandtext中内容的类型,options可以取如下值之一:adcmdtext表明commandtext是文本命令;adcmdtable表明commandtext是一个表名;adcmdproc表明commandtext是一个存储过程;adcmdunknown表明commandtext内容未知。execute()函数执行完后返回一个指向记录集的指针,下面我们给出具体代码并作说明:
_variant_t recordsaffected;
///执行sql命令:create table创建表格users,users包含四个字段:整形id,字符串username,整形old,日期型birthday
m_pconnection->execute(\create table users(id integer,username
text,old integer,birthday datetime)\,&recordsaffected,adcmdtext);
///往表格里面添加记录
m_pconnection->execute(\insert into users(id,username,old,birthday)
values (1, \'washington\',25,\'1970/1/1\')\,&recordsaffected,adcmdtext);
///将所有记录old字段的值加一
m_pconnection->execute(\update users set old = old+1\,&recordsaffected,adcmdtext);
///执行sql统计命令得到包含记录条数的记录集
m_precordset = m_pconnection->execute(\select count(*) from
users\,&recordsaffected,adcmdtext);
_variant_t vindex = (long)0;
_variant_t vcount = m_precordset->getcollect(vindex);///取得第一个字段的值放入vcount变量
m_precordset->close();///关闭记录集
cstring message;
message.format(\共有%d条记录\,vcount.lval);
afxmessagebox(message);///显示当前记录条数
(2)利用command对象来执行sql命令
_commandptr m_pcommand;
m_pcommand.createinstance(\adodb.command\);
_variant_t vnull;
vnull.vt = vt_error;
vnull.scode = disp_e_paramnotfound;///定义为无参数
m_pcommand->activeconnection = m_pconnection;///非常关键的一句,将建立的连接赋值给它
m_pcommand->commandtext = \select * from users\;///命令字串
m_precordset = m_pcommand->execute(&vnull,&vnull,adcmdtext);
//执行命令取得记录集
在这段代码中我们只是用command对象来执行了select查询语句,command对象在进行存储过程的调用中能真正体现它的作用。下次我们将详细介绍。 [1] [2] [3]