Я столкнулся с действительно странной проблемой. Учитывая приведенный ниже код:
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 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, поэтому smth может измениться).
Теперь вопрос в том, что вызывает эту проблему? Это ошибка.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 и сильно отличается от того, что доступно в источниках.
Я разместил здесь эту проблему и буду ждать ответа.