C# VARCHAR(MAX)列中的SqlBulkCopy截断字符串

C# VARCHAR(MAX)列中的SqlBulkCopy截断字符串,c#,sql,sql-server,ado.net,sqlbulkcopy,C#,Sql,Sql Server,Ado.net,Sqlbulkcopy,我在SQL Server 2016上有一个简单的表: CREATE TABLE AgentDownload ( Download VARCHAR(max) ) 我使用下面的代码在C#中使用SqlBulkCopy类填充此表 在数据库中检索此条目时,单元格值被截断为65535个字符。这是某种程度上的限制,但我不确定这是从哪里来的,或者是否有办法解决这个问题?列可以包含更多的字符,C#中的字符串类型也可以包含更多的字符。有什么办法做这个手术吗 我认为这可能是SqlBulkCopy类的一个限制

我在SQL Server 2016上有一个简单的表:

 CREATE TABLE AgentDownload 
(
  Download VARCHAR(max)
)
我使用下面的代码在C#中使用SqlBulkCopy类填充此表

在数据库中检索此条目时,单元格值被截断为65535个字符。这是某种程度上的限制,但我不确定这是从哪里来的,或者是否有办法解决这个问题?列可以包含更多的字符,C#中的字符串类型也可以包含更多的字符。有什么办法做这个手术吗

我认为这可能是SqlBulkCopy类的一个限制,但使用如下替代代码也会产生相同的结果:

    using (var connection = new SqlConnection("Data Source=Server;Initial Catalog=Database;Integrated Security=True;"))
    {
        connection.Open();
        var transaction = connection.BeginTransaction();
        
        var cmd = connection.CreateCommand();
        cmd.Transaction = transaction;
        cmd.CommandText = "insert into AgentDownload (Download) values (CAST('' AS VARCHAR(MAX)) + @testVariable)";

        var parameter = new SqlParameter
        {
            ParameterName = "testVariable",
            DbType = DbType.String,
            Size = -1,
            Value = veryLongString
        };
        cmd.Parameters.Add(parameter);
        cmd.ExecuteNonQuery();
        transaction.Commit();
    }

您似乎正在使用SSMS查看批量插入的数据。SSMS在默认情况下将大值截断为65535个字符

要查看当前查询窗口的结果网格中的整个值,请从SSMS菜单的
query-->query Options-->results-->grid
下更改检索到的最大字符数值


还可以在
工具-->选项-->查询结果-->SQL Server-->结果到网格
下指定所有新查询窗口的值。但是,考虑对包含大量值的多行的客户机内存需求的影响。我建议明智地更改全局选项。

似乎您正在使用SSMS查看批量插入的数据。SSMS在默认情况下将大值截断为65535个字符

要查看当前查询窗口的结果网格中的整个值,请从SSMS菜单的
query-->query Options-->results-->grid
下更改检索到的最大字符数值


还可以在
工具-->选项-->查询结果-->SQL Server-->结果到网格
下指定所有新查询窗口的值。但是,考虑对包含大量值的多行的客户机内存需求的影响。我建议明智地更改全局选项。

“在数据库中检索此条目时,单元格值被截断为65535个字符。”您在哪里看到这一点?听起来像是在使用SSMS。@RomanRyzhiy这句话完全是假的。。。
varchar(MAX)
可以存储2GB的数据,约为20亿个字符。SSMS默认情况下会将较大的值截断为65535个字符。若要查看结果网格中的整个值,请将“工具-->选项-->查询结果-->SQL Server-->结果”下的“检索的最大字符数”值更改为“网格”。@DanGuzman哇,我的错了。这就是问题所在。我不知道这个。。。每天都是上学的日子。@Ben,我很少有一天不学习新东西,我已经使用SQL Server 25年了。“在数据库中检索此条目时,单元格值被截断为65535个字符。”你在哪里看到的?听起来像是在使用SSMS。@RomanRyzhiy这句话完全是假的。。。
varchar(MAX)
可以存储2GB的数据,约为20亿个字符。SSMS默认情况下会将较大的值截断为65535个字符。若要查看结果网格中的整个值,请将“工具-->选项-->查询结果-->SQL Server-->结果”下的“检索的最大字符数”值更改为“网格”。@DanGuzman哇,我的错了。这就是问题所在。我不知道这个。。。每天都是上学的日子。@Ben,我很少有一天不学习新东西,而且我已经使用SQL Server 25年了。
    using (var connection = new SqlConnection("Data Source=Server;Initial Catalog=Database;Integrated Security=True;"))
    {
        connection.Open();
        var transaction = connection.BeginTransaction();
        
        var cmd = connection.CreateCommand();
        cmd.Transaction = transaction;
        cmd.CommandText = "insert into AgentDownload (Download) values (CAST('' AS VARCHAR(MAX)) + @testVariable)";

        var parameter = new SqlParameter
        {
            ParameterName = "testVariable",
            DbType = DbType.String,
            Size = -1,
            Value = veryLongString
        };
        cmd.Parameters.Add(parameter);
        cmd.ExecuteNonQuery();
        transaction.Commit();
    }