首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sybase (思爱普) ASE Ado.Net有16384个字符的限制吗?

Sybase (思爱普) ASE Ado.Net有16384个字符的限制吗?
EN

Stack Overflow用户
提问于 2017-09-21 23:04:09
回答 1查看 431关注 0票数 3

我有一个测试用例:

代码语言:javascript
复制
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列中,并且遇到了这个障碍。测试用例的输出为:

代码语言:javascript
复制
character length limit, expect:
16384
16385
---------
Actual:
16384
16384
---------

当前使用驱动程序Sybase.AdoNet4.AseClient.dll 16.0.3.0,并针对从15.7到当前版本16的各种版本的数据库进行测试。以前测试的驱动程序版本在16360个字符时失败。

EN

回答 1

Stack Overflow用户

发布于 2018-07-25 13:45:24

虽然TEXT数据类型可能支持最大2 go的存储,但服务器会对您一次可以选择的容量进行限制(通常为16KB)。超过此限制的字节不会被传输。

有几种方法可以突破限制:

use

  • some_value在查询开始时,query.

  • some_value是要突破限制的字节数。
  • 因此,如果您知道要从文本列中选择最多128000个字节,则在query.

的开头放置SET TEXTSIZE 128000

  1. 使用TextSize=some_value;连接字符串参数。与上面的方法非常类似,您可以为some_value指定一个适当的值。当您调用Open().

时,我相信驱动程序实际上只是使用这个值来执行SET TEXTSIZE调用

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46347353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档