2023年6月21日发(作者:)

1,连接数据库:

这个也是在网上有各种各样的方法,包括直接连接或者用DNS连接,大家多去试试肯定会有一种能行,这里说我的:

比如我的程序名叫ma的一个对话框,那么在Cmaapp里面的initialize函数里面添加:

BOOL CmaApp::InitInstance()

{

ê?

hr=m_Instance("tion");

if(SUCCEEDED(hr))

{

m_con->ConnectionTimeout=3;

_bstr_t str;

try

{

CWinApp::InitInstance();

AfxOleInit();

AfxEnableControlContainer();

if(FAILED(::CoInitialize(NULL)))

{

}

HRESULT hr;

AfxMessageBox(L"ADO初?始º?化¡¥失º¡ì败㨹");

return false;

//从这里开始时自己写的代码

//则¨°需¨¨要°a InitCommonControlsEx()。¡ê否¤?则¨°,ê?将?无T法¤¡§创ä¡ä建¡§窗ä¡ã口¨²。¡ê

INITCOMMONCONTROLSEX InitCtrls;

= sizeof(InitCtrls);

// 将?它¨¹设¦¨¨置?为a包㨹括¤¡§所¨´有®D要°a在¨²应®|用®?程¨¬序¨°中D使º1用®?的Ì?

// 公?共2控?件t类¤¨¤。¡ê

= ICC_WIN95_CLASSES;

InitCommonControlsEx(&InitCtrls);

// 如¨?果?一°?个?运?行D在¨² Windows XP 上¦?的Ì?应®|用®?程¨¬序¨°清?单Ì£¤指?定¡§要°a

// 使º1用®? 版ã?本À? 6 或¨°更¨¹高?版ã?本À?来¤¡ä启?用®?可¨¦视º¨®化¡¥方¤?式º?,

m_con->Open("Provider=SQLOLEDB;server=LIYI;Uid=sa;Pwd=libuyibu2332;Database=weist","","",adModeUnknown);

}

catch(_com_error e)

{

AfxMessageBox(L"数ºy据Y库a连¢?接¨®失º¡ì败㨹");

}

}

return false;

绿色一行,为最重要的连接代码,其中provider就是数据库的提供者,我用sql 那么提供者就是SQLOLEDB不用管版本的问题,第二个参数就是服务器嘛,我自己的电脑名字叫做LIYI那么我直接写就行了,要是用于网络通信肯定写数据库所在电脑的IP地址,比如本地当然就是127,0,0,1(好像是哈,要不是的话,烦请再去问问呗)接下来是登陆名和密码,就和我上次的文档《VS2010的ADO和ODBC方式连接sql 2008》(其中还把ODBC写成了OBDC)里说的一样,您需要在安装SQL 2008时选择混合模式,并且给sa用户设置密码,最后一个就是你的数据库的名字,比如我这里的weist数据库,最后是读写模式,我设置为缺省模式,也有读写模式,只读模式或者只写模式等。该代码在上述我说的VS2010MFC+SQL Server 2008连接通过,信誉保证!

另一个问题,就是有同学问我那么我不想要,在代码里面能够直接看到登陆名和密码怎么办,这个您可以进入下面的连接:

/zyq5945/article/details/5586423

他里面就写得很清楚了,呵呵。偷偷懒,自己去看吧!

2,获取表中项目条数,很多网上去问大家都说了很多方法,其中有SELECT COUNT FROM

database(你的数据库),那么你执行了以后,怎么把这个条数取出来喃?

比如说ADO方式:

m_pRecordset = m_pConnection->Execute("SELECT COUNT(*) FROM

database",&RecordsAffected,adCmdText);

_variant_t Count = m_pRecordset->GetCollect(short(0));///取得第一个字段的值放入vCount变量

就行了

Int a=; 就把值给了int变量 a;

也可以直接用如下代码获取:

Int count=theapp.m_recordset->GetRecordCount();

注意:这是在ADO方式下,我以前用ODBC方式的GetRecordCount()函数获得的数据往往是1,很多人也在网上问:说为什么只能是1呢,或者没有。首先这说明用ODBC方式用该函数是不行的,我想该函数用1来表明有记录用0来表明没有记录吧,但是第一个方法ODBC方式是能成功的,你们可以去试一试。

我之前在用ADO获取表中的字符串的时候总出现的是乱码的数字 还一直不知道原因:如下:

_variant_t var,name;

name=(TCHAR*)_bstr_t(m_set->GetCollect("mname"));

if(!=VT_NULL)

m_name=(TCHAR*)_bstr_t();

var=m_set->GetCollect("mid");

if(!=VT_NULL)

m_id=;

id是数字而name是字符串 为啥字符串取出来总是乱码喃,我就不信初学者像我一样的没有遇到这种问题,后来才发现,_variant_t 类型数据获取字符串应该是l

即:

name=(TCHAR*)_bstr_t(m_set->GetCollect("mname"));

if(!=VT_NULL)

m_name=(TCHAR*)_bstr_t(l);

那么相应的如果是时间型数据的话:

m_time = COleDateTime::GetCurrentTime();//缺省时间为当前时间

var=m_set->GetCollect("intime");

if(!=VT_NULL)

m_time=;

但是,读出来之后发现时间总是1899-12-30,很明显这是个错误的时间

如果你用的是VS2010+sql2008,数据库里面日期类型用的是date,MFC里面对应的时间变量是系统里面自带的COleDateTime m_time;

那么要得到正确时间把上面的代码改成:

var=m_set->GetCollect("intime");

if(!=VT_NULL)

m_time=(COleDateTime)var;

强制转换成ColeDateTime就行了!

希望对有这种疑问的人有所帮助。

2023年6月21日发(作者:)

1,连接数据库:

这个也是在网上有各种各样的方法,包括直接连接或者用DNS连接,大家多去试试肯定会有一种能行,这里说我的:

比如我的程序名叫ma的一个对话框,那么在Cmaapp里面的initialize函数里面添加:

BOOL CmaApp::InitInstance()

{

ê?

hr=m_Instance("tion");

if(SUCCEEDED(hr))

{

m_con->ConnectionTimeout=3;

_bstr_t str;

try

{

CWinApp::InitInstance();

AfxOleInit();

AfxEnableControlContainer();

if(FAILED(::CoInitialize(NULL)))

{

}

HRESULT hr;

AfxMessageBox(L"ADO初?始º?化¡¥失º¡ì败㨹");

return false;

//从这里开始时自己写的代码

//则¨°需¨¨要°a InitCommonControlsEx()。¡ê否¤?则¨°,ê?将?无T法¤¡§创ä¡ä建¡§窗ä¡ã口¨²。¡ê

INITCOMMONCONTROLSEX InitCtrls;

= sizeof(InitCtrls);

// 将?它¨¹设¦¨¨置?为a包㨹括¤¡§所¨´有®D要°a在¨²应®|用®?程¨¬序¨°中D使º1用®?的Ì?

// 公?共2控?件t类¤¨¤。¡ê

= ICC_WIN95_CLASSES;

InitCommonControlsEx(&InitCtrls);

// 如¨?果?一°?个?运?行D在¨² Windows XP 上¦?的Ì?应®|用®?程¨¬序¨°清?单Ì£¤指?定¡§要°a

// 使º1用®? 版ã?本À? 6 或¨°更¨¹高?版ã?本À?来¤¡ä启?用®?可¨¦视º¨®化¡¥方¤?式º?,

m_con->Open("Provider=SQLOLEDB;server=LIYI;Uid=sa;Pwd=libuyibu2332;Database=weist","","",adModeUnknown);

}

catch(_com_error e)

{

AfxMessageBox(L"数ºy据Y库a连¢?接¨®失º¡ì败㨹");

}

}

return false;

绿色一行,为最重要的连接代码,其中provider就是数据库的提供者,我用sql 那么提供者就是SQLOLEDB不用管版本的问题,第二个参数就是服务器嘛,我自己的电脑名字叫做LIYI那么我直接写就行了,要是用于网络通信肯定写数据库所在电脑的IP地址,比如本地当然就是127,0,0,1(好像是哈,要不是的话,烦请再去问问呗)接下来是登陆名和密码,就和我上次的文档《VS2010的ADO和ODBC方式连接sql 2008》(其中还把ODBC写成了OBDC)里说的一样,您需要在安装SQL 2008时选择混合模式,并且给sa用户设置密码,最后一个就是你的数据库的名字,比如我这里的weist数据库,最后是读写模式,我设置为缺省模式,也有读写模式,只读模式或者只写模式等。该代码在上述我说的VS2010MFC+SQL Server 2008连接通过,信誉保证!

另一个问题,就是有同学问我那么我不想要,在代码里面能够直接看到登陆名和密码怎么办,这个您可以进入下面的连接:

/zyq5945/article/details/5586423

他里面就写得很清楚了,呵呵。偷偷懒,自己去看吧!

2,获取表中项目条数,很多网上去问大家都说了很多方法,其中有SELECT COUNT FROM

database(你的数据库),那么你执行了以后,怎么把这个条数取出来喃?

比如说ADO方式:

m_pRecordset = m_pConnection->Execute("SELECT COUNT(*) FROM

database",&RecordsAffected,adCmdText);

_variant_t Count = m_pRecordset->GetCollect(short(0));///取得第一个字段的值放入vCount变量

就行了

Int a=; 就把值给了int变量 a;

也可以直接用如下代码获取:

Int count=theapp.m_recordset->GetRecordCount();

注意:这是在ADO方式下,我以前用ODBC方式的GetRecordCount()函数获得的数据往往是1,很多人也在网上问:说为什么只能是1呢,或者没有。首先这说明用ODBC方式用该函数是不行的,我想该函数用1来表明有记录用0来表明没有记录吧,但是第一个方法ODBC方式是能成功的,你们可以去试一试。

我之前在用ADO获取表中的字符串的时候总出现的是乱码的数字 还一直不知道原因:如下:

_variant_t var,name;

name=(TCHAR*)_bstr_t(m_set->GetCollect("mname"));

if(!=VT_NULL)

m_name=(TCHAR*)_bstr_t();

var=m_set->GetCollect("mid");

if(!=VT_NULL)

m_id=;

id是数字而name是字符串 为啥字符串取出来总是乱码喃,我就不信初学者像我一样的没有遇到这种问题,后来才发现,_variant_t 类型数据获取字符串应该是l

即:

name=(TCHAR*)_bstr_t(m_set->GetCollect("mname"));

if(!=VT_NULL)

m_name=(TCHAR*)_bstr_t(l);

那么相应的如果是时间型数据的话:

m_time = COleDateTime::GetCurrentTime();//缺省时间为当前时间

var=m_set->GetCollect("intime");

if(!=VT_NULL)

m_time=;

但是,读出来之后发现时间总是1899-12-30,很明显这是个错误的时间

如果你用的是VS2010+sql2008,数据库里面日期类型用的是date,MFC里面对应的时间变量是系统里面自带的COleDateTime m_time;

那么要得到正确时间把上面的代码改成:

var=m_set->GetCollect("intime");

if(!=VT_NULL)

m_time=(COleDateTime)var;

强制转换成ColeDateTime就行了!

希望对有这种疑问的人有所帮助。