SQL Server缺省安装时,TEXT、NTEXT、 IMAGE类型字段是有长度限制,如果写入的数据超过限制就会抛出异常,缺省的长度限制是65536,需要修改数据库的全局配置参数:
exec sp_configure ‘max text repl size (B)‘, ‘655360‘ --调整长度限制为655360,增加了10倍
reconfigure --使配置生效
string objData;
.......(略去objData数据的准备工作)
// 构建安全数组
const long lWeiShu = 1;// 安全数组维数
BYTE *pByte;
SAFEARRAY FAR* psa;
SAFEARRAYBOUND rgsabound[lWeiShu];
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = objData.length();
psa = SafeArrayCreate(VT_UI1, lWeiShu, rgsabound);
if(SafeArrayAccessData(psa,(void **)&pByte) == NOERROR)
{
// 将对象数据拷贝进安全数组
memcpy(pByte,&objData[0],objData.length());
}
SafeArrayUnaccessData(psa);
VARIANT varArray;
varArray.vt = VT_ARRAY | VT_UI1;
varArray.parray = psa;
// 将数据更新到数据库中.
FieldPtr fiePtr = objRCRecordset->Fields->GetItem(_variant_t("fieldname"));
fiePtr->AppendChunk(varArray);
VariantClear(&varArray);
///////////////////////////////////////////////////////////////
以上是在addnew情况下可以使用.
如果是存储过程的参数中有text, image等情况. 则上面的代码后面部分要改为
storeprocparamobj->Value = varArray;
/////////////////////////////////////////////////////////////
此外
可以用_variant_t对象代替直接使用 VARIANT结构, 前者可以自动在析构时释放数据.后者需要
自己调用 VariantClear清理.
以上代码适用于TEXT, IMAGE字段类型, 且经过实验.(ado, vc6, win2000, sqlserver2000)
---------------------------------------------------------------------------
艾康数码http://shop108303530.taobao.com
作者: JQZCSBZ
出处:http://www.cnblogs.com/ZengSir/
Email:763754930@qq.com
QQ交流:763754930
更多资讯、IT小技巧、疑难杂症等等可以关注 艾康享源 微信公众号。