Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 保存到数据库时字符串被截断_C#_.net_Database - Fatal编程技术网

C# 保存到数据库时字符串被截断

C# 保存到数据库时字符串被截断,c#,.net,database,C#,.net,Database,我有一个定义为文本的数据库数据类型: 文本列是可变长度的列,最多可容纳2147483647(231-1)字节的可打印字符 这到底意味着什么?我可以将多少字符串保存到文本列中 基本上,我尝试将一个c#string对象保存到 myString.ToString().Length == 39418 但是当我把它从数据库中取出来的时候 myString.ToString().Length == 32768 -----------编辑--------------- 伙计们,这太令人困惑了 文本列定义为

我有一个定义为文本的数据库数据类型:

文本列是可变长度的列,最多可容纳2147483647(231-1)字节的可打印字符

这到底意味着什么?我可以将多少字符串保存到文本列中

基本上,我尝试将一个c#string对象保存到

myString.ToString().Length == 39418
但是当我把它从数据库中取出来的时候

myString.ToString().Length == 32768
-----------编辑---------------

伙计们,这太令人困惑了

文本列定义为2147483647字节,即2GB

我试图保存的字符串是?System.Text.ascienceoding.Unicode.GetByteCount(param.Value.ToString())78836字节,即0.0000734217 GB

这就证实了我试图保存的内容对于文本数据类型列来说不是太大?i、 e.我正在将0.0000734217 GB保存到一个能够处理2GB的列中

我用的是Sybase。这样储蓄:

        OdbcParameter param = new OdbcParameter();
        param.DbType = DbType.String;
        param.Size = int.MaxValue;
        param.Value = myBigString
        parameters.Add(param);
        OdbcHelper.ExecuteNonQuery(connectionString, sql, parameters);
像这样重新获得

    DataSet ds = new DataSet();
    OdbcConnection conn = new OdbcConnection(connectionString);
    OdbcDataAdapter adp = new OdbcDataAdapter(command, conn);
    conn.Open();
    adp.Fill(ds);....
此外,当我尝试此方法时,我仍然可以看到数据被截断,因此在检索数据时看起来不会出现问题

var obj = OdbcHelper.ExecuteScalar(connectionString, "select myBigString FROM ...");

正如我在评论中提到的,不要使用
TEXT
,因为它已被弃用。对Unicode数据使用
VARCHAR
NVARCHAR
。这将允许您存储高达2GB的数据

可变长度Unicode字符串数据。n定义字符串长度和 可以是1到4000之间的值。max表示最大 存储大小为2^31-1字节(2 GB)。存储大小(以字节为单位)为 输入数据实际长度的两倍+2字节。国际标准化组织 nvarchar的同义词是民族性格和民族性格 变化的

2147483647字节约为1.862GB,是该列的最大容量。我假设您试图存储的数据对于该列来说太大,因此数据被截断。

对该列使用nvarchar(MAX)类型


在我的连接字符串中,我需要添加textsize=2147483647

如何将其从数据库中拉回来?如果这是SQL Server,请不要使用
text
作为数据类型,它已弃用。您如何将其保存到数据库中?如果您使用的是C#代码,我会假设您使用的是ADO或ORM…可能是重复的:要么在插入时(可能不太可能)截断,要么在读回(很可能)缓冲区时截断。发布获取myString的代码。谢谢。让我们假设我不能更改数据库的数据类型。那么,我基本上是不是在列中保存了太大的字符串?2147483647字节是什么意思?文本列不能处理长度为39418的字符串吗?我需要知道这个具体的问题please@Bob-2147483647字节约为1.862GB。我假设您试图存储的数据对于该列来说太大,因此数据被截断。Unicode在“最坏情况”中每个字符使用四个字节(iirc)<代码>39418*4谢谢。你知道我怎么知道一个39418个字符的字符串有多大,这样我就可以确认这一点了吗?顺便说一句(你不应该使用,而是使用)是非Unicode的,所以你应该有完整的2147483647个字符。即使服务器代码页使用双字节字符。一个有用的相关链接:谢谢meorfi,只是想先确认是否是因为列的数据类型。编辑问题以反映this@Bob,可以用分析器检查通过param.Value传递的字符串吗。在将其写入DB之前具有完整值,或者,当trunc从系统传递到DB时可能具有完整值。