在头文件中定义一个变量:
_RecordsetPtr pRst
CPP文件中:
pRst.CreateInstance("ADODB.Recordset")
pRst->Open("select *from表名 where 字段名='"+u+"'",_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText)//u是变量名
u的类型是_bstr_t 的,凡是变量的都是_bstr_t型的,
这样搞定之后,if(!pRst->rsEOF)
{
_variant_t p=pRst->GetCollect("表中的字段名")
}
把值取出,GetCollect("xxx")这个函数的返回值都是_variant_t型的,根据你的需要可以进行转化
例如:
_bstr_t a=(_bstr_t) p(p是_variant_t)型的,CString b=(LPCTSTR)a(a是_bstr_t型的),
int c=(long)p(p是_variant_t)型的,_variant_t d=(_variant_t)(long) c(c是int型的)
如果你的数据没有连接的话:
步骤如下:
用ADO连接SQL数据库
步骤如下:
1,在头文件"StdAfx.h"中导入#import "C:/Program Files/Common Files/System/ado/msado15.dll" no_namespace rename("EOF","rsEOF"),记住把这句话放到endif的后面,不然会报错,这样处理好之后,编译后又一个警告,可以忽略
2,在对话框的OnInitDialog()函数中写上"::CoInitialize(NULL)::AfxOleInit()” 在主程序的初始化函数中,它就可以写一次
3,在对话框类的头文件中,声明如下变量:_ConnectionPtr m_pConnection_RecordsetPtr pRst
连接数据库的代码如下:
try
{
hr=m_pConnection.CreateInstance("ADODB.Connection")
if(SUCCEEDED(hr))
{
hr=m_pConnection->Open("Provider=数据库的驱动器名称Integrated Security=SSPIPersist Security Info=FalseData Source=数据库服务器名Initial Catalog=连接的数据库名User ID=登陆数据库的名称Password=登陆数据库的密码","","",adModeUnknown)
}
}
catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage())
}
”数据库的驱动器名称“在控制面板里,以大图标查看,可以看到一个"ODBC",双击打开,在”驱动程序“里面在最下面有两个”SQL Server"和“SQL Native Client"如果你是2000的SQL版本,就选”SQL Server"及“Provider=SQL Server"2005的"Provider=SQL Native Client"Data Source=? ,?的值可以是”localhost"也可以是你的数据库服务器的名称,连接数据库的时候可以看到,复制一下就可以了。
有远程直接方法数据库的方法。大中型数据库基本都是网络数据库,如常见的ORACLE / MSSQL / MYSQL等。MFC编程,对这些数据库可以直接通过ADO进行查询和修改,常用的办法,就是用IP地址和实例(一般为默认)作为连接字符串中的SERVER即可。
对于网络型数据库(ACCESS、DBASE不在此列),你不需要做服务器端程序,只需要通过数据库支持的通讯协议和方法进行远程 *** 作即可。
你首先要创建一个连接数据库的对象,比如你用cdatabase连接数据库后,然后用crecordset对象去打开表,那你运行crecordset对象的open函数,其中select语句用下面的格式:select count(sysobjects.name )from sysobjects.xtype ='U'
在数据库的sysobjects表里有这个数据库全部表的信息, xtype值为'U'的就是表名;
然后调用movefirst;
然后调用crecordset的getfieldvalue函数既可以获取值;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)