c++ADO编程-connection对象

2023-10-27

Connection对象的属性有如下几个:

1.ConnectionString属性:是连接字符串,通过传递包含一系列由分号分隔的“argument=value”语句的详细连接字符串,可指定用于建立连接数据源的信息。连接串格式根据数据源的不同有所不同。

2.Open方法:建立到数据源的物理连接。

Open函数详细定义:

HRESULT Open (_bstr_t ConnectionString,  
              _bstr_t   UserID,  
              _bstr_t   Password,  
              long        Options)  

参数意义:

ConnectionString :可选,类型为字符串,包含连接信息,如果设置了ConnectionString属性,该参数可以不设置

UserID:可选,字符串,包含建立连接时所使用用户名,如果没有用户名,可以不设置

Password:可选,字符串,包含建立时所使用的密码。如果没有密码,可以不设置

Option:可选,决定该方法是在连接建立之后(异步)还是连接建立之前(同步)返回,

其值定义如下

enum __declspec(uuid("00000541-0000-0010-8000-00aa006d2ea4"))
ConnectOptionEnum
{
    adConnectUnspecified = -1,  //已同步方式连接数据库
    adAsyncConnect = 16         //以异步方式连接数据库
};

Option,还有一种解释:

enum __declspec(uuid("00000521-0000-0010-8000-00aa006d2ea4"))
ConnectModeEnum
{
    adModeUnknown = 0,          //缺省。当前的许可权未设置
    adModeRead = 1,             //只读
    adModeWrite = 2,            //只写
    adModeReadWrite = 3,        //读写方式打开
    adModeShareDenyRead = 4,    //阻止其它Connection对象以读权限打开连接
    adModeShareDenyWrite = 8,   //阻止其它Connection对象以写权限打开连接
    adModeShareExclusive = 12,  //阻止其它Connection对象以读写权限打开连接
    adModeShareDenyNone = 16,   //阻止其它Connection对象以任何权限打开连接
    adModeRecursive = 4194304   //
};

3.ConnectionTimeout属性:该属性指示在终止尝试和产生错误前建立连接期间所等待的时间。该属性值为长整型数,单位s,默认值为15。如果设为0,则ADO无限等待直到打开。需要在Open之前调用。

m_pConnection->ConnectionTimeout = 5;///设置超时时间为5秒

4.State属性:指明当前Connection对象的状态,0表示关闭,1表示已经打开,我们可以通过读取这个属性来作相应的处理,例如:

if(m_pConnection->State)
m_pConnection->Close(); ///如果已经打开了连接则关闭它
状态值有如下定义

enum __declspec(uuid("00000532-0000-0010-8000-00aa006d2ea4"))
ObjectStateEnum
{
    adStateClosed = 0,      //关闭状态
    adStateOpen = 1,        //打开状态
    adStateConnecting = 2,  //连接状态
    adStateExecuting = 4,   //执行状态
    adStateFetching = 8     
};

5.Execute方法:函数原型

_RecordsetPtr Connection15::Execute ( _bstr_t CommandText, VARIANT * RecordsAffected, long Options )

其中CommandText是命令字串,通常是SQL命令。参数RecordsAffected是操作完成后所影响的行数, 参数Options表示CommandText中内容的类型,Options 其值定义如下

enum __declspec(uuid("0000052e-0000-0010-8000-00aa006d2ea4"))
CommandTypeEnum
{
    adCmdUnspecified = -1,
    adCmdUnknown = 8,       //表明CommandText内容未知
    adCmdText = 1,          //表明CommandText是文本命令,即SQL语句
    adCmdTable = 2,         //表明CommandText是一个表名
    adCmdStoredProc = 4,    //表明CommandText是一个存储过程
    adCmdFile = 256,        //
    adCmdTableDirect = 512
};

返回值:
Execute()函数执行完后返回一个指向记录集的指针

6.Close方法:用来关闭到数据源的连接,访问数据库完成后,关闭连接,释放有关联的系统资源。关闭对象并不代表将它从内存中删掉,可以更改它的属性设置然后再次打开它。

数据库建立连接实例:

#include "stdafx.h"
#include "DataBase.h"

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

