我有一个测试用例:
internal class LongString {
const string CommandText = @"
create table #temp (p text)
insert into #temp(p) values(@p)
select p from #temp
drop table #temp";
public static void Issue() {
Console.WriteLine("character length limit, expect:");
Console.WriteLine(16384);
Console.WriteLine(16385);
Console.WriteLine("---------");
Console.WriteLine("Actual:");
try {
Console.WriteLine(Run(new string('A', 16384)));
} catch (Exception ex) {
Console.WriteLine(ex);
}
try {
Console.WriteLine(Run(new string('A', 16385)));
} catch (Exception ex) {
Console.WriteLine(ex);
}
Console.WriteLine("---------");
Console.WriteLine();
}
private static int Run(string s) {
using (var conn = new AseConnection(Globals.ConnectionString)) {
conn.Open();
using (var cmd = conn.CreateCommand()) {
cmd.CommandText = CommandText;
cmd.Parameters.Add(new AseParameter {ParameterName = "@p", AseDbType = AseDbType.Text, Value = s});
using (var r = cmd.ExecuteReader()) {
while (r.Read()) {
return ((string) r["p"]).Length;
}
}
}
}
throw new InvalidOperationException("cannot get here");
}
}我必须将数据插入到不同表的text列中,并且遇到了这个障碍。测试用例的输出为:
character length limit, expect:
16384
16385
---------
Actual:
16384
16384
---------当前使用驱动程序Sybase.AdoNet4.AseClient.dll 16.0.3.0,并针对从15.7到当前版本16的各种版本的数据库进行测试。以前测试的驱动程序版本在16360个字符时失败。
发布于 2018-07-25 13:45:24
虽然TEXT数据类型可能支持最大2 go的存储,但服务器会对您一次可以选择的容量进行限制(通常为16KB)。超过此限制的字节不会被传输。
有几种方法可以突破限制:
use
some_value在查询开始时,query.
some_value是要突破限制的字节数。的开头放置SET TEXTSIZE 128000
TextSize=some_value;连接字符串参数。与上面的方法非常类似,您可以为some_value指定一个适当的值。当您调用Open().时,我相信驱动程序实际上只是使用这个值来执行SET TEXTSIZE调用
https://stackoverflow.com/questions/46347353
复制相似问题