public void reading_big_text_with_execute_scalar_fails_limit_is_2033_characters()
{
using( var ctx = new SqlStandardCallContext( TestHelper.Monitor ) )
{
var c = ctx[TestHelper.MasterConnectionString];
string read;
SqlCommand cFailXml = new SqlCommand( "select * from sys.objects for xml path" );
read = (string)c.ExecuteScalar( cFailXml );
read.Should().HaveLength( 2033, "2033 is the upper limit for ExecuteScalar." );
SqlCommand cFailJson = new SqlCommand( "select * from sys.objects for json auto" );
read = (string)c.ExecuteScalar( cFailJson );
read.Should().HaveLength( 2033, "2033 is the upper limit for ExecuteScalar." );
// Using convert works for Json and Xml.
SqlCommand cConvJson = new SqlCommand( "select convert( nvarchar(max), (select * from sys.objects for json auto))" );
string readJsonConvert = (string)c.ExecuteScalar( cConvJson );
readJsonConvert.Length.Should().BeGreaterThan( 20 * 1024 );
SqlCommand cConvXml = new SqlCommand( "select convert( nvarchar(max), (select * from sys.objects for xml path))" );
string readXmlConvert = (string)c.ExecuteScalar( cConvXml );
readXmlConvert.Length.Should().BeGreaterThan( 20 * 1024 );
// Using the SqlDataReader works for Json and Xml.
SqlCommand cReaderJson = new SqlCommand( "select 1, Json = (select * from sys.objects for json auto)" );
string readJsonViaReader = c.ExecuteSingleRow( cReaderJson, r => r.GetString( 1 ) );
readJsonViaReader.Length.Should().BeGreaterThan( 20 * 1024 );
Assert.That( readJsonViaReader, Is.EqualTo( readJsonConvert ) );
SqlCommand cReaderXml = new SqlCommand( "select Xml = (select * from sys.objects for xml path)" );
string readXmlViaReader = c.ExecuteSingleRow( cReaderXml, r => r.GetString( 0 ) );
readXmlViaReader.Length.Should().BeGreaterThan( 20 * 1024 );
readXmlViaReader.Should().Be( readXmlConvert );
}
}