码迷,mamicode.com
首页 > 数据库 > 详细

解决SQL Server的TEXT、IMAGE类型字段的长度限制

时间:2016-01-10 14:16:08      阅读:3661      评论:0      收藏:0      [点我收藏+]

标签:

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小技巧、疑难杂症等等可以关注 艾康享源 微信公众号。

技术分享

解决SQL Server的TEXT、IMAGE类型字段的长度限制

标签:

原文地址:http://www.cnblogs.com/zengSir/p/5118248.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!