• 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)));

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

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

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

  • 相关阅读:
    ubuntu frp 自编译。本文不能按顺序来 请自己理解
    油猴子 自改脚本 删除页面 div 上下翻页 视频页内全屏 右键可用
    批处理bat 删除指定文件夹下的文件及文件夹
    LUA 静态库 动态库 LD_LIBRARY_PATH 动态库的查找路径 GCC “-l”参数
    delphi 判断奇数偶数
    sf.net
    cmake指定mingw编译器的方法
    关闭delphi ide皮肤
    arch pacman被删除 重装
    delphi 匿名方法访问var参数
  • 原文地址:https://www.cnblogs.com/wlsandwho/p/4370912.html
Copyright © 2020-2023  润新知