У меня действительно странная проблема. Учитывая код ниже:
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");
}
В течение долгого времени она работала нормально, но на новейшей версии Windows 10 (1803), которая имеет .NET Version 4.7.03056 Release 461808 (кажется, 4.7.2), происходит сбой со следующим исключением:
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()
Это сбой во втором назначении, если я удаляю любое из назначений ConnectionString
, оно работает нормально.
Я посмотрел на источники и не нашел места, где могло бы произойти NullReferenceException
(однако источники, похоже, для .NET Framework 4.7.1, поэтому что-то может измениться).
Теперь вопрос - что вызывает эту проблему? Это ошибка .NET? Если да - как это решить?
ОБНОВЛЕНИЕ: Согласно комментариям - большое спасибо, ребята, - проблема вызвана этими строками (декомпилировано):
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;
}
Он как-то связан с Azure и сильно отличается от того, что доступно в источниках.
Я опубликовал вопрос здесь и буду ждать ответа.