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 打开该文件在里面填写相关的信息,如下图:
![](http://img.blog.csdn.net/20151118143139726?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
然后进行测试,当现实测试成功时表明可以了,然后以记事本的方法打开该文件,会发现里面会有相关的信息,这部分后面会用到。
在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());
}
运行以下,大功告成啦~~~~
首先在网站上下载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());
}
运行以下,大功告成啦~~~~
相关文章推荐
- mysqld --debug=d:t:i:O:n --user=mysql (源码调试)
- warehouse提供的免费oracle学习视频
- C#数据库编程---事务回滚
- oracle 11g ctss 集群时间同步服务几个要点
- mongodb基本使用
- 关于sql语句,select查询时很快,加了top + 数字之后就会很慢
- MySQL配置文件mysql.ini参数详解、MySQL性能优化
- Oracle 左连接、右连接、全外连接、(+)号作用、inner join(等值连接) (转载)
- Mysql 会导致锁表的语法
- Mysql图解安装向导
- 关于mySql中的自动增长值的设置
- Oracle 11g的7个服务说明
- 原生 MySQL API--查询数据的写法
- SQL 2008下载安装及问题解决
- (转)ORACLE SEQUENCE 详解 .
- tomcat使用memcached完成集群(session共享实现方式)
- MSM--Memcached_Session_Manager介绍及使用
- MySQL 记录中包含换行符
- 数据表表名或字段名为SQL关键字时Hibernate解决方案
- PLSQL 导入表到Oracle------》从一个表空间导入到其它表空间