用户名: 密   码:
   飞诺网 加入收藏
飞诺网 数据库 Access Mysql Mssql Oracle Sybase FoxPro db2 数据库相关文档
Mssql系列教程 Mssql实例 sqlServer技术文档 sql2005

您当前的位置:飞诺网 >>  数据库 >>  Mssql >> sqlServer技术文档

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

www.diybl.com    时间 : 2010-05-27  作者:佚名   编辑:Mr.阿布 点击:   [ 评论 ]

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)

如果图片或页面不能正常显示请点击这里
sqlServer技术文档推荐文章

文章评论