个人觉得,数据库操作连接和操作上手很快,但是那些类型总是会让你头疼 目前我还没搞清楚用怎么从T-SQL 的decimal技术到MFC中相应的数据?? 将一下数据库连接的步骤 一:加载动态链接库 #import C:\Program Files\Common Files\System\ADO\msado15.dll \ no

个人觉得,数据库操作连接和操作上手很快,但是那些类型总是会让你头疼

目前我还没搞清楚用怎么从T-SQL 的decimal技术到MFC中相应的数据??

将一下数据库连接的步骤

一:加载动态链接库

#import "C:\Program Files\Common Files\System\ADO\msado15.dll" \

no_namespace rename("EOF", "EndOfFile")

讲一下这句话什么意思,就是导入动态链接库,否则你的那个什么ptrConn,ptrRecord连接指针,都会在编译的时候报错

第二个rename,EOF替换成,EndOfFile是为了在从记录集Recordset取出来时候,判断是否到达了结尾

如果是到达了结尾,那么就会返回非VARIANT_FALSE

二:声明连接指针和记录集

_ConnectionPtr ptrConn; // 定义Connection对象

_RecordsetPtr ptrRecord;

三:创建连接

CoInitialize(NULL); //不要忘记了,否则指针全部为空,无效

try//打开连接

{

// 创建一个连接实体

ptrConn.CreateInstance(__uuidof(Connection));

// 设定连接等待的最大秒数,默认是15秒

ptrConn->ConnectionTimeout = 20;

// 打开连接

ptrConn->Open("driver={SQL server};server=127.0.0.1;uid=laicb;pwd=616458;database=DBCourse",

"",//登录用户名

"",//登录密码

adConnectUnspecified);//打开连接

}

catch(_com_error &e)--捕获异常

{

CString str;

CString strTemp;

str.Format(TEXT("Error:\n"));

strTemp.Format(TEXT("Code = %08lx\n"), e.Error());

str+="\n";

str+=strTemp;

strTemp.Format(TEXT("Meaning = %s\n"), e.ErrorMessage());

str+="\n";

str+=strTemp;

strTemp.Format(TEXT("Source = %s\n"), (wchar_t*) e.Source());

str+="\n";

str+=strTemp;

strTemp.Format(TEXT("Description = %s\n"), (wchar_t*) e.Description());

str+="\n";

str+=strTemp;

MessageBox(str);

}四:打开记录集,初始化记录集

try

{

//_RecordsetPtr ptrRS; // recordset 对象

// 创建recordset 对象实体

ptrRecord.CreateInstance(__uuidof(Recordset));//有些时候如果记录级背使用过了,可能需要重新创建实例,然后再打开

ptrRecord->Open("select * from dbo.StaffInfo",///为什么把这里的数据库改成dbo.StaffRecord时候,列表框就显示全为空

ptrConn.GetInterfacePtr(),

adOpenKeyset, //注意在VB说明文档时候,首字母a是大写的,在C++中应该小写

adLockBatchOptimistic,

adCmdText);

//int j= ptrRecord->RecordCount;

//或者

//ptrRS = ptrConn ->Execute(m_ strSql,NULL, adCmdText);

}

catch(_com_error &e)

{

CString str;

CString strTemp;

str.Format(TEXT("Error:\n"));

strTemp.Format(TEXT("Code = %08lx\n"), e.Error());

str+="\n";

str+=strTemp;

strTemp.Format(TEXT("Meaning = %s\n"), e.ErrorMessage());

str+="\n";

str+=strTemp;

strTemp.Format(TEXT("Source = %s\n"), (wchar_t*) e.Source());

str+="\n";

str+=strTemp;

strTemp.Format(TEXT("Description = %s\n"), (wchar_t*) e.Description());

str+="\n";

str+=strTemp;

MessageBox(str);

}五,执行语句

try

