==================================声明==================================

本文原创,转载在正文中显要的注明作者和出处,并保证文章的完整性。

未经作者同意请勿修改(包括本声明),保留法律追究的权利。

未经作者同意请勿用于出版、印刷或学术引用。

本文不定期修正完善,为保证内容正确,建议移步原文处阅读。

本文链接:http://www.cnblogs.com/wlsandwho/p/4364899.html

=======================================================================

文中使用到的TESTHR函数,并非本人所写,摘自中文版chm格式的《microsoft ado 2.5 程序员参考》。

 inline void TESTHR(HRESULT x) {if FAILED(x) _com_issue_error(x);}

=======================================================================

错误处理跟优雅退出肯定写的不好,凑合下吧。

=======================================================================

本例的目的/效果:用参数化查询的方式从表testtable3中读取部分数据。

=======================================================================

用于测试的数据库

testdb

用于测试的登录名和密码

testdev

123456

用于测试的sqlserver_ed.udl文件内容

 [oledb]
Everything after this line is an OLE DB initstring
Provider=SQLOLEDB.1;Password=HTSQL;Persist Security Info=True;User ID=sa;Initial Catalog=testdb;Data Source=192.168.0.14\SQLEXPRESS

用于测试的表

 CREATE TABLE [dbo].[testtable3](
[No] [int] IDENTITY(1,1) NOT NULL,
[id] [int] NULL,
[val] [nvarchar](50) NULL,
CONSTRAINT [PK_testtable3] PRIMARY KEY CLUSTERED
(
[No] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

表中初始数据

No          id          val
----------- ----------- ------
1           123         1
2           125         123123
3           126         12
4           127         2
5           128         2
6           127         123123

=======================================================================

VC++测试代码

 void CTestADOwithParameterizedDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
if (FAILED(::CoInitialize(NULL)))
{
MessageBox(TEXT("初始化失败")); return;
} int nNo=;
int nId=; _ConnectionPtr pConn;
_CommandPtr pCmd;
_ParameterPtr pParam1;
_ParameterPtr pParam2;
_RecordsetPtr pRecordset; try
{
TESTHR(pConn.CreateInstance(TEXT("ADODB.Connection"))); pConn->ConnectionString=TEXT("File Name=sqlserver_ed.udl");
pConn->CommandTimeout=;
pConn->CursorLocation=adUseClient;
pConn->Mode=adModeUnknown;
pConn->Open(TEXT(""),TEXT(""),TEXT(""),adConnectUnspecified); TESTHR(pCmd.CreateInstance(TEXT("ADODB.Command"))); pCmd->ActiveConnection=pConn;
pCmd->CommandText=TEXT("select id,val from testtable3 where No<? and id>?"); TESTHR(pParam1.CreateInstance(TEXT("ADODB.Parameter"))); pParam1=pCmd->CreateParameter(TEXT(""),adInteger,adParamInput,sizeof(int));
pParam1->Value=_variant_t(nNo);
pCmd->Parameters->Append(pParam1); TESTHR(pParam2.CreateInstance(TEXT("ADODB.Parameter"))); pParam2=pCmd->CreateParameter(TEXT(""),adInteger,adParamInput,sizeof(int));
pParam2->Value=_variant_t(nId);
pCmd->Parameters->Append(pParam2); TESTHR(pRecordset.CreateInstance(TEXT("ADODB.Recordset"))); pRecordset=pCmd->Execute(NULL,NULL,adCmdText); VARIANT vtRes;
while (!pRecordset->adoEOF)
{
vtRes=pRecordset->GetCollect(TEXT("id"));
OutputDebugString((LPCWSTR)_bstr_t(vtRes));
OutputDebugString(TEXT("\t"));
vtRes=pRecordset->GetCollect(TEXT("val"));
OutputDebugString((LPCWSTR)_bstr_t(vtRes));
OutputDebugString(TEXT("\n")); pRecordset->MoveNext();
}
}
catch (_com_error &e)
{
} CoUninitialize();
}

=======================================================================

执行结果

126    12
127    2
128    2

=======================================================================

基本上不会在前台用到查询语句,广泛的是调用存储过程。

=======================================================================

PS:代码37和43行的TEXT宏中,写不写东西,随便写点东西不影响结果。

  当然这是在普通的一次性调用中。

  如果_CommandPtr想多次利用,而每次调用的存储过程又是不同的参数,那么最好是起个名字,每次都删除一下。

  详见http://www.cnblogs.com/wlsandwho/p/4367798.html

SQL Server 2008 R2——VC++ ADO 操作 参数化查询的更多相关文章

  1. SQL Server 2008 R2——VC++ ADO 操作 事务

    ==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...

  2. SQL Server 2008 R2——VC++ ADO 操作 存储过程 向datetime类型参数传入空值

    ==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...

  3. SQL Server 2008 R2——VC++ ADO 操作 重复利用_CommandPtr

    ==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...

  4. SQL Server 2008 R2——VC++ ADO 操作 存储过程

    ==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...

  5. SQL Server 2008 R2——VC++ ADO 操作 重复利用_ParameterPtr

    ==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...

  6. SQL Server 2008 R2——VC++ ADO 操作 多线程操作 代码结构

    ==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...

  7. SQL Server 2008 R2 性能计数器详细列表(五)

    原文:SQL Server 2008 R2 性能计数器详细列表(五) SQL Server:SQL Statistics 对象: 监视编译和发送到 SQL Server 实例的请求类型 SQL Ser ...

  8. SQL Server 2008 R2 性能计数器详细列表(四)

    原文:SQL Server 2008 R2 性能计数器详细列表(四) SQL Server Latches 对象: 监视称为闩锁的内部 SQL Server 资源锁.通过监视闩锁来确定用户活动和资源使 ...

  9. SQL Server 2000向SQL Server 2008 R2推送数据

    [文章摘要]最近做的一个项目要获取存在于其他服务器的一些数据,为了安全起见,采用由其他“服务器”向我们服务器推送的方式实现.我们服务器使用的是SQL Server 2008 R2,其他“服务器”使用的 ...

随机推荐

  1. 拓扑图弹力布局呈现Flickr图片搜索结果

    十年前有值得分享的图片我都存在Flickr上,可惜yahoo收购了Flickr之后堕落​好多年,最近yahoo在梅姐带领下Flickr团队终于恢复了生机,个人免费存储空间扩充到了1T,界面用户体验也有 ...

  2. IOS开发UI基础文本属性Attributes

    文本属性Attributes 1.NSKernAttributeName: @10 调整字句 kerning 字句调整 2.NSFontAttributeName : [UIFont systemFo ...

  3. SpringMVC核心——参数获取与Servlet资源获取问题

    一.SpringMVC 使用 @PathVariable.@RequestParam.@RequestHeader.@CookieValue 等来解决参数获取问题. 1. @PathVariable: ...

  4. error LNK1281: 无法生成 SAFESEH 映像 LNK2026 模块对于 SAFESEH 映像是不安全的 VS2015 /win10

    平台 VS2015 /win10 错误 LNK1281 无法生成 SAFESEH 映像. 错误 LNK2026 模块对于 SAFESEH 映像是不安全的. 将 release 改成 debug

  5. Linux守护进程实现程序只运行一次

    1.守护进程 守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件. 2.让程序只运行一次 如果让程序只运行一次,有很多方法,此处的一种 ...

  6. 程序设计模式 —— State 状态模式

    我应该如何阅读? 本文将使用优雅的文字风格来告诉你什么是状态模式. 注意: 1.在阅读本文之前请保证你已经掌控了 面对对象的思想与 多态的基本概念,否则将难以理解. 2.本文实现将用C++实现,你不一 ...

  7. jdbcTemplate 泛型 查询

    1. dao层方法使用泛型 public <T> List<T> findDistinctListByCondition(String str, Class<T> ...

  8. jquery 回到 顶部

    1. 页面内容较多, 从底部超链接 点击回到页面顶部 // 回到顶部 var $top = $('<a class="doc-gotop" href="javasc ...

  9. CSS应用内容补充及小实例

    一.clear 清除浮动 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  10. Android5.0新特性——Material Design简介

    Material Design Material Design简介 Material Design是谷歌新的设计语言,谷歌希望寄由此来统一各种平台上的用户体验,Material Design的特点是干 ...