I'm facing really strange issue. Given the code below:
static void Main()
{
var c = new System.Data.SqlClient.SqlConnection();
c.ConnectionString = "Data Source=SOME_NAME;Initial Catalog=SOME_DB;Integrated Security=True";
c.ConnectionString = ""; //null also triggers exception
Console.WriteLine("Success");
}
It worked fine for quite a time, but on newest version of Windows 10 (1803) which has .NET Version 4.7.03056 Release 461808 (seems to be 4.7.2) it crashes with following exception:
Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object.
at System.Data.SqlClient.SqlConnection.CacheConnectionStringProperties()
at System.Data.SqlClient.SqlConnection.set_ConnectionString(String value)
at TestCacheConnectionStringProperties.Program.Main()
This crashes on the second assignment, if I remove any of the assignments of the ConnectionString it works ok.
I've looked at the sources and didn't find a place where NullReferenceException could happen (however sources seems to be for .NET Framework 4.7.1 so smth may change).
Now the question is - what causes this issue? Is this a .NET bug? If yes - how to address it?
UPDATE: According to the comments - thanks very much guys - the issue is caused by these lines (decompiled):
private void CacheConnectionStringProperties()
{
SqlConnectionString connectionOptions = this.ConnectionOptions as SqlConnectionString;
if (connectionOptions != null)
this._connectRetryCount = connectionOptions.ConnectRetryCount;
//Seems like this is causing the bug because it is not inside of null-check-if for connectionOptions variable
if (this._connectRetryCount != 1 || !ADP.IsAzureSqlServerEndpoint(connectionOptions.DataSource))
return;
this._connectRetryCount = 2;
}
It is somehow related to Azure and is quite different from what is available in sources.
I've posted the issue here and will wait for response.
CacheConnectionStringProperties. My IL decompiler for assembly version4.7.3056.0shows a call toADP.IsAzureSqlServerEndpoint(sqlConnectionString.DataSource)that is, improperly, outside the check for whethersqlConnectionStringisnull. It's not here, though, so I'm not sure where those bits are coming from.Twitterbug tracker