1
2
3
4
5
6
7
8
|
//Command因为参数无法清空,不太好操作,所以在此使用实时创建
_CommandPtr pCmd(__uuidof(Command));
pCmd->ActiveConnection=m_conn;
pCmd->CommandText=
"select * from 帐号 where 昵称=? and 密码=?"
;
pCmd->Parameters->Append(pCmd->CreateParameter(_bstr_t(
""
),adVarChar,adParamInput,20,accounts_name));
pCmd->Parameters->Append(pCmd->CreateParameter(_bstr_t(
""
),adVarChar,adParamInput,20,accounts_password));
m_rst=pCmd->Execute(NULL,NULL,adCmdText);
pCmd.Release();
|
上面的代码是使用ADO参数化查询的一个示例,但是它只适用于字符串类型。以前学VB中这种应用是比较简单的,但是VC中COM没封装,比较复杂。
我们日常使用中一般主要是使用int,double,string,datetime类型,请问能否就这4种类型变量给个完整的示例?或者给个网址我自己学习也行。MSDN上我没查到,给个MSDN目录路径也行。
补充一下:
上面的代码是给command对象提供参数,我想要的是怎么从recordset中提取值,我已经查到这两种值的读取方法,string和double类型怎么提取呢?
1、数字型数据的读取
_variant_t 是COM中的数据类型,实际上是个集合类,在ADO中可以通过判断_variant_t中的VT的类型,来判断出他的类型比如
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
_variant_t var;
CString str;
switch
(var.vt)
{
case
VT_I2:
strRet.Format(_T(
"%hd"
),V_I2(&var));
break
;
case
VT_I4:
strRet.Format(_T(
"%d"
),V_I4(&var));
break
;
case
VT_R4:
strRet.Format(_T(
"%f"
),V_R4(&var));
break
;
case
VT_R8:
strRet.Format(_T(
"%f"
),V_R8(&var));
break
;
default
:
break
;
}
|
2、CTime类型的读取
如果你的数据库表的字段是datetime类型的话,
1
2
3
4
5
6
7
8
9
10
11
|
_variant_t var=m_pRecordSet->GetCollect(
"ZHXGRQ"
);
time_t
lTime=0;
if
(var.vt!=NULL)
{
CTime tempTime(((COleDateTime)var).GetYear(),
((COleDateTime)var).GetMonth(),
((COleDateTime)var).GetDay(),
((COleDateTime)var).GetHour(),
((COleDateTime)var).GetMinute(),
((COleDateTime)var).GetSecond());
}
|
CString s;
s.Format("select * from 帐号 where 昵称='%s' and 密码=%d",name,pwd)