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

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

时间: 2024-09-28 18:34:32

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

SQL Server中日期时间类型字段只取年月日

select CONVERT(varchar, getdate(), 120 ) 2004-09-12 11:06:08 select CONVERT(varchar(10), datatime1, 120 )2004-09-12 select CONVERT(varchar(4), datatime1, 120 )+'年'+substring(CONVERT(varchar(10), datatime1, 120 ),6,2)+'月'+substring(CONVERT(varchar(10)

解决SQL Server 2005数据库中datetime时间字段在前端显示时分秒的问题

SQL Server 2005中时间类型datetime的格式是"年月日时分秒",直接读出来该字段,为了不让它在前端显示"时分秒"若是显示在dataGridView中,可以修改控件的某一列格式,如: dataGridView1.Columns[10].DefaultCellStyle.Format = "yyyy-MM-dd"; 但是要在listview控件中的话,就有点困难了,貌似没有类似的属性,这样的话,考虑从数据源入手. 1.获取当前年月日

【半转贴】解决SQL SERVER 2008数据库表中修改字段后不能保存

SQL SERVER 2008数据库表中修改字段后不能保存,这种情况将阻止保存要求重新创建表的更改一项的钩钩去掉就OK了 找到工具>选项>Designers>表设计器和数据库设计器 然后将“阻止保存要求重新创建表的更改” 的这一项的钩钩去掉就OK了 图片来自:http://www.jb51.net/article/42727.htm 刚好碰到这个问题,用的就是上面的方法解决的 [半转贴]解决SQL SERVER 2008数据库表中修改字段后不能保存

如何解决SQL Server 2014 无法连接到(local)

初次安装使用SQL server 2014时,可能会遇到无法连接到(local)的情况.那么,如何解决此问题? 步骤阅读 工具/原料 SQL server 2014 方法/步骤 1 打开SQL server 配置管理器-->SQL server 网络配置-->实例名的协议(我的实例名为SQLEXPRESS). 步骤阅读 2 将SQLEXPRESS协议中的Named Pipes和 TCP/IP启用. 步骤阅读 3 点击SQL Server服务,将SQL Server(SQLEXPRESS)重新启

SQL Server中Text和varchar(max)数据类型区别

SQL Server中Text和varchar(max)数据类型区别 以前只知道text和image是可能被SQL Server淘汰的数据类型,但具体原因不太清楚,今天读书的时候发现了text与varchar(max)和nvarchar(max)的区别,主要是对操作符的限制,text只能被下列函数作用: 函数 语句 DATALENGTH READTEXT PATINDEX SET TEXTSIZE SUBSTRING UPDATETEXT TEXTPTR WRITETEXT TEXTVALID

解决SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问的方法

报错内容是:SQL  Server 阻止了对组件 'Ad Hoc Distributed Queries' 的  STATEMENT'OpenRowset/OpenDatasource'  的访问,因为此组件已作为此服务器安全配置的一部分而被关闭.系统管理员可以通过使用 sp_configure 启用 'Ad Hoc  Distributed Queries'.有关启用 'Ad Hoc Distributed Queries' 的详细信息,请参阅 SQL  Server 联机丛书中的 "外围应用

解决 SQL Server 连接到服务器 错误223

我的SQL Server2005 一直正常使用但昨天出现了错误,如图. 经过上网查,网上说的办法试了好多都没有解决这个问题.在经过多次的摸索后终于搞定了,答案很简单,是sql身份验证 “sa”账号 登录密码的问题. 但是前提是你必须得保证你的sql server 的sql 身份验证可以用,所以在这里我们就先给大家讲述下怎样使sql身份验证可以启用(sql server身份验证可以用的直接跳过这一步). 首先用windows身份验证登录,windows身份验证不可以登录的请看我前面博客“解决SQL

解决SQL Server管理器无法连接远程数据库Error: 1326错误

解决SQL Server管理器无法连接远程数据库Error: 1326错误 我们在在使用SQL Server时都会遇到使用SQL Server Management Studio无法连接远程数据库实例的问题,错误描述信息摘录如下: An error has occurred while establishing a connection to the server. (provider: Named Pipes Provider, error: 40 – Could not open a con

mysql,sql server,oracle 唯一索引字段是否允许出现多个 null 值?

最近一个项目,涉及到sql server 2008,因为业务需求,希望建立一个唯一索引,但是发现在sql server中,唯一索引字段不能出现多个null值,下面是报错信息: CREATE UNIQUE NONCLUSTERED INDEX weixin_openid_ui ON Users(weixin_openid); 因为发现对象名称 'dbo.Users' 和索引名称 'weixin_openid_ui' 有重复的键,所以 CREATE UNIQUE INDEX 语句终止.重复的键值为