==================================声明==================================
本文原创,转载在正文中显要的注明作者和出处,并保证文章的完整性。
未经作者同意请勿修改(包括本声明),保留法律追究的权利。
未经作者同意请勿用于出版、印刷或学术引用。
本文不定期修正完善,为保证内容正确,建议移步原文处阅读。
本文链接: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)));
================================随便说点什么===============================
把所学所用记录下来,积累从点滴做起。
“千里之堤,溃于蚁穴”的道理我还是懂的。