C# 字符串或二进制数据将被截断。关于SqlDataReader

C# 字符串或二进制数据将被截断。关于SqlDataReader,c#,sql-server,sqldatareader,C#,Sql Server,Sqldatareader,我对select语句有问题。它在SQL Server中工作,但在C中使用时,它会在标题中显示错误 我的SQL语句如下所示 declare @312341v1Whenaddakeylength128charatsendingreportonP varchar(max)= 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec faucibus nulla ut lorem ornare, sit amet ullamcor

我对select语句有问题。它在SQL Server中工作,但在C中使用时,它会在标题中显示错误

我的SQL语句如下所示

  declare @312341v1Whenaddakeylength128charatsendingreportonP varchar(max)= 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec faucibus nulla ut lorem ornare, sit amet ullamcorper diam laoreet. Proin convallis est ut euismod rhoncus. Donec in magna eleifend, dictum neque non, pellentesque diam. Aliquam faucibus fringilla ex, vitae posuere lectus rhoncus congue. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam mollis vel enim at consequat. Integer porta feugiat sem, a condimentum felis hendrerit ac. Quisque lobortis placerat sodales. Nam et nunc nulla.

Pellentesque vel risus vel sem pellentesque feugiat. Ut sodales odio sollicitudin, consequat nisi quis, lobortis ex. Donec fermentum ante massa, luctus auctor sapien consectetur ac. Phasellus auctor nunc lorem, ultricies sollicitudin metus placerat ut. Proin non viverra erat. Maecenas malesuada orci mi. Curabitur vel dolor a ex ultrices posuere. Sed id quam porta lorem venenatis auctor sed a dolor. Suspendisse lobortis mauris blandit lacinia semper. Nunc nisl orci, porta nec maximus id, imperdiet vitae purus. Aenean a elit id augue suscipit pretium vel nec risus. Suspendisse potenti. Pellentesque facilisis mauris eu orci sagittis semper. Suspendisse at placerat mauris.

Sed vulputate est quis justo mattis convallis. Aenean tempor auctor arcu eget suscipit. Maecenas ac vehicula neque, ut placerat lorem. Integer felis lectus, varius sit amet neque auctor, ultrices interdum mauris. Ut fringilla, sapien id auctor blandit, enim diam tempus neque, eu tempus libero nibh a purus. Maecenas bibendum ligula ut malesuada placerat. Morbi egestas commodo velit eu egestas. Phasellus sed iaculis justo. Sed ipsum nisl, molestie ac luctus sit amet, fringilla luctus felis. Nullam vitae lorem in metus blandit maximus.

Nunc hendrerit odio quis felis mattis bibendum sed ut neque. Praesent blandit nunc in elit semper feugiat a a mi. Pellentesque a cursus nisi. Etiam maximus tristique elementum. Praesent finibus blandit sagittis. Morbi mollis leo justo, ut malesuada mauris ullamcorper sit amet. Ut eu bibendum justo. Integer tempus elit erat, non egestas urna tristique in. Quisque et massa nec felis rutrum posuere ut vitae sapien. Ut semper euismod mauris ac blandit. Vivamus dignissim est sit amet maximus volutpat. Cras fermentum massa nunc, non tincidunt erat rutrum vitae.

Ut commodo ullamcorper erat, eget sollicitudin nisl lacinia sed. Phasellus fermentum felis ac urna elementum, et bibendum nunc sagittis. Curabitur vestibulum tristique ante ut consequat. Pellentesque egestas ex sit amet mauris ultrices, malesuada bibendum est finibus. Curabitur ac feugiat arcu. Nam auctor pulvinar molestie. Quisque feugiat, nulla non rhoncus blandit, orci leo interdum eros, in imperdiet libero ante nec mauris. Morbi id aliquam purus, quis posuere magna. Nunc vel sem eget ante rhoncus imperdiet eu et leo.