{

ptrConn->Execute("select * from dbo.Login",NULL,adCmdText);

ptrRecord->MoveFirst();//加了这句这会就可以取出数据了,可能是上一个父亲指针已经把其移动到最后了

int i= ptrRecord->RecordCount;//如果把游标从动态到记录集,那么这个参数就有用

while(ptrRecord->EndOfFile==VARIANT_FALSE)

{

_variant_t va;

_variant_t str;

va.vt=VT_I4;

va.lVal=0;

str = ptrRecord->Fields->GetItem(va)->Value;

CString strGetID((wchar_t*)(_bstr_t)str);

str = ptrRecord->Fields->GetItem(short(1))->Value;

CString strGetSerect((wchar_t*)(_bstr_t)str);

strGetID.TrimRight();

strGetSerect.TrimRight();

right=ptrRecord->Fields->GetItem(short(2))->Value.intVal;

if(strGetID==strID&&strGetSerect==strSerect)

{

isadmin=true;

}

ptrRecord->MoveNext();

}

}

catch(_com_error &e)

{

CString str;

CString strTemp;

str.Format(TEXT("Error:\n"));

strTemp.Format(TEXT("Code = %08lx\n"), e.Error());

str+="\n";

str+=strTemp;

strTemp.Format(TEXT("Meaning = %s\n"), e.ErrorMessage());

str+="\n";

str+=strTemp;

strTemp.Format(TEXT("Source = %s\n"), (wchar_t*) e.Source());

str+="\n";

str+=strTemp;

strTemp.Format(TEXT("Description = %s\n"), (wchar_t*) e.Description());

str+="\n";

str+=strTemp;

AfxMessageBox(str);

}Connection::Execute来执行SQL语句,如果有返回结果的,那么就返回Recordset,如果无需返回的就可以直接执行

取出查询结果是

ptrRecord->Fields->GetItem(va)->Value;ptrRecord->Fields->GetItem(va)->Name;va是_variant_t va;

va.vt=VT_I4;

va.lVal=0;也可以这样ptrRecord->Fields->GetItem(short(0))->Name;返回结果是

while(ptrRecord->EndOfFile==VARIANT_FALSE){取出结果集ptrRecord->MoveNext();}

有些时候,如果你的结果集已经被全部取出来的时候,也就是你的结果集已经到了非VARIANT_FALSE这时候你就需要重新创建实例,然后打开,ptrRecord.CreateInstance(__uuidof(Recordset));//有些时候如果记录级背使用过了,可能需要重新创建实例,然后再打开

ptrRecord->Open("select * from dbo.StaffInfo",///为什么把这里的数据库改成dbo.StaffRecord时候,列表框就显示全为空

ptrConn.GetInterfacePtr(),

adOpenKeyset, //注意在VB说明文档时候,首字母a是大写的,在C++中应该小写

adLockBatchOptimistic,

adCmdText);

这样你才能重新使用,不然好像MoveFirst,么有用啊另外如果你结果集在某处调用了close,那么你再次使用的时候一定要执行上面这段语句,否则会报说记录集已经关闭了,wufa使用

六:Command对象的使用

try

