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


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

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

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

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

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

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

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

     之前一直是有几个参数就创建一个_ParameterPtr对象

     1         TESTHR(pParam1.CreateInstance(TEXT("ADODB.Parameter")));
     2 
     3         pParam1=pCmd->CreateParameter(TEXT(""),adInteger,adParamInput,sizeof(int));
     4         pParam1->Value=_variant_t(nNo);
     5         pCmd->Parameters->Append(pParam1);
     6 
     7         TESTHR(pParam2.CreateInstance(TEXT("ADODB.Parameter")));
     8 
     9         pParam2=pCmd->CreateParameter(TEXT(""),adInteger,adParamInput,sizeof(int));
    10         pParam2->Value=_variant_t(nId);
    11         pCmd->Parameters->Append(pParam2);
    12 
    13         TESTHR(pRecordset.CreateInstance(TEXT("ADODB.Recordset")));
    14 
    15         pRecordset=pCmd->Execute(NULL,NULL,adCmdText);

    现在想来试了一下,重复利用同一个也是可以的。

     1         TESTHR(pParam1.CreateInstance(TEXT("ADODB.Parameter")));
     2 
     3         pParam1=pCmd->CreateParameter(TEXT(""),adInteger,adParamInput,sizeof(int));
     4         pParam1->Value=_variant_t(nNo);
     5         pCmd->Parameters->Append(pParam1);
     6 
     7         pParam1=pCmd->CreateParameter(TEXT(""),adInteger,adParamInput,sizeof(int));
     8         pParam1->Value=_variant_t(nId);
     9         pCmd->Parameters->Append(pParam1);
    10 
    11         TESTHR(pRecordset.CreateInstance(TEXT("ADODB.Recordset")));
    12 
    13         pRecordset=pCmd->Execute(NULL,NULL,adCmdText);

    但仔细观察,就会发现,有的代码是直接在Append里面使用CreateParameter函数:

    1         TESTHR(pParam1.CreateInstance(TEXT("ADODB.Parameter")));
    2 
    3         pCmd->Parameters->Append(pCmd->CreateParameter(TEXT(""),adInteger,adParamInput,sizeof(int),_variant_t(nNo)));
    4         pCmd->Parameters->Append(pCmd->CreateParameter(TEXT(""),adInteger,adParamInput,sizeof(int),_variant_t(nId)));
    5 
    6         TESTHR(pRecordset.CreateInstance(TEXT("ADODB.Recordset")));
    7 
    8         pRecordset=pCmd->Execute(NULL,NULL,adCmdText);

    考虑到COM的原理(继承和虚函数表之类的讲不了,自行参阅《COM技术内幕》),这样也是可行的

     1         IDispatchPtr pDispObj;
     2         pDispObj=pCmd->CreateParameter(TEXT(""),adInteger,adParamInput,sizeof(int),_variant_t(nNo));
     3         pCmd->Parameters->Append(pDispObj);
     4 
     5         pDispObj=pCmd->CreateParameter(TEXT(""),adInteger,adParamInput,sizeof(int),_variant_t(nId));
     6         pCmd->Parameters->Append(pDispObj);
     7 
     8         TESTHR(pRecordset.CreateInstance(TEXT("ADODB.Recordset")));
     9 
    10         pRecordset=pCmd->Execute(NULL,NULL,adCmdText);

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

    如此,便不用为十几个参数的存储过程忧心了。个人感觉还是下面的好。

    pCmd->Parameters->Append(pCmd->CreateParameter(TEXT("参数名"),adInteger,adParamInput,sizeof(int),_variant_t(nId)));

    ================================随便说点什么===============================

    把所学所用记录下来,积累从点滴做起。

    “千里之堤,溃于蚁穴”的道理我还是懂的。

  • 相关阅读:
    使用 logger 在脚本中输出多个日志
    MySQL 5.7 安装完成后,立即要调整的性能选项
    多线程练习2_龟兔赛跑
    多线程练习1_网图下载
    【BFS(预处理)+SPFA】【NOIP2013】华容道
    【数学】【NOIP2013】解方程
    【二分答案+倍增】【NOIP2015】运输计划
    std::strncpy 简介
    text 文本去重行
    关于string::copy()的比较详细的示例
  • 原文地址:https://www.cnblogs.com/wlsandwho/p/4370912.html
Copyright © 2020-2023  润新知