Quisque ac malesuada est. Maecenas a dolor vitae turpis ultricies vestibulum. Quisque tincidunt lorem volutpat, eleifend nulla vel, dictum lorem. Nullam id imperdiet nunc, posuere hendrerit nulla. In volutpat, augue ut posuere ultricies, lectus sapien condimentum lectus, in consequat nibh nisi quis dolor. Cras rhoncus mi pellentesque massa dignissim convallis. Vivamus eu eleifend felis, vel eleifend dui. Etiam vitae sapien nunc. Integer est quam, sodales quis dolor vel, commodo sodales urna. Sed ac sapien ligula. Cras tempor felis vitae justo ullamcorper, ut venenatis risus commodo. Fusce lobortis egestas commodo.

Sed at libero quis mauris ultricies aliquam vel feugiat lorem. Donec pharetra vitae libero id placerat. Aliquam suscipit porta urna, a hendrerit mauris ullamcorper sit amet. Phasellus mollis diam sagittis metus dapibus, ac porta tortor euismod. Nam quam lacus, dignissim quis feugiat ut, rhoncus sit amet augue. Vestibulum molestie egestas venenatis. Ut a nulla in augue pretium tincidunt quis eget ex. Phasellus blandit bibendum neque. Sed laoreet ullamcorper justo. Morbi non sodales justo. Integer dignissim varius tincidunt. Nulla sagittis, sem ut tempor porta, lorem leo elementum sapien, sed sollicitudin diam nisl sed massa. Etiam egestas mauris nec bibendum pulvinar. Etiam sed nisl cursus, luctus augue non, pharetra enim. Suspendisse ac magna nisl. Mauris tempus eu mauris malesuada consectetur.

Duis tincidunt vitae diam et mattis. Donec laoreet euismod aliquam. Donec at efficitur sapien, vel lacinia ante. Proin vehicula ut quam vitae faucibus. Nam venenatis est sit amet tortor varius, quis sollicitudin lectus placerat. Donec vel aliquet tellus. Integer pellentesque leo sit amet lorem luctus, eu tempor nisl tincidunt.

Suspendisse turpis felis, euismod at auctor vel, hendrerit auctor sapien. Mauris finibus interdum vestibulum. Donec quis dolor ac orci commodo efficitur. Nullam in porttitor ipsum, a commodo mauris. Proin et blandit erat. Mauris posuere lacus non leo pulvinar, dignissim aliquam augue vulputate. Nullam et consequat augue, ac ultricies nibh.

Morbi vestibulum, orci eu molestie convallis, ligula felis convallis lectus, in congue tellus augue et purus. Nulla non dui urna. Aliquam at mattis mauris. Phasellus eget congue urna. Phasellus sollicitudin tellus leo, vel efficitur magna condimentum nec. Donec venenatis feugiat blandit. Quisque erat elit, feugiat nec orci volutpat, semper maximus turpis. Nulla rutrum molestie dolor sed varius. Morbi scelerisque quam dui, ac blandit leo rutrum nec. Vivamus vel maximus orci, at malesuada purus. Cras gravida vulputate augue, sit amet dictum erat aliquet cursus. Ut purus nibh, aliquam vel tincidunt a, vehicula sit amet nulla. Suspendisse ultrices, tortor eget tristique rhoncus, mi elit feugiat ante, ut elementum lacus quam a dolor. Vestibulum nibh justo, dapibus vitae massa vel, pellentesque iaculis tellus.

Fusce eu volutpat leo. Nunc luctus quis lorem nec mattis. Pellentesque eget sagittis sem. Curabitur mattis ligula ut iaculis accumsan. Aliquam ut enim ac magna hendrerit porttitor. In nec lorem non neque euismod luctus. Praesent euismod purus nec leo egestas lobortis.

