VC6.0中用ADO连接SQL2000

今儿动手在vc6.0中用ADO连接了数据库。把我遇到的问题和解决方法做个记录吧!
遇到这么几个问题:
1.导入msado15.dll出现错误fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include ;
2.连接数据库的时候出现错误:用户 'sa' 登录失败。原因: 未与信任 SQL Server 连接相关联;
3. _variant_t向CString转换的时候出现错误;
4. GetCollect的参数设置为*号的时候就出错了;
借助网上的指导和帮助手册,验证以下解决方法是可行的。
问题一:将#import "c:/Program Files/Common Files/System/ado/msado15.dll" no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF")加到头文件staafx.h的末尾,不要加在开头,http://topic.csdn.net/t/20020425/20/676815.html这里有一个相关的讨论;
问题二:是身份验证出现问题了。借助popm的方法:1 打开SQL Server企业管理器。 2 选择服务器名称上右键选择“编辑SQL Server注册属性”,然后在对话框中选择“使用windows身份验证”。 3 试试一试,不行。在看看安全性设置 4 同样右键,选择“属性”,然后打开“安全性”选项卡。 5 在选项卡中,选择身份验证为“SQL Server和 Windows ”,其他不变 6 、OK,成功了;
问题三:_variant_t可以说是任意类型,但是我们从数据库中取出的数据必定是有特定数据类型。必然要转换。我在vc6.0环境中直接用CString强制类型没有通过编译,但是网上有人说编译通过了,不得解。看了类 _variant_t的成员中有个变量vt就是标记数据的类型的,我们可以根据这个东西进行数据类型的判断了,这里可以用switch语句逐一判断.然后用_variant_t的成员函数进行类型转换就可以了。以转换为CString为例:_variant_t temp=m_pRecordset->GetCollect("name");CString str=temp. bstrVal;以上就可以完成转换了;
问题四应该只是一个小的问题,我在做实验的时候想将从数据库中读出的每行数据直接显示到listbox里面就想读一行所以想用*替代属性标签,实验验证没有成功。
附上vc6.0中用ADO连接SQL2000的代码:
//在stdafx.h的后面加上下面语句,
#import "c:/Program Files/Common Files/System/ado/msado15.dll" no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF")
//在类的某处做如下定义
_RecordsetPtr m_pRecordset;
_ConnectionPtr m_pConnection;
//在要用到数据库的地方写以下代码
::CoInitialize(NULL);//初始化
try{
m_pConnection.CreateInstance(_uuidof(Connection));
_bstr_t strCon="Provider=SQLOLEDB;datasource=127.0.0.1;database=whu;uid=sa;pwd=;";//之一了strCon是_bstr_t
类型的,whu是数据库的名字
m_pConnection->Open(strCon,"","",0);
}catch(_com_error e){
AfxMessageBox(e.Description());
}
//以上连接好了数据库,下面打开记录集。接着上面的代码写以下代码
m_pRecordset.CreateInstance(_uuidof(Recordset));
CString sqlStr=_T("select * from classic");//classic是表的名字
BSTR sql=sqlStr.AllocSysString();//要构造需要的数据类型
m_pRecordset->Open(sql,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText);
//数据库也连接上了,记录集也打开了接下来可以操作数据库了
while(!m_pRecordset->adoEOF){
……
m_pRecordset->MoveNext();
}
以上的循环的方式是经常用的用来遍历数据库的方法。
建议:上面的一些类和函数,例如_RecordsetPtr和adoEOF等等,多去查查他的成员和成员是怎么用的。能连接上sql2000,扩展其他数据
库的探索就简单多了。
  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

pty_2007

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值