int main()
{
    ::CoInitialize(NULL);
    _ConnectionPtr  m_pConnection;
    _RecordsetPtr   m_pRecordSet;
    try
    {
        m_pConnection.CreateInstance(__uuidof(Connection));
        m_pRecordSet.CreateInstance(__uuidof(Recordset));
        assert(NULL != m_pConnection);
        assert(NULL != m_pRecordSet);
        if (NULL == m_pRecordSet
            || NULL == m_pConnection)
        {
            cout << "创建实例失败" << endl;
            return -1;
        }

        m_pConnection->CommandTimeout = 5;
        m_pConnection->ConnectionString = "Provider=SQLOLEDB.1;Password=123456;Persist Security Info=True;User ID=sa;Initial Catalog=sample_db;Data Source=127.0.0.1";
        m_pConnection->Open("","", "", adConnectUnspecified);
        assert(m_pConnection->GetState() == adStateOpen);
        if (m_pConnection->GetState() != adStateOpen)
        {
            cout << "连接失败" << endl;
        }

        _variant_t var;
        m_pRecordSet = m_pConnection->Execute("Select * from AccountsInfo", &var, adCmdText);
        cout << (int)var << endl;
        cout << m_pRecordSet->GetFields() << endl;
        string szLogonID = (_bstr_t)m_pRecordSet->GetCollect("LogonID");
        string szNickName = (_bstr_t)m_pRecordSet->Fields->GetItem("NickName")->Value;
        cout << szLogonID  << endl;
        cout << szNickName << endl;

    }
    catch (_com_error& e)
    {
        cout << e.Description() << endl;
    }

    ::CoUninitialize();
    return 0;
}

注意:
1.Recordset对象和Command对象使用Open方法的第二个参数要用到_ConnectionPtr.GetInterfacePtr()函数返回值

2.执行Execute方法。m_pConnectionPtr->Execute(_bstr_t(sql),&RecordsAffected,adCmdText);其中RecordsAffected为_variant_t对象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++ADO编程-connection对象 的相关文章

  • 如何使用 C# 中的参数将用户重定向到 paypal

    如果我有像下面这样的简单表格 我可以用它来将用户重定向到 PayPal 以完成付款
  • 我如何才能等待多个事情

    我正在使用 C 11 和 stl 线程编写一个线程安全队列 WaitAndPop 方法当前如下所示 我希望能够将一些内容传递给 WaitAndPop 来指示调用线程是否已被要求停止 如果 WaitAndPop 等待并返回队列的元素 则应返回
  • 以文化中立的方式将字符串拆分为单词

    我提出了下面的方法 旨在将可变长度的文本拆分为单词数组 以进行进一步的全文索引处理 删除停止词 然后进行词干分析 结果似乎不错 但我想听听关于这种实现对于不同语言的文本的可靠性的意见 您会建议使用正则表达式来代替吗 请注意 我选择不使用 S
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new