Nunc eros ipsum, tincidunt a purus at, maximus lobortis ipsum. Sed condimentum, turpis non commodo ornare, ligula purus gravida sapien, in interdum elit risus sit amet nibh. Curabitur mattis cursus ligula. In ut lectus et massa iaculis dignissim. Interdum et malesuada fames ac sed.'


  SELECT * , CASE  WHEN Column1 LIKE '%' + @312341v1Whenaddakeylength128charatsendingreportonP+ '%' 
  THEN 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec faucibus nulla ut lorem ornare, sit amet ullamcorper diam laoreet. Proin convallis est ut euismod rhoncus. Donec in magna eleifend, dictum neque non, pellentesque diam. Aliquam faucibus fringilla ex, vitae posuere lectus rhoncus congue. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam mollis vel enim at consequat. Integer porta feugiat sem, a condimentum felis hendrerit ac. Quisque lobortis placerat sodales. Nam et nunc nulla.

Pellentesque vel risus vel sem pellentesque feugiat. Ut sodales odio sollicitudin, consequat nisi quis, lobortis ex. Donec fermentum ante massa, luctus auctor sapien consectetur ac. Phasellus auctor nunc lorem, ultricies sollicitudin metus placerat ut. Proin non viverra erat. Maecenas malesuada orci mi. Curabitur vel dolor a ex ultrices posuere. Sed id quam porta lorem venenatis auctor sed a dolor. Suspendisse lobortis mauris blandit lacinia semper. Nunc nisl orci, porta nec maximus id, imperdiet vitae purus. Aenean a elit id augue suscipit pretium vel nec risus. Suspendisse potenti. Pellentesque facilisis mauris eu orci sagittis semper. Suspendisse at placerat mauris.

Sed vulputate est quis justo mattis convallis. Aenean tempor auctor arcu eget suscipit. Maecenas ac vehicula neque, ut placerat lorem. Integer felis lectus, varius sit amet neque auctor, ultrices interdum mauris. Ut fringilla, sapien id auctor blandit, enim diam tempus neque, eu tempus libero nibh a purus. Maecenas bibendum ligula ut malesuada placerat. Morbi egestas commodo velit eu egestas. Phasellus sed iaculis justo. Sed ipsum nisl, molestie ac luctus sit amet, fringilla luctus felis. Nullam vitae lorem in metus blandit maximus.

Nunc hendrerit odio quis felis mattis bibendum sed ut neque. Praesent blandit nunc in elit semper feugiat a a mi. Pellentesque a cursus nisi. Etiam maximus tristique elementum. Praesent finibus blandit sagittis. Morbi mollis leo justo, ut malesuada mauris ullamcorper sit amet. Ut eu bibendum justo. Integer tempus elit erat, non egestas urna tristique in. Quisque et massa nec felis rutrum posuere ut vitae sapien. Ut semper euismod mauris ac blandit. Vivamus dignissim est sit amet maximus volutpat. Cras fermentum massa nunc, non tincidunt erat rutrum vitae.

Ut commodo ullamcorper erat, eget sollicitudin nisl lacinia sed. Phasellus fermentum felis ac urna elementum, et bibendum nunc sagittis. Curabitur vestibulum tristique ante ut consequat. Pellentesque egestas ex sit amet mauris ultrices, malesuada bibendum est finibus. Curabitur ac feugiat arcu. Nam auctor pulvinar molestie. Quisque feugiat, nulla non rhoncus blandit, orci leo interdum eros, in imperdiet libero ante nec mauris. Morbi id aliquam purus, quis posuere magna. Nunc vel sem eget ante rhoncus imperdiet eu et leo.

Quisque ac malesuada est. Maecenas a dolor vitae turpis ultricies vestibulum. Quisque tincidunt lorem volutpat, eleifend nulla vel, dictum lorem. Nullam id imperdiet nunc, posuere hendrerit nulla. In volutpat, augue ut posuere ultricies, lectus sapien condimentum lectus, in consequat nibh nisi quis dolor. Cras rhoncus mi pellentesque massa dignissim convallis. Vivamus eu eleifend felis, vel eleifend dui. Etiam vitae sapien nunc. Integer est quam, sodales quis dolor vel, commodo sodales urna. Sed ac sapien ligula. Cras tempor felis vitae justo ullamcorper, ut venenatis risus commodo. Fusce lobortis egestas commodo.

