C++ ADO 命令对象调用 MySql 的二进制类型的输出参数的存储过程时,用户必须预先提供长度信息吗?
我写一个与数据库相关的 C++ 库,目的是在用 ADO 的命令对象调用 MySql 的一个存储过程。这个存储过程有输出参数,类型为 VARBINARY。在调用存储过程之前自然要设置参数,参数的长度需要由上帝(用户)指定,上帝不爽,还拿出证据(记录集的方式不要用户指定一个长度,多方便!)。
C++ 代码见 1 楼,MySql 表及存储过程见 2 楼,备注见 3 楼。
说说我的 GetProcedure_BinaryValue 是怎么来的:我是先在网上找到了很多很多很多很多用记录集的方式的代码,就是 GetRecordSet_BinaryValue 的样子,我复制一份,将前两行
[code=C/C++]FieldPtr fpr = m_AdoRecordSet->GetFields()->GetItem(name);
long length = fpr->ActualSize;[/Code]改为:[code=C/C++]_ParameterPtr ppr = m_CommandPtr->Parameters->GetItem(_bstr_t(name));
long ExpectMaxLen = ppr->GetSize();[/Code]
把中间部分的 len 改为 ActualLen,感觉可读性好一些。然后加上了我的异常判断,嗯,就这样,大家说说有错吗?
记录集的方式的函数里面,length 和 len 的值是相同的。但是命令对象的方式,ppr->GetSize() 返回的是在添加参数时的那个长度,stream->GetSize() 返回的是字段实际的有效内容的长度。为什么呢?
GetProcedure_BinaryValue 这个函数的接口不变,你会怎么写函数体?
=============== When: 2013-04-09 Where: bbs.csdn.net Who: zjs100901 Which: 0008 ===============
==================== 以下为 CSDN 广告,与楼主发贴内容无关,如有瓜葛,纯属巧合 ====================