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

终于连上你,还好我没放弃,在经过四天的努力挣扎后,最后还是在孙大侠的指点后,才发现错误,竟然不是程序的错误,而是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());
}

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


  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值