Sed at libero quis mauris ultricies aliquam vel feugiat lorem. Donec pharetra vitae libero id placerat. Aliquam suscipit porta urna, a hendrerit mauris ullamcorper sit amet. Phasellus mollis diam sagittis metus dapibus, ac porta tortor euismod. Nam quam lacus, dignissim quis feugiat ut, rhoncus sit amet augue. Vestibulum molestie egestas venenatis. Ut a nulla in augue pretium tincidunt quis eget ex. Phasellus blandit bibendum neque. Sed laoreet ullamcorper justo. Morbi non sodales justo. Integer dignissim varius tincidunt. Nulla sagittis, sem ut tempor porta, lorem leo elementum sapien, sed sollicitudin diam nisl sed massa. Etiam egestas mauris nec bibendum pulvinar. Etiam sed nisl cursus, luctus augue non, pharetra enim. Suspendisse ac magna nisl. Mauris tempus eu mauris malesuada consectetur.

Duis tincidunt vitae diam et mattis. Donec laoreet euismod aliquam. Donec at efficitur sapien, vel lacinia ante. Proin vehicula ut quam vitae faucibus. Nam venenatis est sit amet tortor varius, quis sollicitudin lectus placerat. Donec vel aliquet tellus. Integer pellentesque leo sit amet lorem luctus, eu tempor nisl tincidunt.

Suspendisse turpis felis, euismod at auctor vel, hendrerit auctor sapien. Mauris finibus interdum vestibulum. Donec quis dolor ac orci commodo efficitur. Nullam in porttitor ipsum, a commodo mauris. Proin et blandit erat. Mauris posuere lacus non leo pulvinar, dignissim aliquam augue vulputate. Nullam et consequat augue, ac ultricies nibh.

Morbi vestibulum, orci eu molestie convallis, ligula felis convallis lectus, in congue tellus augue et purus. Nulla non dui urna. Aliquam at mattis mauris. Phasellus eget congue urna. Phasellus sollicitudin tellus leo, vel efficitur magna condimentum nec. Donec venenatis feugiat blandit. Quisque erat elit, feugiat nec orci volutpat, semper maximus turpis. Nulla rutrum molestie dolor sed varius. Morbi scelerisque quam dui, ac blandit leo rutrum nec. Vivamus vel maximus orci, at malesuada purus. Cras gravida vulputate augue, sit amet dictum erat aliquet cursus. Ut purus nibh, aliquam vel tincidunt a, vehicula sit amet nulla. Suspendisse ultrices, tortor eget tristique rhoncus, mi elit feugiat ante, ut elementum lacus quam a dolor. Vestibulum nibh justo, dapibus vitae massa vel, pellentesque iaculis tellus.

Fusce eu volutpat leo. Nunc luctus quis lorem nec mattis. Pellentesque eget sagittis sem. Curabitur mattis ligula ut iaculis accumsan. Aliquam ut enim ac magna hendrerit porttitor. In nec lorem non neque euismod luctus. Praesent euismod purus nec leo egestas lobortis.

Nunc eros ipsum, tincidunt a purus at, maximus lobortis ipsum. Sed condimentum, turpis non commodo ornare, ligula purus gravida sapien, in interdum elit risus sit amet nibh. Curabitur mattis cursus ligula. In ut lectus et massa iaculis dignissim. Interdum et malesuada fames ac sed.' 
  END as ErrorCode FROM Table rpmsp WHERE   Column1 LIKE '%' + @312341v1Whenaddakeylength128charatsendingreportonP+ '%'  
因此,该语句在SQL中运行良好,它返回0行,但不会引发异常

在c中

这会在dataReader.Read上引发异常;例外情况是字符串或二进制数据将被截断。我不知道为什么,因为我没有插入,这只是一个动态选择


有什么想法吗?

我们构建了一个流程,将一些表导出到外部DB服务器。 我们使用以XML格式返回数据的视图

select col1, col2, col3 from table for xml auto
我发现在c中,我们使用存储过程和.ExecuteNonQuery,它为每个xml文件返回多行,我认为它使用2K数据包

