C# VARCHAR(MAX)列中的SqlBulkCopy截断字符串
我在SQL Server 2016上有一个简单的表: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类的一个限制
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();
}