1,连接数据库:
这个也是在网上有各种各样的方法,包括直接连接或者用DNS连接,大家多去试试肯定会有一种能行,这里说我的:
比如我的程序名叫ma的一个对话框,那么在Cmaapp里面的initialize函数里面添加:
BOOL CmaApp::InitInstance()
{
// 如¨?果?一°?个?运?行D在¨² Windows XP 上¦?的Ì?应®|用®?程¨¬序¨°清?单Ì£¤指?定¡§要°a
// 使º1用®? ComCtl32.dll 版ã?本À? 6 或¨°更¨¹高?版ã?本À?来¤¡ä启?用®?可¨¦视º¨®化¡¥方¤?式º?,ê?
//则¨°需¨¨要°a InitCommonControlsEx()。¡ê否¤?则¨°,ê?将?无T法¤¡§创ä¡ä建¡§窗ä¡ã口¨²。¡ê
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
// 将?它¨¹设¦¨¨置?为a包㨹括¤¡§所¨´有®D要°a在¨²应®|用®?程¨¬序¨°中D使º1用®?的Ì?
// 公?共2控?件t类¤¨¤。¡ê
InitCtrls.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls);
CWinApp::InitInstance();
//从这里开始时自己写的代码
AfxOleInit();
AfxEnableControlContainer();
if(FAILED(::CoInitialize(NULL)))
{
AfxMessageBox(L"ADO初?始º?化¡¥失º¡ì败㨹");
return false;
}
HRESULT hr;
try
{
hr=m_con.CreateInstance("ADODB.Connection");
if(SUCCEEDED(hr))
{
m_con->ConnectionTimeout=3;
_bstr_t str;
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连接通过,信誉保证!
另一个问题,就是有同学问我那么我不想要,在代码里面能够直接看到登陆名和密码怎么办,这个您可以进入下面的连接:
blog.csdn/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=Count.ival; 就把值给了int变量 a;
也可以直接用如下代码获取:
Int count=theapp.m_recordset->GetRecordCount();
注意:这是在ADO方式下,我以前用ODBC方式的GetRecordCount()函数获得的数据往往是1,很多人也在网上问:说为什么只能是1呢,或者没有。首先这说明用ODBC方式用该函数是不行的,我想该函数用1来表明有记录用0来表明没有记录吧,但是第一个方法ODBC方式
是能成功的,你们可以去试一试。
我之前在用ADO获取表中的字符串的时候总出现的是乱码的数字 还一直不知道原因:如下:
_variant_t var,name;
var=m_set->GetCollect("mid");
if(var.vt!=VT_NULL)
m_id=var.iVal;
name=(TCHAR*)_bstr_t(m_set->GetCollect("mname"));
if(name.vt!=VT_NULL)
m_name=(TCHAR*)_bstr_t(name.iVal);
id是数字而name是字符串 为啥字符串取出来总是乱码喃,我就不信初学者像我一样的没有
遇到这种问题,后来才发现,_variant_t 类型数据获取字符串应该是name.bstrval
即:
name=(TCHAR*)_bstr_t(m_set->GetCollect("mname"));
if(name.vt!=VT_NULL)
m_name=(TCHAR*)_bstr_t(name.bstrVal);
那么相应的如果是时间型数据的话:
m_time = COleDateTime::GetCurrentTime();//缺省时间为当前时间
sql sever 2008var=m_set->GetCollect("intime");
if(var.vt!=VT_NULL)
m_time=var.date;
但是,读出来之后发现时间总是1899-12-30,很明显这是个错误的时间
如果你用的是VS2010+sql2008,数据库里面日期类型用的是date,MFC里面对应的时间变量是系统里面自带的COleDateTime m_time;
那么要得到正确时间把上面的代码改成:
var=m_set->GetCollect("intime");
if(var.vt!=VT_NULL)
m_time=(COleDateTime)var;
强制转换成ColeDateTime就行了!
希望对有这种疑问的人有所帮助。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论