{

// Create Connection Object (1.5 Version)

Conn1.CreateInstance( __uuidof( Connection ) );

Conn1->ConnectionString = bstrConnect;

Conn1->Open( bstrEmpty, bstrEmpty, bstrEmpty, -1 );

// Create Command Object

Cmd1.CreateInstance( __uuidof( Command ) );

Cmd1->ActiveConnection = Conn1;

Cmd1->CommandText = _bstr_t("SELECT * FROM mytable WHERE age< ?");

然后执行就可以了cmd1->Execute就OK了

结束:

一些释放操作,置空操作

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

ado mfc mysql_MFC 中用ADO访问数据库相关推荐

  1. VC用ADO访问数据库全攻略  作者 相生昌

    VC用ADO访问数据库全攻略 作者 相生昌 <script language=VBScript> document.title="VC用ADO访问数据库全攻略 "&am ...

  2. 在Visual C++中用ADO进行数据库编程(上)

    在Visual C++中用ADO进行数据库编程(上)         1. 生成应用程序框架并初始化OLE/COM库环境 创建一个标准的MFC AppWizard(exe)应用程序,然后在使用ADO数 ...

  3. VC用ADO访问数据库全攻略

    一.ADO概述 ADO是Microsoft为最新和最强大的数据访问范例 OLE DB 而设计的,是一个便于使用的应用程序层接口.ADO 使您能够编写应用程序以通过 OLE. DB 提供者访问和操作数据 ...

  4. 在Visual C++中用ADO进行数据库编程(中)

    在Visual C++中用ADO进行数据库编程(中)         4.执行SQL命令并取得结果记录集 为了取得结果记录集,我们定义一个指向Recordset对象的指针:_RecordsetPtr ...

  5. 在Visual C++中用ADO进行数据库编程(下)

    在Visual C++中用ADO进行数据库编程(下)         5. 记录集的遍历.更新 根据我们刚才通过执行SQL命令建立好的users表,它包含四个字段:ID,username,old,bi ...

  6. 使用ADO或ADO控件访问数据库

    目录: 1.数据库的基础知识以及创建Access数据库 2.数据库的接口 3.使用ADO或ADO控件访问数据库 上篇文章,为大家讲解了数据库的接口,大家对ADO也有了较为基础的了解,这篇文章主要解决大 ...

  7. VS2013在MFC中使用ADO方法操作Access2013数据库

    1. 首先创建一个基于对话框的MFC应用程序ADO_ACCESS.sln.然后在stdafx.h头文件末尾添加(网上有说在某个#include后面的添加的,也有说在合适位置添加的,我这里直接添加在最末 ...

  8. asp.net学习之ado.net(连接模式访问)

    ado.net框架支持两种模式的数据访问: 连接模式(Connected)和非连接模式(disconnected).这一节介绍如何使用连接模式访问数据库中的数据,利用ADO.NET中的Connecti ...

  9. ado.net 操作mysql_ADO.NET操作数据库(一)

    ---恢复内容开始--- [1]ADO.Net简介2015-12-07-20:16:05 ADO.Net提供对Microsoft SQL Server数据源以及通过OLE DB和XML公开的数据源的一 ...

最新文章

  1. HTTP协议Etag详解
  2. Adaboost 2
  3. Flume监控几种方式
  4. ShardingSphere RAW JDBC 分布式事务 Narayana XA 代码示例
  5. java可视化编程软件有哪些_几款Java开发者必备常用的工具,准点下班不在话下...
  6. 手机电脑自适应导航源码php,自适应各终端懒人网址导航源码 v1.6
  7. 连载31:软件体系设计新方向:数学抽象、设计模式、系统架构与方案设计(简化版)(袁晓河著)...
  8. 史海峰:我的架构师修炼之道
  9. 百度云apkg手机文件怎么打开_下载不限速,这款网盘软件,轻松秒杀百度云!...
  10. 根据pix飞控log文件和photo文件夹建立pos文件,提取pos数据小程序
  11. java设计模式的六大原则
  12. java 银行存取款_使用JAVA编写一个简单的银行存取款程序
  13. 一切就绪,2019年新型智慧城市峰会将展现怎样的“新益阳”
  14. C语言之strtok函数
  15. 哈佛医生帮你增强记忆力
  16. python学习第九天
  17. 软件工程-----层次图
  18. 计算机怎么重装win7,如何重装电脑系统win7,最新电脑重装系统教程
  19. OSChina 周一乱弹 —— 终于可以尝尝冷水泡面了
  20. 计算机毕业答辩开场白,论文答辩流程及开场白_论文答辩三分钟开场白

热门文章

  1. 如何让Log4net日志文件按每月归成一个文件夹,StaticLogFileName参数的用法
  2. aspxgridview的取值
  3. 安卓(android)建立项目时失败,出现Android Manifest.xml file missing几种解决方法?(总结中)
  4. 没业绩怎么写好年终总结?这样写总结年终奖翻倍!
  5. 推荐系统的公平性:用户侧与生产侧
  6. ICML 2019 | 强化学习用于推荐系统,蚂蚁金服提出生成对抗用户模型(附论文下载链接)...
  7. 【报告分享】中金103页区块链行业报告:区块链与数字货币,科技如何重塑金融基础设施.pdf(附下载链接)
  8. 软件测试第一部分——初步概念与过程
  9. data2vec!统一模态的新里程碑
  10. Github 15K! 亿级向量相似度检索库Faiss 原理+应用