您的位置:首页 > 数据库

SQL Server r2 2008与VS2010相连接(ADO方式)

2015-11-18 14:23 302 查看
终于连上你,还好我没放弃,在经过四天的努力挣扎后,最后还是在孙大侠的指点后,才发现错误,竟然不是程序的错误,而是SQL 的设置问题,汗颜。。。

首先在网站上下载SQL Server R2 2008的安装包,然后对其安装,网站上都是有安装教程的,我安装的路径就是默认路径,然后再其中以SQL Server身份验证的方式登录。我设置的登录名是:sa 密码是:123456 这样就可以在其中建立新的数据库 取名为school 在其中建立表格sc 包含了sno cno 以及grade三项,并在表格中随便添加些内容,这样基本的数据库就建立好了,接下来就是如何使其与VS2010相连接。

为了测试是否可以连接上你所建立的数据库,首先新建一个txt文件,并将其后缀名修改成.udl 打开该文件在里面填写相关的信息,如下图:



然后进行测试,当现实测试成功时表明可以了,然后以记事本的方法打开该文件,会发现里面会有相关的信息,这部分后面会用到。

在VS2010中建立mfc界面,在stdafx.h的文件中添加代码:

#import "C://Program Files//Common Files//System//ado//msado15.dll" no_namespace rename("EOF","adoEOF")rename("BOF","adoBOF")

在对话框窗口中添加了一个连接数据库按钮,一个添加数据库中的数据按钮,以及一个list列表,用于显示数据库中的信息,

首先在OnInitDialog()中添加以下代码:

m_list.ModifyStyle(0, LVS_REPORT);

m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);

m_list.InsertColumn(0, _T("学号"), LVCFMT_CENTER, 200);

m_list.InsertColumn(1, _T("课程号"), LVCFMT_CENTER, 150);

m_list.InsertColumn(2, _T("学分"), LVCFMT_CENTER,200);

在连接数据库按钮下添加以下代码:

// TODO: 在此添加控件通知处理程序代码

::CoInitialize(NULL); //初始化OLE/COM库环境

HRESULT hr = NULL;

try

{

hr = m_pConnection.CreateInstance(_uuidof(Connection));//创建连接对象实例

if (SUCCEEDED(hr))

{

m_pConnection->ConnectionString =("Provider = SQLOLEDB.1; Persist Security Info =True; User ID = sa; Password=123456; Initial Catalog = school; Data Source = (local)");

//local是数据库连接中服务器的名字,这部分是在之前用记事本的方式打开的文件中可以看到

hr = m_pConnection->Open("", "", "", adConnectUnspecified);//打开数据库

AfxMessageBox(_T("连接成功"));

if (FAILED(hr))

{

AfxMessageBox(_T("Open Failed!"));

}

}

else

{

AfxMessageBox(_T("Create instance of connection failed!"));

}

}

catch (_com_error e)

{

CString temp;

temp.Format(_T("数据库连接错误\r\n错误信息为:%s"), e.ErrorMessage());

AfxMessageBox(temp);

}

在添加数据按钮下添加以下代码:

// TODO: 在此添加控件通知处理程序代码

try

{

m_pRecordset.CreateInstance("ADODB.Recordset");

m_pRecordset->Open("select sno, cno, grade from sc",

_variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText);

}

catch (_com_error &e)

{

AfxMessageBox(e.Description());

}

_variant_t sno, cno, grade;

try

{

int num = m_list.GetItemCount();

while (!m_pRecordset->adoEOF)

{

CString sno= (_bstr_t)(m_pRecordset->Fields->GetItem(_variant_t("sno"))->Value);

CString cno = (_bstr_t)(m_pRecordset->Fields->GetItem(_variant_t("cno"))->Value);

CString grade = (_bstr_t)(m_pRecordset->Fields->GetItem(_variant_t("grade"))->Value);

m_list.InsertItem(num, sno);

m_list.SetItemText(num, 1, cno);

m_list.SetItemText(num , 2, grade);

num++;

m_pRecordset->MoveNext();

}

}

catch (_com_error &e)

{

AfxMessageBox(e.Description());

}

运行以下,大功告成啦~~~~

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: