+ -
当前位置:首页 → 问答吧 → vb6访问数据库出现“...字符串数据,右截位”

vb6访问数据库出现“...字符串数据,右截位”

时间:2011-07-25

来源:互联网

环境:vb6+sqlserver2005
目的:在表中有一个字段是varchar(max),在vb6调用存储过程,向表中插入数据


连接字符串为:conn.ConnectionString = "Driver={SQL Server};Server=.;UID=sa;PWD=sa;database=book;"

在vb6中需向数据库中插入一个大于8000字符的字符串。在vb6调用存储过程后,出现错误:[Microsoft][ODBC SQL Server Driver]字符串数据,右截位



要如何解决?

作者: downdown518   发布时间: 2011-07-25

varchar(max)最大的存储长度为8000,如果一个字段大于8000个字节,只能进行重新设计字段,或把这么多文字的字段,以二进制数据的方式进行存放

作者: BestBadGod   发布时间: 2011-07-25

把一个字段分成多个字段分别进行存储,或者改变字段的数据类型

作者: BestBadGod   发布时间: 2011-07-25

8000+字符

你还是转二进制流吧

作者: xiaolinyouni   发布时间: 2011-07-25

在sqlserver2005中varchar(max),max 指示最大存储大小是 2^31-1 个字,在不改变数据库的情况下,有什么好的办法可以得到解决呢?
引用 1 楼 bestbadgod 的回复:
varchar(max)最大的存储长度为8000,如果一个字段大于8000个字节,只能进行重新设计字段,或把这么多文字的字段,以二进制数据的方式进行存放

作者: downdown518   发布时间: 2011-07-25

引用 MSDN:
如果列数据项大小相差很大,而且大小可能超过 8,000 字节,请使用 varchar(max)。

不好意思,确实是的。
那么错误的原因应该是存储过程中定义的变量
declare @text varchar(8000)造成的。可以对存储过程添加几个参数:如下
SQL code

declare @text1 varchar(8000)
declare @text2 varchar(8000)
declare @text3 varchar(8000)
declare @text4 varchar(8000)
.....



插入数据库的存储过程改成: insert into table (colname1,colname2,...) values('data1', @text1 + @text2 + @text3 + @text4,....)

作者: BestBadGod   发布时间: 2011-07-25


NO.

1、存储过程代码如下:
create proc sp_test
(@xml varchar(max))
as
begin
insert into t(col) values(@xml)
end


2、在vb6中调用存储过程的代码为:
...
Set ADOPrm = ADOCmd.CreateParameter("xml", adVarChar, adParamInput, 50000, xml)
ADOCmd.Parameters.Append ADOPrm
已将传输的参数大小设置成了50000。够大了。


3、在vb6中连接sqlserver2005连接字符串,我的写法为:
conn.ConnectionString = "Driver={SQL Server};Server=.;UID=sa;PWD=sa;database=book;"



请问,在不改变数据库的情况下,如何解决该问题?


引用 5 楼 bestbadgod 的回复:
引用 MSDN:
如果列数据项大小相差很大,而且大小可能超过 8,000 字节,请使用 varchar(max)。

不好意思,确实是的。
那么错误的原因应该是存储过程中定义的变量
declare @text varchar(8000)造成的。可以对存储过程添加几个参数:如下

SQL code

declare @text1 varchar(8000)
declare @te……

作者: downdown518   发布时间: 2011-07-25

就插入一个字段吗?那应该没什么问题的

作者: BestBadGod   发布时间: 2011-07-25

呵呵,你试一下就知道了,是有问题的。

引用 7 楼 bestbadgod 的回复:
就插入一个字段吗?那应该没什么问题的

作者: downdown518   发布时间: 2011-07-25

1、修改数据表指定字符串字段的长度为max。
2、修改存储过程指定字符串参数的长度为max

作者: lyserver   发布时间: 2011-07-25

你所说的1、2两点,我都按你的要求做了。关键问题是:在vb6中

Set ADOPrm = ADOCmd.CreateParameter("xml", adVarChar, adParamInput, 50000, xml)
这么写为什么不行呢?

连接字符串为:
conn.ConnectionString = "Driver={SQL Server};Server=.;UID=sa;PWD=sa;database=book;"

引用 9 楼 lyserver 的回复:
1、修改数据表指定字符串字段的长度为max。
2、修改存储过程指定字符串参数的长度为max

作者: downdown518   发布时间: 2011-07-25

不用createparameter试试,比如:
Dim p As New ADODB.Parameter
p.Name = "xml"
p.Value = "aaaaaaa..."
ADOCmd.Parameters.Append p

作者: lyserver   发布时间: 2011-07-25