然后,按顺序读取所有行并使用StringBuilder再次重建文本

StringBuilder xml_text = new StringBuilder();
foreach(DataRow row in table.Rows)
{
    xml_text.Append(row[0].ToString());
}

我们构建了一个进程,将一些表导出到外部DB服务器。 我们使用以XML格式返回数据的视图

select col1, col2, col3 from table for xml auto
我发现在c中,我们使用存储过程和.ExecuteNonQuery,它为每个xml文件返回多行,我认为它使用2K数据包

然后,按顺序读取所有行并使用StringBuilder再次重建文本

StringBuilder xml_text = new StringBuilder();
foreach(DataRow row in table.Rows)
{
    xml_text.Append(row[0].ToString());
}

这不是一个C问题。从错误消息可以看出,这是一个SQL。根本问题是SQL Server没有一致地强制转换字符串的数据类型/大小


在SQL中将所有字符串的显式强制转换添加到varcharmax中这不是C问题。从错误消息可以看出,这是一个SQL。根本问题是SQL Server没有一致地强制转换字符串的数据类型/大小


在SQL中将所有字符串的显式强制转换添加到varcharmax

是否因为返回的长字符串?您能否将SELECT中的长字符串显式转换为nvarcharmax?如果大幅缩短返回的字符串,问题会消失吗?作为一个实验者,还有其他代码吗?具体来说,sqlCommand是否接受参数?具体来说,@312341V1Whenadakeyngth128CharactersEndingReportOnP是一个参数吗?如果是,它声明的长度是多少?@AndrewDeighton是的,它可以工作3000个字符,它在我测试的3500个字符以上抛出异常。@JeroeMoster是的,它确实接受params sqlCommand.Parameters.AddWithValue@+RemoveNonAlphaNumericCharsFromStringkeyValue,keyValue@CiucaS:。NET将猜测参数类型。在这种情况下,它应该猜测[N]VARCHAR,但可能不会猜测MAX。如果您的参数是VARCHARMAX,请使用。Add@Name,SqlDbType.VarChar,-1.Value=keyValue。是否因为返回的长字符串?您能否将SELECT中的长字符串显式转换为nvarcharmax?如果大幅缩短返回的字符串,问题会消失吗?作为一个实验者,还有其他代码吗?具体来说,sqlCommand是否接受参数?具体来说,@312341V1Whenadakeyngth128CharactersEndingReportOnP是一个参数吗?如果是,它声明的长度是多少?@AndrewDeighton是的,它可以工作3000个字符,它在我测试的3500个字符以上抛出异常。@JeroeMoster是的,它确实接受params sqlCommand.Parameters.AddWithValue@+RemoveNonAlphaNumericCharsFromStringkeyValue,keyValue@CiucaS:。NET将猜测参数类型。在这种情况下,它应该猜测[N]VARCHAR,但可能不会猜测MAX。如果您的参数是VARCHARMAX,请使用。Add@Name,SqlDbType.VarChar,-1.Value=keyValue。我也这么认为,但查询在SQL中工作。不管怎样,我已经把字符数限制在3000个以内,没关系。我只是好奇为什么在一个有效的SQL查询中会出现这个错误,但我想这与C如何处理SQL查询有关。@CiucaS nope,这是SQL Server的一个错误。100%. 如果没有明确指示,查询不能保证生成相同的执行计划,也不能保证行为完全相同。不管怎样,我已经把字符数限制在3000个以内,没关系。我只是好奇为什么在一个有效的SQL查询中会出现这个错误,但我想这与C如何处理SQL查询有关。@CiucaS nope,这是SQL Server的一个错误。100%. 如果没有明确指示.mcNets.ty,查询不能保证生成完全相同的执行计划,也不能保证行为完全相同。如果需要长字符串,这可能是一个很好的解决方案。对我来说,这是一个失败的测试用例,不确定是什么导致了失败。这可能是一个很好的解决方案,以防您需要长字符串。对我来说,这是一个失败的测试用例,不确定是什么导致了失败。