0. 连接数据库的代码
CString strConnect;
strConnect.Format("Provider=SQLOLEDB.1;Persist Security Info=TRUE;UID=sa;PWD=jiaojinge;Initial Catalog=Mydbse");//PWD是在数据库安全性里面设置的,Catalog是数据库名
if (FAILED(m_pConnection->Open((_bstr_t)strConnect,"","",adModeUnknown)))
{
AfxMessageBox("Can not open Database!");
m_pConnection.Release();
}
1.首先要定义几个接口的变量,记得在用之前要用CreateInstance(“ADODB.Command”)
或者这样写CreateInstance(__uuidof(Connection)); 具体代码如下:
::CoInitialize(NULL); //初始化com库
try
{
if (FAILED(m_pConnection.CreateInstance(__uuidof(Connection))))
{
AfxMessageBox("Create Instance failed!");
return;
}
// AfxMessageBox("连接成功");
}
catch(_com_error e)
{
AfxMessageBox(e.Description());
}
2.记得导入ADO库,在stdafx.h文件的最后面(谨记)导入,不是其他地方;也可以在
CxxApp中导入
3.打开记录集
CString sql;
sql.Format("select * from Stu_grade");
_bstr_t Varsql=sql.AllocSysString();
try
{
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),/
adOpenDynamic,adLockOptimistic,adCmdText);
}
catch(_com_error e)
{
AfxMessageBox(e.Description());
}
4.在数据库中添加和修改记录以及获取记录用到的函数
1. 添加记录函数PutCollect()
m_ado.m_pRecordset->PutCollect("Chinese",_variant_t(strchinese));//第一个变量时字段名,第二个是添加的值,注意类型,类型转换后面会讲到。(这里strchinese已经是CString类型)
m_ado.m_pRecordset->PutCollect("Id",_variant_t((long)m_id));//对于int类型记得要先转换成long
2.获取记录GetItem()和GetCollect()
获取字段值:
varname=m_ado.m_pRecordset->GetCollect("Name");//其中varname是_variant_t类型
Varname=m_ado.m_pRecordset->Fields->GetItem("Password")->Value
修改字段值:
法一:m_ado.m_pRecordset->Fields->GetItem("Password")->Value=(_bstr_t)m_secrate;
法二:m_ado.m_pRecordset->Fields->GetItem((long)8)->PutValue((_bstr_t)straverage);//GetItem中的参数是列号。
5.数据类型的转换
1.将_variant_t转换成CString类型:
CString strpassword=(char*)_bstr_t(varpassword);
2.将CString类型转化成_bstr_t
CString str;
str.Format("delete from Stu_base_info where Id='%d'",m_id);
_bstr_t varstr=str.AllocSysString();
也可以通过直接赋值的方式转化
详细转化见下表:
将其他数据类型转化成字符串类型
源类型 |
函数 |
示例 |
短整形 |
Itoa(int,char*,int) |
itoa(i,temp,10);//将i转化为字符串放入temp中,十进制表示 |
长整形 |
ltoa(long,char*,int) |
和上面差不多 |
浮点型 |
fcvt(double,int,int*,int*) |
具体见MSDN,不知道怎么回事,用这种方法转化,后面的值老是会覆盖之前转化的值,转一个数据不会出错,多了就不行 |
BSTR变量 |
ConvertBSTRToString(BSTR pSrc) |
BSTR bstrValue=::SysAllocString(L(“程序员”); Char *buf=_com_util::ConvertBSTRToString(bstrValue); SysFreeString(bstrValue); AfxMessageBox(buf); Delete(buf); |
_bstr_t变量 |
可直接赋值 |
直接赋值 |
字符串转化成其他类型
目标类型 |
函数 |
示例 |
Int |
atoi(const char*) |
i=atoi(temp) |
long |
atol(const char*) |
L=atol(temp) |
Float |
atof(const char*) |
d=atof(temp); |
BSTR变量 |
SysAllocString(const OLECHAR*); SysFreeString(BSTR); |
BSTR bstrValue=::SysAllocString(L”程序”); //完成对bstrValue的使用 SysFreeString(bstrValue); |
_bstr_t |
直接赋值 |
直接赋值 |
其他类型转换成CString类型
CString str;
Str.Format(“%d”,i);