随机推荐

  • jQuery 切换radio 改变validateRule的校验规则

    有这样一个form表单 在切换费率类型时 需要校验不同input框如下图 静态页面代码如下 div class ibox content div
  • 【sqli-labs】Less18~Less22

    Less18 User Agent注入 有错误回显 感叹一句 越来越难了 现在只能先看代码再分析怎么注入了 通过代码 发现username和password均做了校验 但是会有一个插入user agent的sql语句 故要通过user ag
  • 怎样计算期货交易盈亏(期货交易盈利怎么算)

    期货怎么算挣了多少钱 1 浮动盈亏 就是结算机构根据当日交易的结算价 计算出会员未平仓合约的浮动盈亏 如果是正值 则表明多头浮动盈利或者空头浮动亏损 负值则刚好相反 公式如下 浮动盈亏 当天的结算价 开仓价格 合约单位 持仓量 手续费 2
  • 解决Android Studio编译报错:找不到NotNull或Nullable

    问题 在java代码中引入 import org jetbrains annotations NotNull import org jetbrains annotations Nullable 导致代码编译不过 找不到这两个类库 按照官方文
  • 后端学习React的第一天

    java后端了十几年了 曾经在学校写过一些jquery的前端代码 后来前端的框架越来越复杂 加上工作以后都是前后端分离的 并且自己美术功底本来也就不咋地 逐渐就放弃了前端技术 专职后端开发了 最近闲来无事 想写点有意思的小程序 发现没有前端
  • 教你如何用fiddler抓取https(详细教程)

    对于想抓取HTTPS的测试初学者来说 常用的工具就是fiddler 可是在初学时 大家对于fiddler如何抓取HTTPS真是伤了脑筋 可能你一步步按着网上的帖子成功了 那当然是极好的 有可能没有成功 这时候你就很抓狂了 我把网络上的教程进
  • python实现文件(夹)剪切

    自己的需求是这样的 有a和b两个目录 a目录下的文件 夹 要剪切到b目录下 我用下面这种形式来表达需求 不然说得比较乱 需求如下 a目录 1 文件 1 是日志文件 1 文件大小 lt 20m 跳过 2 日志文件 gt 20m 复制名加上当天
  • ssh连接不上Linux怎么办

    原因 被防火墙挡掉 ssh服务配置文件中的参数是否拒绝了连接等等 解决方法 一 开启SSH 以root用户登录Linux 打开终端 运行 etc init d sshd restrat 二 关闭防火墙 1 在终端运行 setup 2 选择
  • es6 处理数组的方法汇总

    目录 创建数组静态方法 ES6 Array from Array of 检测数组方法 instanceof Array isArray 迭代器方法 ES6 keys values entries 复制和填充方法 ES6 Array fill
  • 逻辑回归输出的值是真实的概率吗?

    本文只在博客基础上 在三 指数分布族中有所改动 逻辑回归作为被广泛使用的二分类模型 面试中自然是不可缺少的 但要深刻理解逻辑回归又不是那么容易的 比如说 逻辑回归输出的值是0到1之间的值 这个值是真实的概率吗 逻辑回归为什么要选择sigmo
  • layui树形美化_Layui导航树美化 - walkwithdream的个人空间 - OSCHINA - 中文开源技术交流社区...

    左侧导航 使用方法 skin sidebar layui tree skin sidebar li i color rgba 255 255 255 7 display none layui tree skin sidebar li a c
  • 学习Java——为什么java只有值传递

    目录 Java的求值策略 Java中的对象传递 值传递和共享对象传递冲突吗 总结 参考资料 Java的求值策略 前面我们介绍过了传值调用 传引用调用以及传值调用的特例传共享对象调用 那么 Java中是采用的哪种求值策略呢 很多人说Java中
  • 最优乘车问题/dijsktra最短路径算法

    城是一个旅游胜地 每年都有成千上万的人前来观光 为方便游客 巴士公司在各个旅游景点及宾馆 饭店等地都设置了巴士站 并开通了一些单向巴士线路 每条单向巴士线路从某个巴士站出发 依次途径若干个巴士站 最终到达终点巴士站 阿昌最近到 城旅游 住在
  • typora笔记工具使用详解

    Markdown使用笔记 首先本地使用安装教程 百度搜索typora第一个就是官网 地址为 typora下载地址 下载步骤如下 简单使用教程 3 Markdown标题 使用 号可表示 1 6 级标题 一级标题对应一个 号 二级标题对应两个
  • 读取.ini文件乱码的解决办法

    void CGetConfigInfo GetValueByKey QSettings seting const QString key QString value if seting nullptr value seting gt val
  • Memory write error at 0x100000. MMU section translation fault

    在使用vitis2020 2 JTAG调试MZ702P板子的时候会报下面的错误 原因都是启动模式没有设置到JTAG启动或SD启动 记得之前用SDK的时候好像没有这个问题 记录一下 备忘 Downloading Program F FPGA
  • ONVIF对讲功能漫谈

    ONVIF对讲功能漫谈 前言 一 onvif对讲功能和onvif协议关系大吗 二 如何上报设备支持onvif对讲功能呢 三 onvif协议中哪个接口上报音频解码配置 四 献上抓包报文 前言 本篇文章尝试使用提问的方式来分享onvif对讲功能
  • java类型信息与反射

    初步理解 https www cnblogs com xuanlin666 p 10826809 html
  • 使用Electron开发过程中不能使用remote模块解决

    在 electron 渲染进程中引入BrowserWindow报错 const BrowserWindow require electron remote BrowserWindow 报错 Cannot read properties of
  • c++ADO编程-connection对象

    Connection对象的属性有如下几个 1 ConnectionString属性 是连接字符串 通过传递包含一系列由分号分隔的 argument value 语句的详细连接字符串 可指定用于建立连接数据源的信息 连接串格式根据数据源的不同