From c06a6bb6a1e9f25ebdbde69cc8e6dbb07d9e84b1 Mon Sep 17 00:00:00 2001 From: Davoud Eshtehari Date: Wed, 13 Oct 2021 15:43:45 -0700 Subject: [PATCH 1/5] Combine --- .../src/Microsoft.Data.SqlClient.csproj | 4 +- .../SqlClient/SqlConnectionStringBuilder.cs | 1510 ----------------- .../netfx/src/Microsoft.Data.SqlClient.csproj | 4 +- .../SqlClient/SqlConnectionStringBuilder.cs | 1236 +++++++------- 4 files changed, 605 insertions(+), 2149 deletions(-) delete mode 100644 src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs rename src/Microsoft.Data.SqlClient/{netfx => }/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs (72%) diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj index 69914d8812..ff16ca9aac 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj @@ -369,6 +369,9 @@ Resources\StringsHelper.cs + + Microsoft\Data\SqlClient\SqlConnectionStringBuilder.cs + Microsoft\Data\Common\AdapterUtil.cs @@ -510,7 +513,6 @@ - Microsoft\Data\SqlClient\SqlConnectionTimeoutErrorInternal.cs diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs deleted file mode 100644 index cbb8f0dd67..0000000000 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs +++ /dev/null @@ -1,1510 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using System; -using System.Collections; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Data.Common; -using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; -using System.Linq; -using Microsoft.Data.Common; - -namespace Microsoft.Data.SqlClient -{ - /// - [DefaultPropertyAttribute(DbConnectionStringKeywords.DataSource)] - public sealed partial class SqlConnectionStringBuilder : DbConnectionStringBuilder - { - private enum Keywords - { // specific ordering for ConnectionString output construction - // NamedConnection, - DataSource, - FailoverPartner, - AttachDBFilename, - InitialCatalog, - IntegratedSecurity, - PersistSecurityInfo, - UserID, - Password, - Enlist, - Pooling, - MinPoolSize, - MaxPoolSize, - PoolBlockingPeriod, - MultipleActiveResultSets, - Replication, - ConnectTimeout, - Encrypt, - TrustServerCertificate, - LoadBalanceTimeout, - PacketSize, - TypeSystemVersion, - Authentication, - ApplicationName, - CurrentLanguage, - WorkstationID, - UserInstance, - TransactionBinding, - ApplicationIntent, - MultiSubnetFailover, - ConnectRetryCount, - ConnectRetryInterval, - ColumnEncryptionSetting, - EnclaveAttestationUrl, - AttestationProtocol, - - CommandTimeout, - IPAddressPreference, - - // keep the count value last - KeywordsCount - } - - internal const int KeywordsCount = (int)Keywords.KeywordsCount; - internal const int DeprecatedKeywordsCount = 3; - - private static readonly string[] s_validKeywords = CreateValidKeywords(); - private static readonly Dictionary s_keywords = CreateKeywordsDictionary(); - - private ApplicationIntent _applicationIntent = DbConnectionStringDefaults.ApplicationIntent; - private string _applicationName = DbConnectionStringDefaults.ApplicationName; - private string _attachDBFilename = DbConnectionStringDefaults.AttachDBFilename; - private string _currentLanguage = DbConnectionStringDefaults.CurrentLanguage; - private string _dataSource = DbConnectionStringDefaults.DataSource; - private string _failoverPartner = DbConnectionStringDefaults.FailoverPartner; - private string _initialCatalog = DbConnectionStringDefaults.InitialCatalog; - // private string _namedConnection = DbConnectionStringDefaults.NamedConnection; - private string _password = DbConnectionStringDefaults.Password; - private string _transactionBinding = DbConnectionStringDefaults.TransactionBinding; - private string _typeSystemVersion = DbConnectionStringDefaults.TypeSystemVersion; - private string _userID = DbConnectionStringDefaults.UserID; - private string _workstationID = DbConnectionStringDefaults.WorkstationID; - - private int _commandTimeout = DbConnectionStringDefaults.CommandTimeout; - private int _connectTimeout = DbConnectionStringDefaults.ConnectTimeout; - private int _loadBalanceTimeout = DbConnectionStringDefaults.LoadBalanceTimeout; - private int _maxPoolSize = DbConnectionStringDefaults.MaxPoolSize; - private int _minPoolSize = DbConnectionStringDefaults.MinPoolSize; - private int _packetSize = DbConnectionStringDefaults.PacketSize; - private int _connectRetryCount = DbConnectionStringDefaults.ConnectRetryCount; - private int _connectRetryInterval = DbConnectionStringDefaults.ConnectRetryInterval; - - private bool _encrypt = DbConnectionStringDefaults.Encrypt; - private bool _trustServerCertificate = DbConnectionStringDefaults.TrustServerCertificate; - private bool _enlist = DbConnectionStringDefaults.Enlist; - private bool _integratedSecurity = DbConnectionStringDefaults.IntegratedSecurity; - private bool _multipleActiveResultSets = DbConnectionStringDefaults.MultipleActiveResultSets; - private bool _multiSubnetFailover = DbConnectionStringDefaults.MultiSubnetFailover; - private bool _persistSecurityInfo = DbConnectionStringDefaults.PersistSecurityInfo; - private PoolBlockingPeriod _poolBlockingPeriod = DbConnectionStringDefaults.PoolBlockingPeriod; - private bool _pooling = DbConnectionStringDefaults.Pooling; - private bool _replication = DbConnectionStringDefaults.Replication; - private bool _userInstance = DbConnectionStringDefaults.UserInstance; - private SqlAuthenticationMethod _authentication = DbConnectionStringDefaults.Authentication; - private SqlConnectionColumnEncryptionSetting _columnEncryptionSetting = DbConnectionStringDefaults.ColumnEncryptionSetting; - private string _enclaveAttestationUrl = DbConnectionStringDefaults.EnclaveAttestationUrl; - private SqlConnectionAttestationProtocol _attestationProtocol = DbConnectionStringDefaults.AttestationProtocol; - private SqlConnectionIPAddressPreference _ipAddressPreference = DbConnectionStringDefaults.IPAddressPreference; - - private static string[] CreateValidKeywords() - { - string[] validKeywords = new string[KeywordsCount]; - validKeywords[(int)Keywords.ApplicationIntent] = DbConnectionStringKeywords.ApplicationIntent; - validKeywords[(int)Keywords.ApplicationName] = DbConnectionStringKeywords.ApplicationName; - validKeywords[(int)Keywords.AttachDBFilename] = DbConnectionStringKeywords.AttachDBFilename; - validKeywords[(int)Keywords.PoolBlockingPeriod] = DbConnectionStringKeywords.PoolBlockingPeriod; - validKeywords[(int)Keywords.CommandTimeout] = DbConnectionStringKeywords.CommandTimeout; - validKeywords[(int)Keywords.ConnectTimeout] = DbConnectionStringKeywords.ConnectTimeout; - validKeywords[(int)Keywords.CurrentLanguage] = DbConnectionStringKeywords.CurrentLanguage; - validKeywords[(int)Keywords.DataSource] = DbConnectionStringKeywords.DataSource; - validKeywords[(int)Keywords.Encrypt] = DbConnectionStringKeywords.Encrypt; - validKeywords[(int)Keywords.Enlist] = DbConnectionStringKeywords.Enlist; - validKeywords[(int)Keywords.FailoverPartner] = DbConnectionStringKeywords.FailoverPartner; - validKeywords[(int)Keywords.InitialCatalog] = DbConnectionStringKeywords.InitialCatalog; - validKeywords[(int)Keywords.IntegratedSecurity] = DbConnectionStringKeywords.IntegratedSecurity; - validKeywords[(int)Keywords.LoadBalanceTimeout] = DbConnectionStringKeywords.LoadBalanceTimeout; - validKeywords[(int)Keywords.MaxPoolSize] = DbConnectionStringKeywords.MaxPoolSize; - validKeywords[(int)Keywords.MinPoolSize] = DbConnectionStringKeywords.MinPoolSize; - validKeywords[(int)Keywords.MultipleActiveResultSets] = DbConnectionStringKeywords.MultipleActiveResultSets; - validKeywords[(int)Keywords.MultiSubnetFailover] = DbConnectionStringKeywords.MultiSubnetFailover; - // validKeywords[(int)Keywords.NamedConnection] = DbConnectionStringKeywords.NamedConnection; - validKeywords[(int)Keywords.PacketSize] = DbConnectionStringKeywords.PacketSize; - validKeywords[(int)Keywords.Password] = DbConnectionStringKeywords.Password; - validKeywords[(int)Keywords.PersistSecurityInfo] = DbConnectionStringKeywords.PersistSecurityInfo; - validKeywords[(int)Keywords.Pooling] = DbConnectionStringKeywords.Pooling; - validKeywords[(int)Keywords.Replication] = DbConnectionStringKeywords.Replication; - validKeywords[(int)Keywords.TransactionBinding] = DbConnectionStringKeywords.TransactionBinding; - validKeywords[(int)Keywords.TrustServerCertificate] = DbConnectionStringKeywords.TrustServerCertificate; - validKeywords[(int)Keywords.TypeSystemVersion] = DbConnectionStringKeywords.TypeSystemVersion; - validKeywords[(int)Keywords.UserID] = DbConnectionStringKeywords.UserID; - validKeywords[(int)Keywords.UserInstance] = DbConnectionStringKeywords.UserInstance; - validKeywords[(int)Keywords.WorkstationID] = DbConnectionStringKeywords.WorkstationID; - validKeywords[(int)Keywords.ConnectRetryCount] = DbConnectionStringKeywords.ConnectRetryCount; - validKeywords[(int)Keywords.ConnectRetryInterval] = DbConnectionStringKeywords.ConnectRetryInterval; - validKeywords[(int)Keywords.Authentication] = DbConnectionStringKeywords.Authentication; - validKeywords[(int)Keywords.ColumnEncryptionSetting] = DbConnectionStringKeywords.ColumnEncryptionSetting; - validKeywords[(int)Keywords.EnclaveAttestationUrl] = DbConnectionStringKeywords.EnclaveAttestationUrl; - validKeywords[(int)Keywords.AttestationProtocol] = DbConnectionStringKeywords.AttestationProtocol; - validKeywords[(int)Keywords.IPAddressPreference] = DbConnectionStringKeywords.IPAddressPreference; - return validKeywords; - } - - private static Dictionary CreateKeywordsDictionary() - { - Dictionary hash = new Dictionary(KeywordsCount + SqlConnectionString.SynonymCount, StringComparer.OrdinalIgnoreCase); - hash.Add(DbConnectionStringKeywords.ApplicationIntent, Keywords.ApplicationIntent); - hash.Add(DbConnectionStringKeywords.ApplicationName, Keywords.ApplicationName); - hash.Add(DbConnectionStringKeywords.AttachDBFilename, Keywords.AttachDBFilename); - hash.Add(DbConnectionStringKeywords.PoolBlockingPeriod, Keywords.PoolBlockingPeriod); - hash.Add(DbConnectionStringKeywords.CommandTimeout, Keywords.CommandTimeout); - hash.Add(DbConnectionStringKeywords.ConnectTimeout, Keywords.ConnectTimeout); - hash.Add(DbConnectionStringKeywords.CurrentLanguage, Keywords.CurrentLanguage); - hash.Add(DbConnectionStringKeywords.DataSource, Keywords.DataSource); - hash.Add(DbConnectionStringKeywords.Encrypt, Keywords.Encrypt); - hash.Add(DbConnectionStringKeywords.Enlist, Keywords.Enlist); - hash.Add(DbConnectionStringKeywords.FailoverPartner, Keywords.FailoverPartner); - hash.Add(DbConnectionStringKeywords.InitialCatalog, Keywords.InitialCatalog); - hash.Add(DbConnectionStringKeywords.IntegratedSecurity, Keywords.IntegratedSecurity); - hash.Add(DbConnectionStringKeywords.LoadBalanceTimeout, Keywords.LoadBalanceTimeout); - hash.Add(DbConnectionStringKeywords.MultipleActiveResultSets, Keywords.MultipleActiveResultSets); - hash.Add(DbConnectionStringKeywords.MaxPoolSize, Keywords.MaxPoolSize); - hash.Add(DbConnectionStringKeywords.MinPoolSize, Keywords.MinPoolSize); - hash.Add(DbConnectionStringKeywords.MultiSubnetFailover, Keywords.MultiSubnetFailover); - // hash.Add(DbConnectionStringKeywords.NamedConnection, Keywords.NamedConnection); - hash.Add(DbConnectionStringKeywords.PacketSize, Keywords.PacketSize); - hash.Add(DbConnectionStringKeywords.Password, Keywords.Password); - hash.Add(DbConnectionStringKeywords.PersistSecurityInfo, Keywords.PersistSecurityInfo); - hash.Add(DbConnectionStringKeywords.Pooling, Keywords.Pooling); - hash.Add(DbConnectionStringKeywords.Replication, Keywords.Replication); - hash.Add(DbConnectionStringKeywords.TransactionBinding, Keywords.TransactionBinding); - hash.Add(DbConnectionStringKeywords.TrustServerCertificate, Keywords.TrustServerCertificate); - hash.Add(DbConnectionStringKeywords.TypeSystemVersion, Keywords.TypeSystemVersion); - hash.Add(DbConnectionStringKeywords.UserID, Keywords.UserID); - hash.Add(DbConnectionStringKeywords.UserInstance, Keywords.UserInstance); - hash.Add(DbConnectionStringKeywords.WorkstationID, Keywords.WorkstationID); - hash.Add(DbConnectionStringKeywords.ConnectRetryCount, Keywords.ConnectRetryCount); - hash.Add(DbConnectionStringKeywords.ConnectRetryInterval, Keywords.ConnectRetryInterval); - hash.Add(DbConnectionStringKeywords.Authentication, Keywords.Authentication); - hash.Add(DbConnectionStringKeywords.ColumnEncryptionSetting, Keywords.ColumnEncryptionSetting); - hash.Add(DbConnectionStringKeywords.EnclaveAttestationUrl, Keywords.EnclaveAttestationUrl); - hash.Add(DbConnectionStringKeywords.AttestationProtocol, Keywords.AttestationProtocol); - hash.Add(DbConnectionStringKeywords.IPAddressPreference, Keywords.IPAddressPreference); - - hash.Add(DbConnectionStringSynonyms.IPADDRESSPREFERENCE, Keywords.IPAddressPreference); - hash.Add(DbConnectionStringSynonyms.APP, Keywords.ApplicationName); - hash.Add(DbConnectionStringSynonyms.APPLICATIONINTENT, Keywords.ApplicationIntent); - hash.Add(DbConnectionStringSynonyms.EXTENDEDPROPERTIES, Keywords.AttachDBFilename); - hash.Add(DbConnectionStringSynonyms.INITIALFILENAME, Keywords.AttachDBFilename); - hash.Add(DbConnectionStringSynonyms.CONNECTIONTIMEOUT, Keywords.ConnectTimeout); - hash.Add(DbConnectionStringSynonyms.CONNECTRETRYCOUNT, Keywords.ConnectRetryCount); - hash.Add(DbConnectionStringSynonyms.CONNECTRETRYINTERVAL, Keywords.ConnectRetryInterval); - hash.Add(DbConnectionStringSynonyms.TIMEOUT, Keywords.ConnectTimeout); - hash.Add(DbConnectionStringSynonyms.LANGUAGE, Keywords.CurrentLanguage); - hash.Add(DbConnectionStringSynonyms.ADDR, Keywords.DataSource); - hash.Add(DbConnectionStringSynonyms.ADDRESS, Keywords.DataSource); - hash.Add(DbConnectionStringSynonyms.MULTIPLEACTIVERESULTSETS, Keywords.MultipleActiveResultSets); - hash.Add(DbConnectionStringSynonyms.MULTISUBNETFAILOVER, Keywords.MultiSubnetFailover); - hash.Add(DbConnectionStringSynonyms.NETWORKADDRESS, Keywords.DataSource); - hash.Add(DbConnectionStringSynonyms.POOLBLOCKINGPERIOD, Keywords.PoolBlockingPeriod); - hash.Add(DbConnectionStringSynonyms.SERVER, Keywords.DataSource); - hash.Add(DbConnectionStringSynonyms.DATABASE, Keywords.InitialCatalog); - hash.Add(DbConnectionStringSynonyms.TRUSTEDCONNECTION, Keywords.IntegratedSecurity); - hash.Add(DbConnectionStringSynonyms.TRUSTSERVERCERTIFICATE, Keywords.TrustServerCertificate); - hash.Add(DbConnectionStringSynonyms.ConnectionLifetime, Keywords.LoadBalanceTimeout); - hash.Add(DbConnectionStringSynonyms.Pwd, Keywords.Password); - hash.Add(DbConnectionStringSynonyms.PERSISTSECURITYINFO, Keywords.PersistSecurityInfo); - hash.Add(DbConnectionStringSynonyms.UID, Keywords.UserID); - hash.Add(DbConnectionStringSynonyms.User, Keywords.UserID); - hash.Add(DbConnectionStringSynonyms.WSID, Keywords.WorkstationID); - Debug.Assert((KeywordsCount + SqlConnectionString.SynonymCount) == hash.Count, "initial expected size is incorrect"); - return hash; - } - - /// - public SqlConnectionStringBuilder() : this((string)null) - { - } - - /// - public SqlConnectionStringBuilder(string connectionString) : base() - { - if (!string.IsNullOrEmpty(connectionString)) - { - ConnectionString = connectionString; - } - } - - /// - public override object this[string keyword] - { - get - { - Keywords index = GetIndex(keyword); - return GetAt(index); - } - set - { - if (null != value) - { - Keywords index = GetIndex(keyword); - switch (index) - { - case Keywords.ApplicationIntent: - this.ApplicationIntent = ConvertToApplicationIntent(keyword, value); - break; - case Keywords.ApplicationName: - ApplicationName = ConvertToString(value); - break; - case Keywords.AttachDBFilename: - AttachDBFilename = ConvertToString(value); - break; - case Keywords.CurrentLanguage: - CurrentLanguage = ConvertToString(value); - break; - case Keywords.DataSource: - DataSource = ConvertToString(value); - break; - case Keywords.FailoverPartner: - FailoverPartner = ConvertToString(value); - break; - case Keywords.InitialCatalog: - InitialCatalog = ConvertToString(value); - break; - // case Keywords.NamedConnection: NamedConnection = ConvertToString(value); break; - case Keywords.Password: - Password = ConvertToString(value); - break; - case Keywords.UserID: - UserID = ConvertToString(value); - break; - case Keywords.TransactionBinding: - TransactionBinding = ConvertToString(value); - break; - case Keywords.TypeSystemVersion: - TypeSystemVersion = ConvertToString(value); - break; - case Keywords.WorkstationID: - WorkstationID = ConvertToString(value); - break; - - case Keywords.CommandTimeout: - CommandTimeout = ConvertToInt32(value); - break; - case Keywords.ConnectTimeout: - ConnectTimeout = ConvertToInt32(value); - break; - case Keywords.LoadBalanceTimeout: - LoadBalanceTimeout = ConvertToInt32(value); - break; - case Keywords.MaxPoolSize: - MaxPoolSize = ConvertToInt32(value); - break; - case Keywords.MinPoolSize: - MinPoolSize = ConvertToInt32(value); - break; - case Keywords.PacketSize: - PacketSize = ConvertToInt32(value); - break; - - case Keywords.IntegratedSecurity: - IntegratedSecurity = ConvertToIntegratedSecurity(value); - break; - case Keywords.Authentication: - Authentication = ConvertToAuthenticationType(keyword, value); - break; - case Keywords.ColumnEncryptionSetting: - ColumnEncryptionSetting = ConvertToColumnEncryptionSetting(keyword, value); - break; - case Keywords.EnclaveAttestationUrl: - EnclaveAttestationUrl = ConvertToString(value); - break; - case Keywords.AttestationProtocol: - AttestationProtocol = ConvertToAttestationProtocol(keyword, value); - break; - case Keywords.IPAddressPreference: - IPAddressPreference = ConvertToIPAddressPreference(keyword, value); - break; - case Keywords.PoolBlockingPeriod: - PoolBlockingPeriod = ConvertToPoolBlockingPeriod(keyword, value); - break; - case Keywords.Encrypt: - Encrypt = ConvertToBoolean(value); - break; - case Keywords.TrustServerCertificate: - TrustServerCertificate = ConvertToBoolean(value); - break; - case Keywords.Enlist: - Enlist = ConvertToBoolean(value); - break; - case Keywords.MultipleActiveResultSets: - MultipleActiveResultSets = ConvertToBoolean(value); - break; - case Keywords.MultiSubnetFailover: - MultiSubnetFailover = ConvertToBoolean(value); - break; - case Keywords.PersistSecurityInfo: - PersistSecurityInfo = ConvertToBoolean(value); - break; - case Keywords.Pooling: - Pooling = ConvertToBoolean(value); - break; - case Keywords.Replication: - Replication = ConvertToBoolean(value); - break; - case Keywords.UserInstance: - UserInstance = ConvertToBoolean(value); - break; - case Keywords.ConnectRetryCount: - ConnectRetryCount = ConvertToInt32(value); - break; - case Keywords.ConnectRetryInterval: - ConnectRetryInterval = ConvertToInt32(value); - break; - - default: - Debug.Fail("unexpected keyword"); - throw UnsupportedKeyword(keyword); - } - } - else - { - Remove(keyword); - } - } - } - - /// - [DisplayNameAttribute(DbConnectionStringKeywords.ApplicationIntent)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Initialization)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_ApplicationIntent)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public ApplicationIntent ApplicationIntent - { - get { return _applicationIntent; } - set - { - if (!DbConnectionStringBuilderUtil.IsValidApplicationIntentValue(value)) - { - throw ADP.InvalidEnumerationValue(typeof(ApplicationIntent), (int)value); - } - - SetApplicationIntentValue(value); - _applicationIntent = value; - } - } - - /// - [DisplayNameAttribute(DbConnectionStringKeywords.ApplicationName)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Context)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_ApplicationName)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public string ApplicationName - { - get { return _applicationName; } - set - { - SetValue(DbConnectionStringKeywords.ApplicationName, value); - _applicationName = value; - } - } - - /// - [DisplayNameAttribute(DbConnectionStringKeywords.AttachDBFilename)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Source)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_AttachDBFilename)] - [EditorAttribute("System.Windows.Forms.Design.FileNameEditor, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public string AttachDBFilename - { - get { return _attachDBFilename; } - set - { - SetValue(DbConnectionStringKeywords.AttachDBFilename, value); - _attachDBFilename = value; - } - } - - /// - [DisplayNameAttribute(DbConnectionStringKeywords.CommandTimeout)] - [ResCategory(StringsHelper.ResourceNames.DataCategory_Initialization)] - [ResDescription(StringsHelper.ResourceNames.DbCommand_CommandTimeout)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public int CommandTimeout - { - get { return _commandTimeout; } - set - { - if (value < 0) - { - throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.CommandTimeout); - } - SetValue(DbConnectionStringKeywords.CommandTimeout, value); - _commandTimeout = value; - } - } - - /// - [DisplayNameAttribute(DbConnectionStringKeywords.ConnectTimeout)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Initialization)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_ConnectTimeout)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public int ConnectTimeout - { - get { return _connectTimeout; } - set - { - if (value < 0) - { - throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.ConnectTimeout); - } - SetValue(DbConnectionStringKeywords.ConnectTimeout, value); - _connectTimeout = value; - } - } - - /// - [DisplayNameAttribute(DbConnectionStringKeywords.CurrentLanguage)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Initialization)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_CurrentLanguage)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public string CurrentLanguage - { - get { return _currentLanguage; } - set - { - SetValue(DbConnectionStringKeywords.CurrentLanguage, value); - _currentLanguage = value; - } - } - - /// - [DisplayNameAttribute(DbConnectionStringKeywords.DataSource)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Source)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_DataSource)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public string DataSource - { - get { return _dataSource; } - set - { - SetValue(DbConnectionStringKeywords.DataSource, value); - _dataSource = value; - } - } - - /// - [DisplayNameAttribute(DbConnectionStringKeywords.Encrypt)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_Encrypt)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public bool Encrypt - { - get { return _encrypt; } - set - { - SetValue(DbConnectionStringKeywords.Encrypt, value); - _encrypt = value; - } - } - - /// - [DisplayNameAttribute(DbConnectionStringKeywords.ColumnEncryptionSetting)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.TCE_DbConnectionString_ColumnEncryptionSetting)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public SqlConnectionColumnEncryptionSetting ColumnEncryptionSetting - { - get { return _columnEncryptionSetting; } - set - { - if (!DbConnectionStringBuilderUtil.IsValidColumnEncryptionSetting(value)) - { - throw ADP.InvalidEnumerationValue(typeof(SqlConnectionColumnEncryptionSetting), (int)value); - } - - SetColumnEncryptionSettingValue(value); - _columnEncryptionSetting = value; - } - } - - /// - [DisplayNameAttribute(DbConnectionStringKeywords.EnclaveAttestationUrl)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.TCE_DbConnectionString_EnclaveAttestationUrl)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public string EnclaveAttestationUrl - { - get { return _enclaveAttestationUrl; } - set - { - SetValue(DbConnectionStringKeywords.EnclaveAttestationUrl, value); - _enclaveAttestationUrl = value; - } - } - - /// - [DisplayNameAttribute(DbConnectionStringKeywords.AttestationProtocol)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.TCE_DbConnectionString_AttestationProtocol)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public SqlConnectionAttestationProtocol AttestationProtocol - { - get { return _attestationProtocol; } - set - { - if (!DbConnectionStringBuilderUtil.IsValidAttestationProtocol(value)) - { - throw ADP.InvalidEnumerationValue(typeof(SqlConnectionAttestationProtocol), (int)value); - } - - SetAttestationProtocolValue(value); - _attestationProtocol = value; - } - } - - /// - [DisplayNameAttribute(DbConnectionStringKeywords.IPAddressPreference)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.TCE_DbConnectionString_IPAddressPreference)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public SqlConnectionIPAddressPreference IPAddressPreference - { - get => _ipAddressPreference; - set - { - if (!DbConnectionStringBuilderUtil.IsValidIPAddressPreference(value)) - { - throw ADP.InvalidEnumerationValue(typeof(SqlConnectionIPAddressPreference), (int)value); - } - - SetIPAddressPreferenceValue(value); - _ipAddressPreference = value; - } - } - - /// - [DisplayNameAttribute(DbConnectionStringKeywords.TrustServerCertificate)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_TrustServerCertificate)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public bool TrustServerCertificate - { - get { return _trustServerCertificate; } - set - { - SetValue(DbConnectionStringKeywords.TrustServerCertificate, value); - _trustServerCertificate = value; - } - } - - /// - [DisplayNameAttribute(DbConnectionStringKeywords.Enlist)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Pooling)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_Enlist)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public bool Enlist - { - get { return _enlist; } - set - { - SetValue(DbConnectionStringKeywords.Enlist, value); - _enlist = value; - } - } - - /// - [DisplayNameAttribute(DbConnectionStringKeywords.FailoverPartner)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Source)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_FailoverPartner)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public string FailoverPartner - { - get { return _failoverPartner; } - set - { - SetValue(DbConnectionStringKeywords.FailoverPartner, value); - _failoverPartner = value; - } - } - - /// - [DisplayNameAttribute(DbConnectionStringKeywords.InitialCatalog)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Source)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_InitialCatalog)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - [TypeConverter(typeof(SqlInitialCatalogConverter))] - public string InitialCatalog - { - get { return _initialCatalog; } - set - { - SetValue(DbConnectionStringKeywords.InitialCatalog, value); - _initialCatalog = value; - } - } - - /// - [DisplayNameAttribute(DbConnectionStringKeywords.IntegratedSecurity)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_IntegratedSecurity)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public bool IntegratedSecurity - { - get { return _integratedSecurity; } - set - { - SetValue(DbConnectionStringKeywords.IntegratedSecurity, value); - _integratedSecurity = value; - } - } - - /// - [DisplayNameAttribute(DbConnectionStringKeywords.Authentication)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_Authentication)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public SqlAuthenticationMethod Authentication - { - get { return _authentication; } - set - { - if (!DbConnectionStringBuilderUtil.IsValidAuthenticationTypeValue(value)) - { - throw ADP.InvalidEnumerationValue(typeof(SqlAuthenticationMethod), (int)value); - } - - SetAuthenticationValue(value); - _authentication = value; - } - } - - /// - [DisplayNameAttribute(DbConnectionStringKeywords.LoadBalanceTimeout)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Pooling)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_LoadBalanceTimeout)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public int LoadBalanceTimeout - { - get { return _loadBalanceTimeout; } - set - { - if (value < 0) - { - throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.LoadBalanceTimeout); - } - SetValue(DbConnectionStringKeywords.LoadBalanceTimeout, value); - _loadBalanceTimeout = value; - } - } - - /// - [DisplayNameAttribute(DbConnectionStringKeywords.MaxPoolSize)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Pooling)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_MaxPoolSize)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public int MaxPoolSize - { - get { return _maxPoolSize; } - set - { - if (value < 1) - { - throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.MaxPoolSize); - } - SetValue(DbConnectionStringKeywords.MaxPoolSize, value); - _maxPoolSize = value; - } - } - - /// - [DisplayNameAttribute(DbConnectionStringKeywords.ConnectRetryCount)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_ConnectionResilency)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_ConnectRetryCount)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public int ConnectRetryCount - { - get { return _connectRetryCount; } - set - { - if ((value < 0) || (value > 255)) - { - throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.ConnectRetryCount); - } - SetValue(DbConnectionStringKeywords.ConnectRetryCount, value); - _connectRetryCount = value; - } - } - - /// - [DisplayNameAttribute(DbConnectionStringKeywords.ConnectRetryInterval)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_ConnectionResilency)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_ConnectRetryInterval)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public int ConnectRetryInterval - { - get { return _connectRetryInterval; } - set - { - if ((value < 1) || (value > 60)) - { - throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.ConnectRetryInterval); - } - SetValue(DbConnectionStringKeywords.ConnectRetryInterval, value); - _connectRetryInterval = value; - } - } - - - /// - [DisplayNameAttribute(DbConnectionStringKeywords.MinPoolSize)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Pooling)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_MinPoolSize)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public int MinPoolSize - { - get { return _minPoolSize; } - set - { - if (value < 0) - { - throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.MinPoolSize); - } - SetValue(DbConnectionStringKeywords.MinPoolSize, value); - _minPoolSize = value; - } - } - - /// - [DisplayNameAttribute(DbConnectionStringKeywords.MultipleActiveResultSets)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Advanced)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_MultipleActiveResultSets)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public bool MultipleActiveResultSets - { - get { return _multipleActiveResultSets; } - set - { - SetValue(DbConnectionStringKeywords.MultipleActiveResultSets, value); - _multipleActiveResultSets = value; - } - } - - /// - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", Justification = "Reviewed and Approved by UE")] - [DisplayNameAttribute(DbConnectionStringKeywords.MultiSubnetFailover)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Source)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_MultiSubnetFailover)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public bool MultiSubnetFailover - { - get { return _multiSubnetFailover; } - set - { - SetValue(DbConnectionStringKeywords.MultiSubnetFailover, value); - _multiSubnetFailover = value; - } - } - /* - [DisplayName(DbConnectionStringKeywords.NamedConnection)] - [ResCategoryAttribute(Strings.DataCategory_NamedConnectionString)] - [ResDescriptionAttribute(Strings.DbConnectionString_NamedConnection)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - [TypeConverter(typeof(NamedConnectionStringConverter))] - public string NamedConnection { - get { return _namedConnection; } - set { - SetValue(DbConnectionStringKeywords.NamedConnection, value); - _namedConnection = value; - } - } - */ - /// - [DisplayNameAttribute(DbConnectionStringKeywords.PacketSize)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Advanced)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_PacketSize)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public int PacketSize - { - get { return _packetSize; } - set - { - if ((value < TdsEnums.MIN_PACKET_SIZE) || (TdsEnums.MAX_PACKET_SIZE < value)) - { - throw SQL.InvalidPacketSizeValue(); - } - SetValue(DbConnectionStringKeywords.PacketSize, value); - _packetSize = value; - } - } - - /// - [DisplayNameAttribute(DbConnectionStringKeywords.Password)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_Password)] - [PasswordPropertyTextAttribute(true)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public string Password - { - get { return _password; } - set - { - SetValue(DbConnectionStringKeywords.Password, value); - _password = value; - } - } - - /// - [DisplayNameAttribute(DbConnectionStringKeywords.PersistSecurityInfo)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_PersistSecurityInfo)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public bool PersistSecurityInfo - { - get { return _persistSecurityInfo; } - set - { - SetValue(DbConnectionStringKeywords.PersistSecurityInfo, value); - _persistSecurityInfo = value; - } - } - - /// - [DisplayName(DbConnectionStringKeywords.PoolBlockingPeriod)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Pooling)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_PoolBlockingPeriod)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public PoolBlockingPeriod PoolBlockingPeriod - { - get { return _poolBlockingPeriod; } - set - { - if (!DbConnectionStringBuilderUtil.IsValidPoolBlockingPeriodValue(value)) - { - throw ADP.InvalidEnumerationValue(typeof(PoolBlockingPeriod), (int)value); - } - - SetPoolBlockingPeriodValue(value); - _poolBlockingPeriod = value; - } - } - - /// - [DisplayNameAttribute(DbConnectionStringKeywords.Pooling)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Pooling)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_Pooling)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public bool Pooling - { - get { return _pooling; } - set - { - SetValue(DbConnectionStringKeywords.Pooling, value); - _pooling = value; - } - } - - /// - [DisplayNameAttribute(DbConnectionStringKeywords.Replication)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Replication)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_Replication)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public bool Replication - { - get { return _replication; } - set - { - SetValue(DbConnectionStringKeywords.Replication, value); - _replication = value; - } - } - - /// - [DisplayNameAttribute(DbConnectionStringKeywords.TransactionBinding)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Advanced)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_TransactionBinding)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public string TransactionBinding - { - get { return _transactionBinding; } - set - { - SetValue(DbConnectionStringKeywords.TransactionBinding, value); - _transactionBinding = value; - } - } - - /// - [DisplayNameAttribute(DbConnectionStringKeywords.TypeSystemVersion)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Advanced)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_TypeSystemVersion)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public string TypeSystemVersion - { - get { return _typeSystemVersion; } - set - { - SetValue(DbConnectionStringKeywords.TypeSystemVersion, value); - _typeSystemVersion = value; - } - } - - /// - [DisplayNameAttribute(DbConnectionStringKeywords.UserID)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_UserID)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public string UserID - { - get { return _userID; } - set - { - SetValue(DbConnectionStringKeywords.UserID, value); - _userID = value; - } - } - - /// - [DisplayNameAttribute(DbConnectionStringKeywords.UserInstance)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Source)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_UserInstance)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public bool UserInstance - { - get { return _userInstance; } - set - { - SetValue(DbConnectionStringKeywords.UserInstance, value); - _userInstance = value; - } - } - - /// - [DisplayNameAttribute(DbConnectionStringKeywords.WorkstationID)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Context)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_WorkstationID)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public string WorkstationID - { - get { return _workstationID; } - set - { - SetValue(DbConnectionStringKeywords.WorkstationID, value); - _workstationID = value; - } - } - - /// - public override ICollection Keys - { - get - { - return new System.Collections.ObjectModel.ReadOnlyCollection(s_validKeywords); - } - } - - /// - public override ICollection Values - { - get - { - // written this way so if the ordering of Keywords & _validKeywords changes - // this is one less place to maintain - object[] values = new object[s_validKeywords.Length]; - for (int i = 0; i < values.Length; ++i) - { - values[i] = GetAt((Keywords)i); - } - return new System.Collections.ObjectModel.ReadOnlyCollection(values); - } - } - - /// - public override void Clear() - { - base.Clear(); - for (int i = 0; i < s_validKeywords.Length; ++i) - { - Reset((Keywords)i); - } - } - - /// - public override bool ContainsKey(string keyword) - { - ADP.CheckArgumentNull(keyword, nameof(keyword)); - return s_keywords.ContainsKey(keyword); - } - - private static bool ConvertToBoolean(object value) - { - return DbConnectionStringBuilderUtil.ConvertToBoolean(value); - } - private static int ConvertToInt32(object value) - { - return DbConnectionStringBuilderUtil.ConvertToInt32(value); - } - private static bool ConvertToIntegratedSecurity(object value) - { - return DbConnectionStringBuilderUtil.ConvertToIntegratedSecurity(value); - } - private static SqlAuthenticationMethod ConvertToAuthenticationType(string keyword, object value) - { - return DbConnectionStringBuilderUtil.ConvertToAuthenticationType(keyword, value); - } - private static string ConvertToString(object value) - { - return DbConnectionStringBuilderUtil.ConvertToString(value); - } - private static ApplicationIntent ConvertToApplicationIntent(string keyword, object value) - { - return DbConnectionStringBuilderUtil.ConvertToApplicationIntent(keyword, value); - } - - /// - /// Convert to SqlConnectionColumnEncryptionSetting. - /// - /// - /// - private static SqlConnectionColumnEncryptionSetting ConvertToColumnEncryptionSetting(string keyword, object value) - { - return DbConnectionStringBuilderUtil.ConvertToColumnEncryptionSetting(keyword, value); - } - - /// - /// Convert to SqlConnectionAttestationProtocol - /// - /// - /// - private static SqlConnectionAttestationProtocol ConvertToAttestationProtocol(string keyword, object value) - { - return DbConnectionStringBuilderUtil.ConvertToAttestationProtocol(keyword, value); - } - - /// - /// Convert to SqlConnectionIPAddressPreference - /// - /// - /// - private static SqlConnectionIPAddressPreference ConvertToIPAddressPreference(string keyword, object value) - => DbConnectionStringBuilderUtil.ConvertToIPAddressPreference(keyword, value); - - private static PoolBlockingPeriod ConvertToPoolBlockingPeriod(string keyword, object value) - => DbConnectionStringBuilderUtil.ConvertToPoolBlockingPeriod(keyword, value); - - private object GetAt(Keywords index) - { - switch (index) - { - case Keywords.ApplicationIntent: - return this.ApplicationIntent; - case Keywords.ApplicationName: - return ApplicationName; - case Keywords.AttachDBFilename: - return AttachDBFilename; - case Keywords.PoolBlockingPeriod: - return PoolBlockingPeriod; - case Keywords.CommandTimeout: - return CommandTimeout; - case Keywords.ConnectTimeout: - return ConnectTimeout; - case Keywords.CurrentLanguage: - return CurrentLanguage; - case Keywords.DataSource: - return DataSource; - case Keywords.Encrypt: - return Encrypt; - case Keywords.Enlist: - return Enlist; - case Keywords.FailoverPartner: - return FailoverPartner; - case Keywords.InitialCatalog: - return InitialCatalog; - case Keywords.IntegratedSecurity: - return IntegratedSecurity; - case Keywords.LoadBalanceTimeout: - return LoadBalanceTimeout; - case Keywords.MultipleActiveResultSets: - return MultipleActiveResultSets; - case Keywords.MaxPoolSize: - return MaxPoolSize; - case Keywords.MinPoolSize: - return MinPoolSize; - case Keywords.MultiSubnetFailover: - return MultiSubnetFailover; - // case Keywords.NamedConnection: return NamedConnection; - case Keywords.PacketSize: - return PacketSize; - case Keywords.Password: - return Password; - case Keywords.PersistSecurityInfo: - return PersistSecurityInfo; - case Keywords.Pooling: - return Pooling; - case Keywords.Replication: - return Replication; - case Keywords.TransactionBinding: - return TransactionBinding; - case Keywords.TrustServerCertificate: - return TrustServerCertificate; - case Keywords.TypeSystemVersion: - return TypeSystemVersion; - case Keywords.UserID: - return UserID; - case Keywords.UserInstance: - return UserInstance; - case Keywords.WorkstationID: - return WorkstationID; - case Keywords.ConnectRetryCount: - return ConnectRetryCount; - case Keywords.ConnectRetryInterval: - return ConnectRetryInterval; - case Keywords.Authentication: - return Authentication; - case Keywords.ColumnEncryptionSetting: - return ColumnEncryptionSetting; - case Keywords.EnclaveAttestationUrl: - return EnclaveAttestationUrl; - case Keywords.AttestationProtocol: - return AttestationProtocol; - case Keywords.IPAddressPreference: - return IPAddressPreference; - default: - Debug.Fail("unexpected keyword"); - throw UnsupportedKeyword(s_validKeywords[(int)index]); - } - } - - private Keywords GetIndex(string keyword) - { - ADP.CheckArgumentNull(keyword, nameof(keyword)); - Keywords index; - if (s_keywords.TryGetValue(keyword, out index)) - { - return index; - } - throw UnsupportedKeyword(keyword); - } - - /// - public override bool Remove(string keyword) - { - ADP.CheckArgumentNull(keyword, nameof(keyword)); - Keywords index; - if (s_keywords.TryGetValue(keyword, out index)) - { - if (base.Remove(s_validKeywords[(int)index])) - { - Reset(index); - return true; - } - } - return false; - } - - private void Reset(Keywords index) - { - switch (index) - { - case Keywords.ApplicationIntent: - _applicationIntent = DbConnectionStringDefaults.ApplicationIntent; - break; - case Keywords.ApplicationName: - _applicationName = DbConnectionStringDefaults.ApplicationName; - break; - case Keywords.AttachDBFilename: - _attachDBFilename = DbConnectionStringDefaults.AttachDBFilename; - break; - case Keywords.Authentication: - _authentication = DbConnectionStringDefaults.Authentication; - break; - case Keywords.PoolBlockingPeriod: - _poolBlockingPeriod = DbConnectionStringDefaults.PoolBlockingPeriod; - break; - case Keywords.CommandTimeout: - _commandTimeout = DbConnectionStringDefaults.CommandTimeout; - break; - case Keywords.ConnectTimeout: - _connectTimeout = DbConnectionStringDefaults.ConnectTimeout; - break; - case Keywords.CurrentLanguage: - _currentLanguage = DbConnectionStringDefaults.CurrentLanguage; - break; - case Keywords.DataSource: - _dataSource = DbConnectionStringDefaults.DataSource; - break; - case Keywords.Encrypt: - _encrypt = DbConnectionStringDefaults.Encrypt; - break; - case Keywords.Enlist: - _enlist = DbConnectionStringDefaults.Enlist; - break; - case Keywords.FailoverPartner: - _failoverPartner = DbConnectionStringDefaults.FailoverPartner; - break; - case Keywords.InitialCatalog: - _initialCatalog = DbConnectionStringDefaults.InitialCatalog; - break; - case Keywords.IntegratedSecurity: - _integratedSecurity = DbConnectionStringDefaults.IntegratedSecurity; - break; - case Keywords.LoadBalanceTimeout: - _loadBalanceTimeout = DbConnectionStringDefaults.LoadBalanceTimeout; - break; - case Keywords.MultipleActiveResultSets: - _multipleActiveResultSets = DbConnectionStringDefaults.MultipleActiveResultSets; - break; - case Keywords.MaxPoolSize: - _maxPoolSize = DbConnectionStringDefaults.MaxPoolSize; - break; - case Keywords.MinPoolSize: - _minPoolSize = DbConnectionStringDefaults.MinPoolSize; - break; - case Keywords.MultiSubnetFailover: - _multiSubnetFailover = DbConnectionStringDefaults.MultiSubnetFailover; - break; - // case Keywords.NamedConnection: - // _namedConnection = DbConnectionStringDefaults.NamedConnection; - // break; - case Keywords.PacketSize: - _packetSize = DbConnectionStringDefaults.PacketSize; - break; - case Keywords.Password: - _password = DbConnectionStringDefaults.Password; - break; - case Keywords.PersistSecurityInfo: - _persistSecurityInfo = DbConnectionStringDefaults.PersistSecurityInfo; - break; - case Keywords.Pooling: - _pooling = DbConnectionStringDefaults.Pooling; - break; - case Keywords.ConnectRetryCount: - _connectRetryCount = DbConnectionStringDefaults.ConnectRetryCount; - break; - case Keywords.ConnectRetryInterval: - _connectRetryInterval = DbConnectionStringDefaults.ConnectRetryInterval; - break; - case Keywords.Replication: - _replication = DbConnectionStringDefaults.Replication; - break; - case Keywords.TransactionBinding: - _transactionBinding = DbConnectionStringDefaults.TransactionBinding; - break; - case Keywords.TrustServerCertificate: - _trustServerCertificate = DbConnectionStringDefaults.TrustServerCertificate; - break; - case Keywords.TypeSystemVersion: - _typeSystemVersion = DbConnectionStringDefaults.TypeSystemVersion; - break; - case Keywords.UserID: - _userID = DbConnectionStringDefaults.UserID; - break; - case Keywords.UserInstance: - _userInstance = DbConnectionStringDefaults.UserInstance; - break; - case Keywords.WorkstationID: - _workstationID = DbConnectionStringDefaults.WorkstationID; - break; - case Keywords.ColumnEncryptionSetting: - _columnEncryptionSetting = DbConnectionStringDefaults.ColumnEncryptionSetting; - break; - case Keywords.EnclaveAttestationUrl: - _enclaveAttestationUrl = DbConnectionStringDefaults.EnclaveAttestationUrl; - break; - case Keywords.AttestationProtocol: - _attestationProtocol = DbConnectionStringDefaults.AttestationProtocol; - break; - case Keywords.IPAddressPreference: - _ipAddressPreference = DbConnectionStringDefaults.IPAddressPreference; - break; - default: - Debug.Fail("unexpected keyword"); - throw UnsupportedKeyword(s_validKeywords[(int)index]); - } - } - - private void SetValue(string keyword, bool value) - { - base[keyword] = value.ToString(); - } - private void SetValue(string keyword, int value) - { - base[keyword] = value.ToString((System.IFormatProvider)null); - } - private void SetValue(string keyword, string value) - { - ADP.CheckArgumentNull(value, keyword); - base[keyword] = value; - } - private void SetApplicationIntentValue(ApplicationIntent value) - { - Debug.Assert(DbConnectionStringBuilderUtil.IsValidApplicationIntentValue(value), "invalid value"); - base[DbConnectionStringKeywords.ApplicationIntent] = DbConnectionStringBuilderUtil.ApplicationIntentToString(value); - } - private void SetColumnEncryptionSettingValue(SqlConnectionColumnEncryptionSetting value) - { - Debug.Assert(DbConnectionStringBuilderUtil.IsValidColumnEncryptionSetting(value), "Invalid value for SqlConnectionColumnEncryptionSetting"); - base[DbConnectionStringKeywords.ColumnEncryptionSetting] = DbConnectionStringBuilderUtil.ColumnEncryptionSettingToString(value); - } - - private void SetAttestationProtocolValue(SqlConnectionAttestationProtocol value) - { - Debug.Assert(DbConnectionStringBuilderUtil.IsValidAttestationProtocol(value), "Invalid value for SqlConnectionAttestationProtocol"); - base[DbConnectionStringKeywords.AttestationProtocol] = DbConnectionStringBuilderUtil.AttestationProtocolToString(value); - } - - private void SetIPAddressPreferenceValue(SqlConnectionIPAddressPreference value) - { - Debug.Assert(DbConnectionStringBuilderUtil.IsValidIPAddressPreference(value), "Invalid value for SqlConnectionIPAddressPreference"); - base[DbConnectionStringKeywords.IPAddressPreference] = DbConnectionStringBuilderUtil.IPAddressPreferenceToString(value); - } - - private void SetAuthenticationValue(SqlAuthenticationMethod value) - { - Debug.Assert(DbConnectionStringBuilderUtil.IsValidAuthenticationTypeValue(value), "Invalid value for AuthenticationType"); - base[DbConnectionStringKeywords.Authentication] = DbConnectionStringBuilderUtil.AuthenticationTypeToString(value); - } - - private void SetPoolBlockingPeriodValue(PoolBlockingPeriod value) - { - Debug.Assert(DbConnectionStringBuilderUtil.IsValidPoolBlockingPeriodValue(value), "Invalid value for PoolBlockingPeriod"); - base[DbConnectionStringKeywords.PoolBlockingPeriod] = DbConnectionStringBuilderUtil.PoolBlockingPeriodToString(value); - } - - /// - public override bool ShouldSerialize(string keyword) - { - ADP.CheckArgumentNull(keyword, nameof(keyword)); - Keywords index; - return s_keywords.TryGetValue(keyword, out index) && base.ShouldSerialize(s_validKeywords[(int)index]); - } - - /// - public override bool TryGetValue(string keyword, out object value) - { - Keywords index; - if (s_keywords.TryGetValue(keyword, out index)) - { - value = GetAt(index); - return true; - } - value = null; - return false; - } - - private static readonly string[] s_notSupportedKeywords = new string[] { - DbConnectionStringKeywords.ConnectionReset, - DbConnectionStringKeywords.ContextConnection, - DbConnectionStringKeywords.TransactionBinding, - }; - - private static readonly string[] s_notSupportedNetworkLibraryKeywords = new string[] { - DbConnectionStringKeywords.NetworkLibrary, - - DbConnectionStringSynonyms.NET, - DbConnectionStringSynonyms.NETWORK - }; - - private Exception UnsupportedKeyword(string keyword) - { - if (s_notSupportedKeywords.Contains(keyword, StringComparer.OrdinalIgnoreCase)) - { - return SQL.UnsupportedKeyword(keyword); - } - else if (s_notSupportedNetworkLibraryKeywords.Contains(keyword, StringComparer.OrdinalIgnoreCase)) - { - return SQL.NetworkLibraryKeywordNotSupported(); - } - else - { - return ADP.KeywordNotSupported(keyword); - } - } - - private sealed class SqlInitialCatalogConverter : StringConverter - { - // converter classes should have public ctor - public SqlInitialCatalogConverter() - { - } - - public override bool GetStandardValuesSupported(ITypeDescriptorContext context) - { - return GetStandardValuesSupportedInternal(context); - } - - private bool GetStandardValuesSupportedInternal(ITypeDescriptorContext context) - { - // Only say standard values are supported if the connection string has enough - // information set to instantiate a connection and retrieve a list of databases - bool flag = false; - if (null != context) - { - SqlConnectionStringBuilder constr = (context.Instance as SqlConnectionStringBuilder); - if (null != constr) - { - if ((0 < constr.DataSource.Length) && (constr.IntegratedSecurity || (0 < constr.UserID.Length))) - { - flag = true; - } - } - } - return flag; - } - - public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) - { - // Although theoretically this could be true, some people may want to just type in a name - return false; - } - - public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) - { - // There can only be standard values if the connection string is in a state that might - // be able to instantiate a connection - if (GetStandardValuesSupportedInternal(context)) - { - - // Create an array list to store the database names - List values = new List(); - - try - { - SqlConnectionStringBuilder constr = (SqlConnectionStringBuilder)context.Instance; - - // Create a connection - using (SqlConnection connection = new SqlConnection()) - { - - // Create a basic connection string from current property values - connection.ConnectionString = constr.ConnectionString; - - // Try to open the connection - connection.Open(); - - DataTable databaseTable = connection.GetSchema("DATABASES"); - - foreach (DataRow row in databaseTable.Rows) - { - string dbName = (string)row["database_name"]; - values.Add(dbName); - } - } - } - catch (SqlException e) - { - ADP.TraceExceptionWithoutRethrow(e); - // silently fail - } - - // Return values as a StandardValuesCollection - return new StandardValuesCollection(values); - } - return null; - } - } - } -} diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj index 8f15f1b7a5..2ec1618c74 100644 --- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj +++ b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj @@ -450,6 +450,9 @@ Resources\ResDescriptionAttribute.cs + + Microsoft\Data\SqlClient\SqlConnectionStringBuilder.cs + Microsoft\Data\Common\AdapterUtil.cs @@ -488,7 +491,6 @@ - Microsoft\Data\SqlClient\SqlConnectionTimeoutErrorInternal.cs diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs similarity index 72% rename from src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs rename to src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs index 19bec77b80..7be2fd9a84 100644 --- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs @@ -11,19 +11,24 @@ using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Globalization; +using System.Linq; using System.Reflection; using Microsoft.Data.Common; namespace Microsoft.Data.SqlClient { - /// - [DefaultProperty("DataSource")] + /// + [DefaultProperty(DbConnectionStringKeywords.DataSource)] +#if NETFRAMEWORK [System.ComponentModel.TypeConverterAttribute(typeof(SqlConnectionStringBuilder.SqlConnectionStringBuilderConverter))] +#endif public sealed class SqlConnectionStringBuilder : DbConnectionStringBuilder { + /// + /// specific ordering for ConnectionString output construction + /// private enum Keywords - { // specific ordering for ConnectionString output construction - // NamedConnection, + { // NamedConnection, DataSource, FailoverPartner, AttachDBFilename, @@ -37,14 +42,18 @@ private enum Keywords MinPoolSize, MaxPoolSize, PoolBlockingPeriod, +#if NETFRAMEWORK ConnectionReset, +#endif MultipleActiveResultSets, Replication, ConnectTimeout, Encrypt, TrustServerCertificate, LoadBalanceTimeout, +#if NETFRAMEWORK NetworkLibrary, +#endif PacketSize, TypeSystemVersion, Authentication, @@ -52,11 +61,15 @@ private enum Keywords CurrentLanguage, WorkstationID, UserInstance, +#if NETFRAMEWORK ContextConnection, +#endif TransactionBinding, ApplicationIntent, MultiSubnetFailover, +#if NETFRAMEWORK TransparentNetworkIPResolution, +#endif ConnectRetryCount, ConnectRetryInterval, ColumnEncryptionSetting, @@ -65,8 +78,7 @@ private enum Keywords CommandTimeout, IPAddressPreference, - -#if ADONET_CERT_AUTH +#if NETFRAMEWORK && ADONET_CERT_AUTH Certificate, #endif // keep the count value last @@ -74,9 +86,10 @@ private enum Keywords } internal const int KeywordsCount = (int)Keywords.KeywordsCount; + internal const int DeprecatedKeywordsCount = 3; - private static readonly string[] _validKeywords; - private static readonly Dictionary _keywords; + private static readonly string[] s_validKeywords = CreateValidKeywords(); + private static readonly Dictionary s_keywords = CreateKeywordsDictionary(); private ApplicationIntent _applicationIntent = DbConnectionStringDefaults.ApplicationIntent; private string _applicationName = DbConnectionStringDefaults.ApplicationName; @@ -85,13 +98,12 @@ private enum Keywords private string _dataSource = DbConnectionStringDefaults.DataSource; private string _failoverPartner = DbConnectionStringDefaults.FailoverPartner; private string _initialCatalog = DbConnectionStringDefaults.InitialCatalog; - // private string _namedConnection = DbConnectionStringDefaults.NamedConnection; - private string _networkLibrary = DbConnectionStringDefaults.NetworkLibrary; private string _password = DbConnectionStringDefaults.Password; private string _transactionBinding = DbConnectionStringDefaults.TransactionBinding; private string _typeSystemVersion = DbConnectionStringDefaults.TypeSystemVersion; private string _userID = DbConnectionStringDefaults.UserID; private string _workstationID = DbConnectionStringDefaults.WorkstationID; + private int _commandTimeout = DbConnectionStringDefaults.CommandTimeout; private int _connectTimeout = DbConnectionStringDefaults.ConnectTimeout; private int _loadBalanceTimeout = DbConnectionStringDefaults.LoadBalanceTimeout; @@ -100,16 +112,15 @@ private enum Keywords private int _packetSize = DbConnectionStringDefaults.PacketSize; private int _connectRetryCount = DbConnectionStringDefaults.ConnectRetryCount; private int _connectRetryInterval = DbConnectionStringDefaults.ConnectRetryInterval; - private bool _connectionReset = DbConnectionStringDefaults.ConnectionReset; - private bool _contextConnection = DbConnectionStringDefaults.ContextConnection; private bool _encrypt = DbConnectionStringDefaults.Encrypt; private bool _trustServerCertificate = DbConnectionStringDefaults.TrustServerCertificate; private bool _enlist = DbConnectionStringDefaults.Enlist; private bool _integratedSecurity = DbConnectionStringDefaults.IntegratedSecurity; private bool _multipleActiveResultSets = DbConnectionStringDefaults.MultipleActiveResultSets; private bool _multiSubnetFailover = DbConnectionStringDefaults.MultiSubnetFailover; - private bool _transparentNetworkIPResolution = DbConnectionStringDefaults.TransparentNetworkIPResolution; + private bool _persistSecurityInfo = DbConnectionStringDefaults.PersistSecurityInfo; + private PoolBlockingPeriod _poolBlockingPeriod = DbConnectionStringDefaults.PoolBlockingPeriod; private bool _pooling = DbConnectionStringDefaults.Pooling; private bool _replication = DbConnectionStringDefaults.Replication; private bool _userInstance = DbConnectionStringDefaults.UserInstance; @@ -118,23 +129,25 @@ private enum Keywords private string _enclaveAttestationUrl = DbConnectionStringDefaults.EnclaveAttestationUrl; private SqlConnectionAttestationProtocol _attestationProtocol = DbConnectionStringDefaults.AttestationProtocol; private SqlConnectionIPAddressPreference _ipAddressPreference = DbConnectionStringDefaults.IPAddressPreference; - private PoolBlockingPeriod _poolBlockingPeriod = DbConnectionStringDefaults.PoolBlockingPeriod; +#if NETFRAMEWORK + private bool _connectionReset = DbConnectionStringDefaults.ConnectionReset; + private bool _contextConnection = DbConnectionStringDefaults.ContextConnection; + private bool _transparentNetworkIPResolution = DbConnectionStringDefaults.TransparentNetworkIPResolution; + private string _networkLibrary = DbConnectionStringDefaults.NetworkLibrary; #if ADONET_CERT_AUTH private string _certificate = DbConnectionStringDefaults.Certificate; #endif - - static SqlConnectionStringBuilder() +#endif + private static string[] CreateValidKeywords() { string[] validKeywords = new string[KeywordsCount]; validKeywords[(int)Keywords.ApplicationIntent] = DbConnectionStringKeywords.ApplicationIntent; validKeywords[(int)Keywords.ApplicationName] = DbConnectionStringKeywords.ApplicationName; validKeywords[(int)Keywords.AttachDBFilename] = DbConnectionStringKeywords.AttachDBFilename; validKeywords[(int)Keywords.PoolBlockingPeriod] = DbConnectionStringKeywords.PoolBlockingPeriod; - validKeywords[(int)Keywords.ConnectionReset] = DbConnectionStringKeywords.ConnectionReset; - validKeywords[(int)Keywords.ContextConnection] = DbConnectionStringKeywords.ContextConnection; - validKeywords[(int)Keywords.ConnectTimeout] = DbConnectionStringKeywords.ConnectTimeout; validKeywords[(int)Keywords.CommandTimeout] = DbConnectionStringKeywords.CommandTimeout; + validKeywords[(int)Keywords.ConnectTimeout] = DbConnectionStringKeywords.ConnectTimeout; validKeywords[(int)Keywords.CurrentLanguage] = DbConnectionStringKeywords.CurrentLanguage; validKeywords[(int)Keywords.DataSource] = DbConnectionStringKeywords.DataSource; validKeywords[(int)Keywords.Encrypt] = DbConnectionStringKeywords.Encrypt; @@ -147,9 +160,6 @@ static SqlConnectionStringBuilder() validKeywords[(int)Keywords.MinPoolSize] = DbConnectionStringKeywords.MinPoolSize; validKeywords[(int)Keywords.MultipleActiveResultSets] = DbConnectionStringKeywords.MultipleActiveResultSets; validKeywords[(int)Keywords.MultiSubnetFailover] = DbConnectionStringKeywords.MultiSubnetFailover; - validKeywords[(int)Keywords.TransparentNetworkIPResolution] = DbConnectionStringKeywords.TransparentNetworkIPResolution; - // validKeywords[(int)Keywords.NamedConnection] = DbConnectionStringKeywords.NamedConnection; - validKeywords[(int)Keywords.NetworkLibrary] = DbConnectionStringKeywords.NetworkLibrary; validKeywords[(int)Keywords.PacketSize] = DbConnectionStringKeywords.PacketSize; validKeywords[(int)Keywords.Password] = DbConnectionStringKeywords.Password; validKeywords[(int)Keywords.PersistSecurityInfo] = DbConnectionStringKeywords.PersistSecurityInfo; @@ -168,105 +178,118 @@ static SqlConnectionStringBuilder() validKeywords[(int)Keywords.EnclaveAttestationUrl] = DbConnectionStringKeywords.EnclaveAttestationUrl; validKeywords[(int)Keywords.AttestationProtocol] = DbConnectionStringKeywords.AttestationProtocol; validKeywords[(int)Keywords.IPAddressPreference] = DbConnectionStringKeywords.IPAddressPreference; + +#if NETFRAMEWORK + validKeywords[(int)Keywords.ConnectionReset] = DbConnectionStringKeywords.ConnectionReset; + validKeywords[(int)Keywords.ContextConnection] = DbConnectionStringKeywords.ContextConnection; + validKeywords[(int)Keywords.TransparentNetworkIPResolution] = DbConnectionStringKeywords.TransparentNetworkIPResolution; + validKeywords[(int)Keywords.NetworkLibrary] = DbConnectionStringKeywords.NetworkLibrary; #if ADONET_CERT_AUTH validKeywords[(int)Keywords.Certificate] = DbConnectionStringKeywords.Certificate; #endif - _validKeywords = validKeywords; - - Dictionary hash = new Dictionary(KeywordsCount + SqlConnectionString.SynonymCount, StringComparer.OrdinalIgnoreCase); - hash.Add(DbConnectionStringKeywords.ApplicationIntent, Keywords.ApplicationIntent); - hash.Add(DbConnectionStringKeywords.ApplicationName, Keywords.ApplicationName); - hash.Add(DbConnectionStringKeywords.AttachDBFilename, Keywords.AttachDBFilename); - hash.Add(DbConnectionStringKeywords.PoolBlockingPeriod, Keywords.PoolBlockingPeriod); - hash.Add(DbConnectionStringKeywords.ConnectTimeout, Keywords.ConnectTimeout); - hash.Add(DbConnectionStringKeywords.CommandTimeout, Keywords.CommandTimeout); - hash.Add(DbConnectionStringKeywords.ConnectionReset, Keywords.ConnectionReset); - hash.Add(DbConnectionStringKeywords.ContextConnection, Keywords.ContextConnection); - hash.Add(DbConnectionStringKeywords.CurrentLanguage, Keywords.CurrentLanguage); - hash.Add(DbConnectionStringKeywords.DataSource, Keywords.DataSource); - hash.Add(DbConnectionStringKeywords.Encrypt, Keywords.Encrypt); - hash.Add(DbConnectionStringKeywords.Enlist, Keywords.Enlist); - hash.Add(DbConnectionStringKeywords.FailoverPartner, Keywords.FailoverPartner); - hash.Add(DbConnectionStringKeywords.InitialCatalog, Keywords.InitialCatalog); - hash.Add(DbConnectionStringKeywords.IntegratedSecurity, Keywords.IntegratedSecurity); - hash.Add(DbConnectionStringKeywords.LoadBalanceTimeout, Keywords.LoadBalanceTimeout); - hash.Add(DbConnectionStringKeywords.MultipleActiveResultSets, Keywords.MultipleActiveResultSets); - hash.Add(DbConnectionStringKeywords.MaxPoolSize, Keywords.MaxPoolSize); - hash.Add(DbConnectionStringKeywords.MinPoolSize, Keywords.MinPoolSize); - hash.Add(DbConnectionStringKeywords.MultiSubnetFailover, Keywords.MultiSubnetFailover); - hash.Add(DbConnectionStringKeywords.TransparentNetworkIPResolution, Keywords.TransparentNetworkIPResolution); - // hash.Add(DbConnectionStringKeywords.NamedConnection, Keywords.NamedConnection); - hash.Add(DbConnectionStringKeywords.NetworkLibrary, Keywords.NetworkLibrary); - hash.Add(DbConnectionStringKeywords.PacketSize, Keywords.PacketSize); - hash.Add(DbConnectionStringKeywords.Password, Keywords.Password); - hash.Add(DbConnectionStringKeywords.PersistSecurityInfo, Keywords.PersistSecurityInfo); - hash.Add(DbConnectionStringKeywords.Pooling, Keywords.Pooling); - hash.Add(DbConnectionStringKeywords.Replication, Keywords.Replication); - hash.Add(DbConnectionStringKeywords.TransactionBinding, Keywords.TransactionBinding); - hash.Add(DbConnectionStringKeywords.TrustServerCertificate, Keywords.TrustServerCertificate); - hash.Add(DbConnectionStringKeywords.TypeSystemVersion, Keywords.TypeSystemVersion); - hash.Add(DbConnectionStringKeywords.UserID, Keywords.UserID); - hash.Add(DbConnectionStringKeywords.UserInstance, Keywords.UserInstance); - hash.Add(DbConnectionStringKeywords.WorkstationID, Keywords.WorkstationID); - hash.Add(DbConnectionStringKeywords.ConnectRetryCount, Keywords.ConnectRetryCount); - hash.Add(DbConnectionStringKeywords.ConnectRetryInterval, Keywords.ConnectRetryInterval); - hash.Add(DbConnectionStringKeywords.Authentication, Keywords.Authentication); - hash.Add(DbConnectionStringKeywords.ColumnEncryptionSetting, Keywords.ColumnEncryptionSetting); - hash.Add(DbConnectionStringKeywords.EnclaveAttestationUrl, Keywords.EnclaveAttestationUrl); - hash.Add(DbConnectionStringKeywords.AttestationProtocol, Keywords.AttestationProtocol); - hash.Add(DbConnectionStringKeywords.IPAddressPreference, Keywords.IPAddressPreference); +#endif + return validKeywords; + } + + private static Dictionary CreateKeywordsDictionary() + { + Dictionary hash = new(KeywordsCount + SqlConnectionString.SynonymCount, StringComparer.OrdinalIgnoreCase) + { + { DbConnectionStringKeywords.ApplicationIntent, Keywords.ApplicationIntent }, + { DbConnectionStringKeywords.ApplicationName, Keywords.ApplicationName }, + { DbConnectionStringKeywords.AttachDBFilename, Keywords.AttachDBFilename }, + { DbConnectionStringKeywords.PoolBlockingPeriod, Keywords.PoolBlockingPeriod }, + { DbConnectionStringKeywords.CommandTimeout, Keywords.CommandTimeout }, + { DbConnectionStringKeywords.ConnectTimeout, Keywords.ConnectTimeout }, + { DbConnectionStringKeywords.CurrentLanguage, Keywords.CurrentLanguage }, + { DbConnectionStringKeywords.DataSource, Keywords.DataSource }, + { DbConnectionStringKeywords.Encrypt, Keywords.Encrypt }, + { DbConnectionStringKeywords.Enlist, Keywords.Enlist }, + { DbConnectionStringKeywords.FailoverPartner, Keywords.FailoverPartner }, + { DbConnectionStringKeywords.InitialCatalog, Keywords.InitialCatalog }, + { DbConnectionStringKeywords.IntegratedSecurity, Keywords.IntegratedSecurity }, + { DbConnectionStringKeywords.LoadBalanceTimeout, Keywords.LoadBalanceTimeout }, + { DbConnectionStringKeywords.MultipleActiveResultSets, Keywords.MultipleActiveResultSets }, + { DbConnectionStringKeywords.MaxPoolSize, Keywords.MaxPoolSize }, + { DbConnectionStringKeywords.MinPoolSize, Keywords.MinPoolSize }, + { DbConnectionStringKeywords.MultiSubnetFailover, Keywords.MultiSubnetFailover }, + { DbConnectionStringKeywords.PacketSize, Keywords.PacketSize }, + { DbConnectionStringKeywords.Password, Keywords.Password }, + { DbConnectionStringKeywords.PersistSecurityInfo, Keywords.PersistSecurityInfo }, + { DbConnectionStringKeywords.Pooling, Keywords.Pooling }, + { DbConnectionStringKeywords.Replication, Keywords.Replication }, + { DbConnectionStringKeywords.TransactionBinding, Keywords.TransactionBinding }, + { DbConnectionStringKeywords.TrustServerCertificate, Keywords.TrustServerCertificate }, + { DbConnectionStringKeywords.TypeSystemVersion, Keywords.TypeSystemVersion }, + { DbConnectionStringKeywords.UserID, Keywords.UserID }, + { DbConnectionStringKeywords.UserInstance, Keywords.UserInstance }, + { DbConnectionStringKeywords.WorkstationID, Keywords.WorkstationID }, + { DbConnectionStringKeywords.ConnectRetryCount, Keywords.ConnectRetryCount }, + { DbConnectionStringKeywords.ConnectRetryInterval, Keywords.ConnectRetryInterval }, + { DbConnectionStringKeywords.Authentication, Keywords.Authentication }, + { DbConnectionStringKeywords.ColumnEncryptionSetting, Keywords.ColumnEncryptionSetting }, + { DbConnectionStringKeywords.EnclaveAttestationUrl, Keywords.EnclaveAttestationUrl }, + { DbConnectionStringKeywords.AttestationProtocol, Keywords.AttestationProtocol }, + { DbConnectionStringKeywords.IPAddressPreference, Keywords.IPAddressPreference }, + +#if NETFRAMEWORK + { DbConnectionStringKeywords.ConnectionReset, Keywords.ConnectionReset }, + { DbConnectionStringKeywords.ContextConnection, Keywords.ContextConnection }, + { DbConnectionStringKeywords.TransparentNetworkIPResolution, Keywords.TransparentNetworkIPResolution }, + { DbConnectionStringKeywords.NetworkLibrary, Keywords.NetworkLibrary }, #if ADONET_CERT_AUTH - hash.Add(DbConnectionStringKeywords.Certificate, Keywords.Certificate); + { DbConnectionStringKeywords.Certificate, Keywords.Certificate }, +#endif + { DbConnectionStringSynonyms.NET, Keywords.NetworkLibrary }, + { DbConnectionStringSynonyms.NETWORK, Keywords.NetworkLibrary }, + { DbConnectionStringSynonyms.TRANSPARENTNETWORKIPRESOLUTION, Keywords.TransparentNetworkIPResolution }, #endif - hash.Add(DbConnectionStringSynonyms.IPADDRESSPREFERENCE, Keywords.IPAddressPreference); - hash.Add(DbConnectionStringSynonyms.APP, Keywords.ApplicationName); - hash.Add(DbConnectionStringSynonyms.APPLICATIONINTENT, Keywords.ApplicationIntent); - hash.Add(DbConnectionStringSynonyms.EXTENDEDPROPERTIES, Keywords.AttachDBFilename); - hash.Add(DbConnectionStringSynonyms.INITIALFILENAME, Keywords.AttachDBFilename); - hash.Add(DbConnectionStringSynonyms.CONNECTIONTIMEOUT, Keywords.ConnectTimeout); - hash.Add(DbConnectionStringSynonyms.CONNECTRETRYCOUNT, Keywords.ConnectRetryCount); - hash.Add(DbConnectionStringSynonyms.CONNECTRETRYINTERVAL, Keywords.ConnectRetryInterval); - hash.Add(DbConnectionStringSynonyms.TIMEOUT, Keywords.ConnectTimeout); - hash.Add(DbConnectionStringSynonyms.LANGUAGE, Keywords.CurrentLanguage); - hash.Add(DbConnectionStringSynonyms.ADDR, Keywords.DataSource); - hash.Add(DbConnectionStringSynonyms.ADDRESS, Keywords.DataSource); - hash.Add(DbConnectionStringSynonyms.MULTIPLEACTIVERESULTSETS, Keywords.MultipleActiveResultSets); - hash.Add(DbConnectionStringSynonyms.MULTISUBNETFAILOVER, Keywords.MultiSubnetFailover); - hash.Add(DbConnectionStringSynonyms.NETWORKADDRESS, Keywords.DataSource); - hash.Add(DbConnectionStringSynonyms.POOLBLOCKINGPERIOD, Keywords.PoolBlockingPeriod); - hash.Add(DbConnectionStringSynonyms.SERVER, Keywords.DataSource); - hash.Add(DbConnectionStringSynonyms.DATABASE, Keywords.InitialCatalog); - hash.Add(DbConnectionStringSynonyms.TRUSTEDCONNECTION, Keywords.IntegratedSecurity); - hash.Add(DbConnectionStringSynonyms.ConnectionLifetime, Keywords.LoadBalanceTimeout); - hash.Add(DbConnectionStringSynonyms.NET, Keywords.NetworkLibrary); - hash.Add(DbConnectionStringSynonyms.NETWORK, Keywords.NetworkLibrary); - hash.Add(DbConnectionStringSynonyms.Pwd, Keywords.Password); - hash.Add(DbConnectionStringSynonyms.PERSISTSECURITYINFO, Keywords.PersistSecurityInfo); - hash.Add(DbConnectionStringSynonyms.TRANSPARENTNETWORKIPRESOLUTION, Keywords.TransparentNetworkIPResolution); - hash.Add(DbConnectionStringSynonyms.TRUSTSERVERCERTIFICATE, Keywords.TrustServerCertificate); - hash.Add(DbConnectionStringSynonyms.UID, Keywords.UserID); - hash.Add(DbConnectionStringSynonyms.User, Keywords.UserID); - hash.Add(DbConnectionStringSynonyms.WSID, Keywords.WorkstationID); + { DbConnectionStringSynonyms.IPADDRESSPREFERENCE, Keywords.IPAddressPreference }, + { DbConnectionStringSynonyms.APP, Keywords.ApplicationName }, + { DbConnectionStringSynonyms.APPLICATIONINTENT, Keywords.ApplicationIntent }, + { DbConnectionStringSynonyms.EXTENDEDPROPERTIES, Keywords.AttachDBFilename }, + { DbConnectionStringSynonyms.INITIALFILENAME, Keywords.AttachDBFilename }, + { DbConnectionStringSynonyms.CONNECTIONTIMEOUT, Keywords.ConnectTimeout }, + { DbConnectionStringSynonyms.CONNECTRETRYCOUNT, Keywords.ConnectRetryCount }, + { DbConnectionStringSynonyms.CONNECTRETRYINTERVAL, Keywords.ConnectRetryInterval }, + { DbConnectionStringSynonyms.TIMEOUT, Keywords.ConnectTimeout }, + { DbConnectionStringSynonyms.LANGUAGE, Keywords.CurrentLanguage }, + { DbConnectionStringSynonyms.ADDR, Keywords.DataSource }, + { DbConnectionStringSynonyms.ADDRESS, Keywords.DataSource }, + { DbConnectionStringSynonyms.MULTIPLEACTIVERESULTSETS, Keywords.MultipleActiveResultSets }, + { DbConnectionStringSynonyms.MULTISUBNETFAILOVER, Keywords.MultiSubnetFailover }, + { DbConnectionStringSynonyms.NETWORKADDRESS, Keywords.DataSource }, + { DbConnectionStringSynonyms.POOLBLOCKINGPERIOD, Keywords.PoolBlockingPeriod }, + { DbConnectionStringSynonyms.SERVER, Keywords.DataSource }, + { DbConnectionStringSynonyms.DATABASE, Keywords.InitialCatalog }, + { DbConnectionStringSynonyms.TRUSTEDCONNECTION, Keywords.IntegratedSecurity }, + { DbConnectionStringSynonyms.TRUSTSERVERCERTIFICATE, Keywords.TrustServerCertificate }, + { DbConnectionStringSynonyms.ConnectionLifetime, Keywords.LoadBalanceTimeout }, + { DbConnectionStringSynonyms.Pwd, Keywords.Password }, + { DbConnectionStringSynonyms.PERSISTSECURITYINFO, Keywords.PersistSecurityInfo }, + { DbConnectionStringSynonyms.UID, Keywords.UserID }, + { DbConnectionStringSynonyms.User, Keywords.UserID }, + { DbConnectionStringSynonyms.WSID, Keywords.WorkstationID } + }; Debug.Assert((KeywordsCount + SqlConnectionString.SynonymCount) == hash.Count, "initial expected size is incorrect"); - _keywords = hash; - + return hash; } - /// + /// public SqlConnectionStringBuilder() : this((string)null) { } - /// + /// public SqlConnectionStringBuilder(string connectionString) : base() { - if (!ADP.IsEmpty(connectionString)) + if (!string.IsNullOrEmpty(connectionString)) { ConnectionString = connectionString; } } - /// + /// public override object this[string keyword] { get @@ -282,7 +305,7 @@ public override object this[string keyword] switch (index) { case Keywords.ApplicationIntent: - this.ApplicationIntent = ConvertToApplicationIntent(keyword, value); + ApplicationIntent = ConvertToApplicationIntent(keyword, value); break; case Keywords.ApplicationName: ApplicationName = ConvertToString(value); @@ -302,10 +325,7 @@ public override object this[string keyword] case Keywords.InitialCatalog: InitialCatalog = ConvertToString(value); break; - // case Keywords.NamedConnection: NamedConnection = ConvertToString(value); break; - case Keywords.NetworkLibrary: - NetworkLibrary = ConvertToString(value); - break; + // case Keywords.NamedConnection: NamedConnection = ConvertToString(value); break; case Keywords.Password: Password = ConvertToString(value); break; @@ -344,7 +364,6 @@ public override object this[string keyword] case Keywords.IntegratedSecurity: IntegratedSecurity = ConvertToIntegratedSecurity(value); break; - case Keywords.Authentication: Authentication = ConvertToAuthenticationType(keyword, value); break; @@ -360,23 +379,9 @@ public override object this[string keyword] case Keywords.IPAddressPreference: IPAddressPreference = ConvertToIPAddressPreference(keyword, value); break; -#if ADONET_CERT_AUTH - case Keywords.Certificate: - Certificate = ConvertToString(value); - break; -#endif case Keywords.PoolBlockingPeriod: PoolBlockingPeriod = ConvertToPoolBlockingPeriod(keyword, value); break; -#pragma warning disable 618 // Obsolete ConnectionReset - case Keywords.ConnectionReset: - ConnectionReset = ConvertToBoolean(value); - break; - // Obsolete ContextConnection - case Keywords.ContextConnection: - ContextConnection = ConvertToBoolean(value); - break; -#pragma warning restore 618 case Keywords.Encrypt: Encrypt = ConvertToBoolean(value); break; @@ -392,9 +397,6 @@ public override object this[string keyword] case Keywords.MultiSubnetFailover: MultiSubnetFailover = ConvertToBoolean(value); break; - case Keywords.TransparentNetworkIPResolution: - TransparentNetworkIPResolution = ConvertToBoolean(value); - break; case Keywords.PersistSecurityInfo: PersistSecurityInfo = ConvertToBoolean(value); break; @@ -413,10 +415,30 @@ public override object this[string keyword] case Keywords.ConnectRetryInterval: ConnectRetryInterval = ConvertToInt32(value); break; - +#if NETFRAMEWORK +#pragma warning disable 618 // Obsolete properties + case Keywords.ConnectionReset: + ConnectionReset = ConvertToBoolean(value); + break; + case Keywords.ContextConnection: + ContextConnection = ConvertToBoolean(value); + break; +#pragma warning restore 618 + case Keywords.NetworkLibrary: + NetworkLibrary = ConvertToString(value); + break; + case Keywords.TransparentNetworkIPResolution: + TransparentNetworkIPResolution = ConvertToBoolean(value); + break; +#if ADONET_CERT_AUTH + case Keywords.Certificate: + Certificate = ConvertToString(value); + break; +#endif +#endif default: Debug.Fail("unexpected keyword"); - throw ADP.KeywordNotSupported(keyword); + throw UnsupportedKeyword(keyword); } } else @@ -426,8 +448,8 @@ public override object this[string keyword] } } - /// - [DisplayName(DbConnectionStringKeywords.ApplicationIntent)] + /// + [DisplayNameAttribute(DbConnectionStringKeywords.ApplicationIntent)] [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Initialization)] [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_ApplicationIntent)] [RefreshPropertiesAttribute(RefreshProperties.All)] @@ -446,8 +468,8 @@ public ApplicationIntent ApplicationIntent } } - /// - [DisplayName(DbConnectionStringKeywords.ApplicationName)] + /// + [DisplayNameAttribute(DbConnectionStringKeywords.ApplicationName)] [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Context)] [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_ApplicationName)] [RefreshPropertiesAttribute(RefreshProperties.All)] @@ -461,13 +483,12 @@ public string ApplicationName } } - /// - [DisplayName(DbConnectionStringKeywords.AttachDBFilename)] + /// + [DisplayNameAttribute(DbConnectionStringKeywords.AttachDBFilename)] [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Source)] [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_AttachDBFilename)] + [EditorAttribute("System.Windows.Forms.Design.FileNameEditor, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")] [RefreshPropertiesAttribute(RefreshProperties.All)] - // TODO: hand off to VS, they derive from FileNameEditor and set the OpenDialogFilter to *.MDF - [Editor("System.Windows.Forms.Design.FileNameEditor, " + AssemblyRef.SystemDesign, "System.Drawing.Design.UITypeEditor, " + AssemblyRef.SystemDrawing)] public string AttachDBFilename { get { return _attachDBFilename; } @@ -478,31 +499,11 @@ public string AttachDBFilename } } - /// - [DisplayName(DbConnectionStringKeywords.PoolBlockingPeriod)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Pooling)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_PoolBlockingPeriod)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public PoolBlockingPeriod PoolBlockingPeriod - { - get { return _poolBlockingPeriod; } - set - { - if (!DbConnectionStringBuilderUtil.IsValidPoolBlockingPeriodValue(value)) - { - throw ADP.InvalidEnumerationValue(typeof(PoolBlockingPeriod), (int)value); - } - - SetPoolBlockingPeriodValue(value); - _poolBlockingPeriod = value; - } - } - - /// - [DisplayName(DbConnectionStringKeywords.CommandTimeout)] + /// + [DisplayNameAttribute(DbConnectionStringKeywords.CommandTimeout)] [ResCategory(StringsHelper.ResourceNames.DataCategory_Initialization)] [ResDescription(StringsHelper.ResourceNames.DbCommand_CommandTimeout)] - [RefreshProperties(RefreshProperties.All)] + [RefreshPropertiesAttribute(RefreshProperties.All)] public int CommandTimeout { get { return _commandTimeout; } @@ -517,41 +518,8 @@ public int CommandTimeout } } - /// - [Browsable(false)] - [DisplayName(DbConnectionStringKeywords.ConnectionReset)] - [Obsolete("ConnectionReset has been deprecated. SqlConnection will ignore the 'connection reset' keyword and always reset the connection.")] // SQLPT 41700 - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Pooling)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_ConnectionReset)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public bool ConnectionReset - { - get { return _connectionReset; } - set - { - SetValue(DbConnectionStringKeywords.ConnectionReset, value); - _connectionReset = value; - } - } - - /// - [DisplayName(DbConnectionStringKeywords.ContextConnection)] - [Obsolete("ContextConnection has been deprecated. SqlConnection will ignore the 'Context Connection' keyword.")] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Source)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_ContextConnection)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public bool ContextConnection - { - get { return _contextConnection; } - set - { - SetValue(DbConnectionStringKeywords.ContextConnection, value); - _contextConnection = value; - } - } - - /// - [DisplayName(DbConnectionStringKeywords.ConnectTimeout)] + /// + [DisplayNameAttribute(DbConnectionStringKeywords.ConnectTimeout)] [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Initialization)] [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_ConnectTimeout)] [RefreshPropertiesAttribute(RefreshProperties.All)] @@ -569,8 +537,8 @@ public int ConnectTimeout } } - /// - [DisplayName(DbConnectionStringKeywords.CurrentLanguage)] + /// + [DisplayNameAttribute(DbConnectionStringKeywords.CurrentLanguage)] [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Initialization)] [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_CurrentLanguage)] [RefreshPropertiesAttribute(RefreshProperties.All)] @@ -584,12 +552,14 @@ public string CurrentLanguage } } - /// - [DisplayName(DbConnectionStringKeywords.DataSource)] + /// + [DisplayNameAttribute(DbConnectionStringKeywords.DataSource)] [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Source)] [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_DataSource)] - [RefreshProperties(RefreshProperties.All)] + [RefreshPropertiesAttribute(RefreshProperties.All)] +#if NETFRAMEWORK [TypeConverter(typeof(SqlDataSourceConverter))] +#endif public string DataSource { get { return _dataSource; } @@ -600,8 +570,8 @@ public string DataSource } } - /// - [DisplayName(DbConnectionStringKeywords.Encrypt)] + /// + [DisplayNameAttribute(DbConnectionStringKeywords.Encrypt)] [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_Encrypt)] [RefreshPropertiesAttribute(RefreshProperties.All)] @@ -615,8 +585,8 @@ public bool Encrypt } } - /// - [DisplayName(DbConnectionStringKeywords.ColumnEncryptionSetting)] + /// + [DisplayNameAttribute(DbConnectionStringKeywords.ColumnEncryptionSetting)] [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] [ResDescriptionAttribute(StringsHelper.ResourceNames.TCE_DbConnectionString_ColumnEncryptionSetting)] [RefreshPropertiesAttribute(RefreshProperties.All)] @@ -635,8 +605,8 @@ public SqlConnectionColumnEncryptionSetting ColumnEncryptionSetting } } - /// - [DisplayName(DbConnectionStringKeywords.EnclaveAttestationUrl)] + /// + [DisplayNameAttribute(DbConnectionStringKeywords.EnclaveAttestationUrl)] [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] [ResDescriptionAttribute(StringsHelper.ResourceNames.TCE_DbConnectionString_EnclaveAttestationUrl)] [RefreshPropertiesAttribute(RefreshProperties.All)] @@ -650,8 +620,8 @@ public string EnclaveAttestationUrl } } - /// - [DisplayName(DbConnectionStringKeywords.AttestationProtocol)] + /// + [DisplayNameAttribute(DbConnectionStringKeywords.AttestationProtocol)] [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] [ResDescriptionAttribute(StringsHelper.ResourceNames.TCE_DbConnectionString_AttestationProtocol)] [RefreshPropertiesAttribute(RefreshProperties.All)] @@ -670,8 +640,8 @@ public SqlConnectionAttestationProtocol AttestationProtocol } } - /// - [DisplayName(DbConnectionStringKeywords.IPAddressPreference)] + /// + [DisplayNameAttribute(DbConnectionStringKeywords.IPAddressPreference)] [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] [ResDescriptionAttribute(StringsHelper.ResourceNames.TCE_DbConnectionString_IPAddressPreference)] [RefreshPropertiesAttribute(RefreshProperties.All)] @@ -690,8 +660,8 @@ public SqlConnectionIPAddressPreference IPAddressPreference } } - /// - [DisplayName(DbConnectionStringKeywords.TrustServerCertificate)] + /// + [DisplayNameAttribute(DbConnectionStringKeywords.TrustServerCertificate)] [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_TrustServerCertificate)] [RefreshPropertiesAttribute(RefreshProperties.All)] @@ -705,8 +675,8 @@ public bool TrustServerCertificate } } - /// - [DisplayName(DbConnectionStringKeywords.Enlist)] + /// + [DisplayNameAttribute(DbConnectionStringKeywords.Enlist)] [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Pooling)] [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_Enlist)] [RefreshPropertiesAttribute(RefreshProperties.All)] @@ -720,12 +690,14 @@ public bool Enlist } } - /// - [DisplayName(DbConnectionStringKeywords.FailoverPartner)] + /// + [DisplayNameAttribute(DbConnectionStringKeywords.FailoverPartner)] [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Source)] [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_FailoverPartner)] [RefreshPropertiesAttribute(RefreshProperties.All)] +#if NETFRAMEWORK [TypeConverter(typeof(SqlDataSourceConverter))] +#endif public string FailoverPartner { get { return _failoverPartner; } @@ -736,8 +708,8 @@ public string FailoverPartner } } - /// - [DisplayName(DbConnectionStringKeywords.InitialCatalog)] + /// + [DisplayNameAttribute(DbConnectionStringKeywords.InitialCatalog)] [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Source)] [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_InitialCatalog)] [RefreshPropertiesAttribute(RefreshProperties.All)] @@ -752,8 +724,8 @@ public string InitialCatalog } } - /// - [DisplayName(DbConnectionStringKeywords.IntegratedSecurity)] + /// + [DisplayNameAttribute(DbConnectionStringKeywords.IntegratedSecurity)] [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_IntegratedSecurity)] [RefreshPropertiesAttribute(RefreshProperties.All)] @@ -767,8 +739,8 @@ public bool IntegratedSecurity } } - /// - [DisplayName(DbConnectionStringKeywords.Authentication)] + /// + [DisplayNameAttribute(DbConnectionStringKeywords.Authentication)] [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_Authentication)] [RefreshPropertiesAttribute(RefreshProperties.All)] @@ -787,31 +759,8 @@ public SqlAuthenticationMethod Authentication } } -#if ADONET_CERT_AUTH - [DisplayName(DbConnectionStringKeywords.Certificate)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_Certificate)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public string Certificate { - get { return _certificate; } - set { - if (!DbConnectionStringBuilderUtil.IsValidCertificateValue(value)) { - throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.Certificate); - } - - SetValue(DbConnectionStringKeywords.Certificate, value); - _certificate = value; - } - } -#else - internal string Certificate - { - get { return null; } - } - -#endif - /// - [DisplayName(DbConnectionStringKeywords.LoadBalanceTimeout)] + /// + [DisplayNameAttribute(DbConnectionStringKeywords.LoadBalanceTimeout)] [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Pooling)] [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_LoadBalanceTimeout)] [RefreshPropertiesAttribute(RefreshProperties.All)] @@ -829,8 +778,8 @@ public int LoadBalanceTimeout } } - /// - [DisplayName(DbConnectionStringKeywords.MaxPoolSize)] + /// + [DisplayNameAttribute(DbConnectionStringKeywords.MaxPoolSize)] [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Pooling)] [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_MaxPoolSize)] [RefreshPropertiesAttribute(RefreshProperties.All)] @@ -848,8 +797,8 @@ public int MaxPoolSize } } - /// - [DisplayName(DbConnectionStringKeywords.ConnectRetryCount)] + /// + [DisplayNameAttribute(DbConnectionStringKeywords.ConnectRetryCount)] [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_ConnectionResilency)] [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_ConnectRetryCount)] [RefreshPropertiesAttribute(RefreshProperties.All)] @@ -867,8 +816,8 @@ public int ConnectRetryCount } } - /// - [DisplayName(DbConnectionStringKeywords.ConnectRetryInterval)] + /// + [DisplayNameAttribute(DbConnectionStringKeywords.ConnectRetryInterval)] [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_ConnectionResilency)] [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_ConnectRetryInterval)] [RefreshPropertiesAttribute(RefreshProperties.All)] @@ -887,8 +836,8 @@ public int ConnectRetryInterval } - /// - [DisplayName(DbConnectionStringKeywords.MinPoolSize)] + /// + [DisplayNameAttribute(DbConnectionStringKeywords.MinPoolSize)] [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Pooling)] [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_MinPoolSize)] [RefreshPropertiesAttribute(RefreshProperties.All)] @@ -906,8 +855,8 @@ public int MinPoolSize } } - /// - [DisplayName(DbConnectionStringKeywords.MultipleActiveResultSets)] + /// + [DisplayNameAttribute(DbConnectionStringKeywords.MultipleActiveResultSets)] [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Advanced)] [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_MultipleActiveResultSets)] [RefreshPropertiesAttribute(RefreshProperties.All)] @@ -921,9 +870,9 @@ public bool MultipleActiveResultSets } } - /// + /// [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", Justification = "Reviewed and Approved by UE")] - [DisplayName(DbConnectionStringKeywords.MultiSubnetFailover)] + [DisplayNameAttribute(DbConnectionStringKeywords.MultiSubnetFailover)] [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Source)] [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_MultiSubnetFailover)] [RefreshPropertiesAttribute(RefreshProperties.All)] @@ -937,84 +886,8 @@ public bool MultiSubnetFailover } } - /// - [DisplayName(DbConnectionStringKeywords.TransparentNetworkIPResolution)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Source)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_TransparentNetworkIPResolution)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public bool TransparentNetworkIPResolution - { - get { return _transparentNetworkIPResolution; } - set - { - SetValue(DbConnectionStringKeywords.TransparentNetworkIPResolution, value); - _transparentNetworkIPResolution = value; - } - } - /* - [DisplayName(DbConnectionStringKeywords.NamedConnection)] - [ResCategoryAttribute(ResHelper.ResourceNames.DataCategory_NamedConnectionString)] - [ResDescriptionAttribute(ResHelper.ResourceNames.DbConnectionString_NamedConnection)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - [TypeConverter(typeof(NamedConnectionStringConverter))] - public string NamedConnection { - get { return _namedConnection; } - set { - SetValue(DbConnectionStringKeywords.NamedConnection, value); - _namedConnection = value; - } - } - */ - /// - [DisplayName(DbConnectionStringKeywords.NetworkLibrary)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Advanced)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_NetworkLibrary)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - [TypeConverter(typeof(NetworkLibraryConverter))] - public string NetworkLibrary - { - get { return _networkLibrary; } - set - { - if (null != value) - { - switch (value.Trim().ToLower(CultureInfo.InvariantCulture)) - { - case SqlConnectionString.NETLIB.AppleTalk: - value = SqlConnectionString.NETLIB.AppleTalk; - break; - case SqlConnectionString.NETLIB.BanyanVines: - value = SqlConnectionString.NETLIB.BanyanVines; - break; - case SqlConnectionString.NETLIB.IPXSPX: - value = SqlConnectionString.NETLIB.IPXSPX; - break; - case SqlConnectionString.NETLIB.Multiprotocol: - value = SqlConnectionString.NETLIB.Multiprotocol; - break; - case SqlConnectionString.NETLIB.NamedPipes: - value = SqlConnectionString.NETLIB.NamedPipes; - break; - case SqlConnectionString.NETLIB.SharedMemory: - value = SqlConnectionString.NETLIB.SharedMemory; - break; - case SqlConnectionString.NETLIB.TCPIP: - value = SqlConnectionString.NETLIB.TCPIP; - break; - case SqlConnectionString.NETLIB.VIA: - value = SqlConnectionString.NETLIB.VIA; - break; - default: - throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.NetworkLibrary); - } - } - SetValue(DbConnectionStringKeywords.NetworkLibrary, value); - _networkLibrary = value; - } - } - - /// - [DisplayName(DbConnectionStringKeywords.PacketSize)] + /// + [DisplayNameAttribute(DbConnectionStringKeywords.PacketSize)] [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Advanced)] [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_PacketSize)] [RefreshPropertiesAttribute(RefreshProperties.All)] @@ -1032,11 +905,11 @@ public int PacketSize } } - /// - [DisplayName(DbConnectionStringKeywords.Password)] - [PasswordPropertyTextAttribute(true)] + /// + [DisplayNameAttribute(DbConnectionStringKeywords.Password)] [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_Password)] + [PasswordPropertyTextAttribute(true)] [RefreshPropertiesAttribute(RefreshProperties.All)] public string Password { @@ -1048,8 +921,8 @@ public string Password } } - /// - [DisplayName(DbConnectionStringKeywords.PersistSecurityInfo)] + /// + [DisplayNameAttribute(DbConnectionStringKeywords.PersistSecurityInfo)] [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_PersistSecurityInfo)] [RefreshPropertiesAttribute(RefreshProperties.All)] @@ -1063,8 +936,28 @@ public bool PersistSecurityInfo } } - /// - [DisplayName(DbConnectionStringKeywords.Pooling)] + /// + [DisplayName(DbConnectionStringKeywords.PoolBlockingPeriod)] + [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Pooling)] + [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_PoolBlockingPeriod)] + [RefreshPropertiesAttribute(RefreshProperties.All)] + public PoolBlockingPeriod PoolBlockingPeriod + { + get { return _poolBlockingPeriod; } + set + { + if (!DbConnectionStringBuilderUtil.IsValidPoolBlockingPeriodValue(value)) + { + throw ADP.InvalidEnumerationValue(typeof(PoolBlockingPeriod), (int)value); + } + + SetPoolBlockingPeriodValue(value); + _poolBlockingPeriod = value; + } + } + + /// + [DisplayNameAttribute(DbConnectionStringKeywords.Pooling)] [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Pooling)] [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_Pooling)] [RefreshPropertiesAttribute(RefreshProperties.All)] @@ -1078,8 +971,8 @@ public bool Pooling } } - /// - [DisplayName(DbConnectionStringKeywords.Replication)] + /// + [DisplayNameAttribute(DbConnectionStringKeywords.Replication)] [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Replication)] [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_Replication)] [RefreshPropertiesAttribute(RefreshProperties.All)] @@ -1093,8 +986,8 @@ public bool Replication } } - /// - [DisplayName(DbConnectionStringKeywords.TransactionBinding)] + /// + [DisplayNameAttribute(DbConnectionStringKeywords.TransactionBinding)] [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Advanced)] [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_TransactionBinding)] [RefreshPropertiesAttribute(RefreshProperties.All)] @@ -1108,8 +1001,8 @@ public string TransactionBinding } } - /// - [DisplayName(DbConnectionStringKeywords.TypeSystemVersion)] + /// + [DisplayNameAttribute(DbConnectionStringKeywords.TypeSystemVersion)] [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Advanced)] [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_TypeSystemVersion)] [RefreshPropertiesAttribute(RefreshProperties.All)] @@ -1123,8 +1016,8 @@ public string TypeSystemVersion } } - /// - [DisplayName(DbConnectionStringKeywords.UserID)] + /// + [DisplayNameAttribute(DbConnectionStringKeywords.UserID)] [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_UserID)] [RefreshPropertiesAttribute(RefreshProperties.All)] @@ -1138,8 +1031,8 @@ public string UserID } } - /// - [DisplayName(DbConnectionStringKeywords.UserInstance)] + /// + [DisplayNameAttribute(DbConnectionStringKeywords.UserInstance)] [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Source)] [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_UserInstance)] [RefreshPropertiesAttribute(RefreshProperties.All)] @@ -1153,8 +1046,8 @@ public bool UserInstance } } - /// - [DisplayName(DbConnectionStringKeywords.WorkstationID)] + /// + [DisplayNameAttribute(DbConnectionStringKeywords.WorkstationID)] [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Context)] [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_WorkstationID)] [RefreshPropertiesAttribute(RefreshProperties.All)] @@ -1168,55 +1061,43 @@ public string WorkstationID } } - /// - public override bool IsFixedSize - { - get - { - return true; - } - } + /// + public override bool IsFixedSize => true; - /// - public override ICollection Keys - { - get - { - return new Microsoft.Data.Common.ReadOnlyCollection(_validKeywords); - } - } + /// + public override ICollection Keys => new System.Collections.ObjectModel.ReadOnlyCollection(s_validKeywords); - /// + /// public override ICollection Values { get { // written this way so if the ordering of Keywords & _validKeywords changes // this is one less place to maintain - object[] values = new object[_validKeywords.Length]; + object[] values = new object[s_validKeywords.Length]; for (int i = 0; i < values.Length; ++i) { values[i] = GetAt((Keywords)i); } - return new Microsoft.Data.Common.ReadOnlyCollection(values); + return new System.Collections.ObjectModel.ReadOnlyCollection(values); } } - /// + /// public override void Clear() { base.Clear(); - for (int i = 0; i < _validKeywords.Length; ++i) + for (int i = 0; i < s_validKeywords.Length; ++i) { Reset((Keywords)i); } } - /// + /// public override bool ContainsKey(string keyword) { - ADP.CheckArgumentNull(keyword, "keyword"); - return _keywords.ContainsKey(keyword); + ADP.CheckArgumentNull(keyword, nameof(keyword)); + return s_keywords.ContainsKey(keyword); } private static bool ConvertToBoolean(object value) @@ -1231,6 +1112,10 @@ private static bool ConvertToIntegratedSecurity(object value) { return DbConnectionStringBuilderUtil.ConvertToIntegratedSecurity(value); } + private static SqlAuthenticationMethod ConvertToAuthenticationType(string keyword, object value) + { + return DbConnectionStringBuilderUtil.ConvertToAuthenticationType(keyword, value); + } private static string ConvertToString(object value) { return DbConnectionStringBuilderUtil.ConvertToString(value); @@ -1239,14 +1124,6 @@ private static ApplicationIntent ConvertToApplicationIntent(string keyword, obje { return DbConnectionStringBuilderUtil.ConvertToApplicationIntent(keyword, value); } - private static SqlAuthenticationMethod ConvertToAuthenticationType(string keyword, object value) - { - return DbConnectionStringBuilderUtil.ConvertToAuthenticationType(keyword, value); - } - private static PoolBlockingPeriod ConvertToPoolBlockingPeriod(string keyword, object value) - { - return DbConnectionStringBuilderUtil.ConvertToPoolBlockingPeriod(keyword, value); - } /// /// Convert to SqlConnectionColumnEncryptionSetting. @@ -1263,7 +1140,6 @@ private static SqlConnectionColumnEncryptionSetting ConvertToColumnEncryptionSet /// /// /// - /// private static SqlConnectionAttestationProtocol ConvertToAttestationProtocol(string keyword, object value) { return DbConnectionStringBuilderUtil.ConvertToAttestationProtocol(keyword, value); @@ -1277,29 +1153,25 @@ private static SqlConnectionAttestationProtocol ConvertToAttestationProtocol(str private static SqlConnectionIPAddressPreference ConvertToIPAddressPreference(string keyword, object value) => DbConnectionStringBuilderUtil.ConvertToIPAddressPreference(keyword, value); + private static PoolBlockingPeriod ConvertToPoolBlockingPeriod(string keyword, object value) + => DbConnectionStringBuilderUtil.ConvertToPoolBlockingPeriod(keyword, value); + private object GetAt(Keywords index) { switch (index) { case Keywords.ApplicationIntent: - return this.ApplicationIntent; + return ApplicationIntent; case Keywords.ApplicationName: return ApplicationName; case Keywords.AttachDBFilename: return AttachDBFilename; case Keywords.PoolBlockingPeriod: return PoolBlockingPeriod; - case Keywords.ConnectTimeout: - return ConnectTimeout; case Keywords.CommandTimeout: return CommandTimeout; -#pragma warning disable 618 // Obsolete ConnectionReset - case Keywords.ConnectionReset: - return ConnectionReset; - // Obsolete ConnectionReset - case Keywords.ContextConnection: - return ContextConnection; -#pragma warning restore 618 + case Keywords.ConnectTimeout: + return ConnectTimeout; case Keywords.CurrentLanguage: return CurrentLanguage; case Keywords.DataSource: @@ -1324,11 +1196,7 @@ private object GetAt(Keywords index) return MinPoolSize; case Keywords.MultiSubnetFailover: return MultiSubnetFailover; - case Keywords.TransparentNetworkIPResolution: - return TransparentNetworkIPResolution; - // case Keywords.NamedConnection: return NamedConnection; - case Keywords.NetworkLibrary: - return NetworkLibrary; + // case Keywords.NamedConnection: return NamedConnection; case Keywords.PacketSize: return PacketSize; case Keywords.Password: @@ -1365,61 +1233,48 @@ private object GetAt(Keywords index) return AttestationProtocol; case Keywords.IPAddressPreference: return IPAddressPreference; + +#if NETFRAMEWORK +#pragma warning disable 618 // Obsolete properties + case Keywords.ConnectionReset: + return ConnectionReset; + case Keywords.ContextConnection: + return ContextConnection; +#pragma warning restore 618 + case Keywords.TransparentNetworkIPResolution: + return TransparentNetworkIPResolution; + case Keywords.NetworkLibrary: + return NetworkLibrary; #if ADONET_CERT_AUTH - case Keywords.Certificate: return Certificate; + case Keywords.Certificate: return Certificate; +#endif #endif default: Debug.Fail("unexpected keyword"); - throw ADP.KeywordNotSupported(_validKeywords[(int)index]); + throw UnsupportedKeyword(s_validKeywords[(int)index]); } } private Keywords GetIndex(string keyword) { - ADP.CheckArgumentNull(keyword, "keyword"); + ADP.CheckArgumentNull(keyword, nameof(keyword)); Keywords index; - if (_keywords.TryGetValue(keyword, out index)) + if (s_keywords.TryGetValue(keyword, out index)) { return index; } - throw ADP.KeywordNotSupported(keyword); + + throw UnsupportedKeyword(keyword); } - /* - protected override void GetProperties(Hashtable propertyDescriptors) { - foreach(PropertyDescriptor reflected in TypeDescriptor.GetProperties(this, true)) { - bool refreshOnChange = false; - bool isReadonly = false; - string displayName = reflected.DisplayName; - // 'Password' & 'User ID' will be readonly if 'Integrated Security' is true - if (DbConnectionStringKeywords.IntegratedSecurity == displayName) { - refreshOnChange = true; - isReadonly = reflected.IsReadOnly; - } - else if ((DbConnectionStringKeywords.Password == displayName) || - (DbConnectionStringKeywords.UserID == displayName)) { - isReadonly = IntegratedSecurity; - } - else { - continue; - } - Attribute[] attributes = GetAttributesFromCollection(reflected.Attributes); - DbConnectionStringBuilderDescriptor descriptor = new DbConnectionStringBuilderDescriptor(reflected.Name, - reflected.ComponentType, reflected.PropertyType, isReadonly, attributes); - descriptor.RefreshOnChange = refreshOnChange; - propertyDescriptors[displayName] = descriptor; - } - base.GetProperties(propertyDescriptors); - } - */ - /// + /// public override bool Remove(string keyword) { - ADP.CheckArgumentNull(keyword, "keyword"); + ADP.CheckArgumentNull(keyword, nameof(keyword)); Keywords index; - if (_keywords.TryGetValue(keyword, out index)) + if (s_keywords.TryGetValue(keyword, out index)) { - if (base.Remove(_validKeywords[(int)index])) + if (base.Remove(s_validKeywords[(int)index])) { Reset(index); return true; @@ -1447,22 +1302,11 @@ private void Reset(Keywords index) case Keywords.PoolBlockingPeriod: _poolBlockingPeriod = DbConnectionStringDefaults.PoolBlockingPeriod; break; -#if ADONET_CERT_AUTH - case Keywords.Certificate: - _certificate = DbConnectionStringDefaults.Certificate; - break; -#endif - case Keywords.ConnectTimeout: - _connectTimeout = DbConnectionStringDefaults.ConnectTimeout; - break; case Keywords.CommandTimeout: _commandTimeout = DbConnectionStringDefaults.CommandTimeout; break; - case Keywords.ConnectionReset: - _connectionReset = DbConnectionStringDefaults.ConnectionReset; - break; - case Keywords.ContextConnection: - _contextConnection = DbConnectionStringDefaults.ContextConnection; + case Keywords.ConnectTimeout: + _connectTimeout = DbConnectionStringDefaults.ConnectTimeout; break; case Keywords.CurrentLanguage: _currentLanguage = DbConnectionStringDefaults.CurrentLanguage; @@ -1500,15 +1344,6 @@ private void Reset(Keywords index) case Keywords.MultiSubnetFailover: _multiSubnetFailover = DbConnectionStringDefaults.MultiSubnetFailover; break; - case Keywords.TransparentNetworkIPResolution: - _transparentNetworkIPResolution = DbConnectionStringDefaults.TransparentNetworkIPResolution; - break; - // case Keywords.NamedConnection: - // _namedConnection = DbConnectionStringDefaults.NamedConnection; - // break; - case Keywords.NetworkLibrary: - _networkLibrary = DbConnectionStringDefaults.NetworkLibrary; - break; case Keywords.PacketSize: _packetSize = DbConnectionStringDefaults.PacketSize; break; @@ -1560,15 +1395,34 @@ private void Reset(Keywords index) case Keywords.IPAddressPreference: _ipAddressPreference = DbConnectionStringDefaults.IPAddressPreference; break; +#if NETFRAMEWORK + case Keywords.ConnectionReset: + _connectionReset = DbConnectionStringDefaults.ConnectionReset; + break; + case Keywords.ContextConnection: + _contextConnection = DbConnectionStringDefaults.ContextConnection; + break; + case Keywords.TransparentNetworkIPResolution: + _transparentNetworkIPResolution = DbConnectionStringDefaults.TransparentNetworkIPResolution; + break; + case Keywords.NetworkLibrary: + _networkLibrary = DbConnectionStringDefaults.NetworkLibrary; + break; +#if ADONET_CERT_AUTH + case Keywords.Certificate: + _certificate = DbConnectionStringDefaults.Certificate; + break; +#endif +#endif default: Debug.Fail("unexpected keyword"); - throw ADP.KeywordNotSupported(_validKeywords[(int)index]); + throw UnsupportedKeyword(s_validKeywords[(int)index]); } } private void SetValue(string keyword, bool value) { - base[keyword] = value.ToString((System.IFormatProvider)null); + base[keyword] = value.ToString(); } private void SetValue(string keyword, int value) { @@ -1581,19 +1435,9 @@ private void SetValue(string keyword, string value) } private void SetApplicationIntentValue(ApplicationIntent value) { - Debug.Assert(DbConnectionStringBuilderUtil.IsValidApplicationIntentValue(value), "Invalid value for ApplicationIntent"); + Debug.Assert(DbConnectionStringBuilderUtil.IsValidApplicationIntentValue(value), "invalid value for ApplicationIntent"); base[DbConnectionStringKeywords.ApplicationIntent] = DbConnectionStringBuilderUtil.ApplicationIntentToString(value); } - private void SetPoolBlockingPeriodValue(PoolBlockingPeriod value) - { - Debug.Assert(DbConnectionStringBuilderUtil.IsValidPoolBlockingPeriodValue(value), "Invalid value for PoolBlockingPeriod"); - base[DbConnectionStringKeywords.PoolBlockingPeriod] = DbConnectionStringBuilderUtil.PoolBlockingPeriodToString(value); - } - private void SetAuthenticationValue(SqlAuthenticationMethod value) - { - Debug.Assert(DbConnectionStringBuilderUtil.IsValidAuthenticationTypeValue(value), "Invalid value for AuthenticationType"); - base[DbConnectionStringKeywords.Authentication] = DbConnectionStringBuilderUtil.AuthenticationTypeToString(value); - } private void SetColumnEncryptionSettingValue(SqlConnectionColumnEncryptionSetting value) { Debug.Assert(DbConnectionStringBuilderUtil.IsValidColumnEncryptionSetting(value), "Invalid value for SqlConnectionColumnEncryptionSetting"); @@ -1612,20 +1456,31 @@ private void SetIPAddressPreferenceValue(SqlConnectionIPAddressPreference value) base[DbConnectionStringKeywords.IPAddressPreference] = DbConnectionStringBuilderUtil.IPAddressPreferenceToString(value); } + private void SetAuthenticationValue(SqlAuthenticationMethod value) + { + Debug.Assert(DbConnectionStringBuilderUtil.IsValidAuthenticationTypeValue(value), "Invalid value for AuthenticationType"); + base[DbConnectionStringKeywords.Authentication] = DbConnectionStringBuilderUtil.AuthenticationTypeToString(value); + } + + private void SetPoolBlockingPeriodValue(PoolBlockingPeriod value) + { + Debug.Assert(DbConnectionStringBuilderUtil.IsValidPoolBlockingPeriodValue(value), "Invalid value for PoolBlockingPeriod"); + base[DbConnectionStringKeywords.PoolBlockingPeriod] = DbConnectionStringBuilderUtil.PoolBlockingPeriodToString(value); + } - /// + /// public override bool ShouldSerialize(string keyword) { - ADP.CheckArgumentNull(keyword, "keyword"); + ADP.CheckArgumentNull(keyword, nameof(keyword)); Keywords index; - return _keywords.TryGetValue(keyword, out index) && base.ShouldSerialize(_validKeywords[(int)index]); + return s_keywords.TryGetValue(keyword, out index) && base.ShouldSerialize(s_validKeywords[(int)index]); } - /// + /// public override bool TryGetValue(string keyword, out object value) { Keywords index; - if (_keywords.TryGetValue(keyword, out index)) + if (s_keywords.TryGetValue(keyword, out index)) { value = GetAt(index); return true; @@ -1634,142 +1489,230 @@ public override bool TryGetValue(string keyword, out object value) return false; } - private sealed class NetworkLibraryConverter : TypeConverter + private Exception UnsupportedKeyword(string keyword) { - // private const string AppleTalk = "Apple Talk (DBMSADSN)"; Invalid protocals - // private const string BanyanVines = "Banyan VINES (DBMSVINN)"; - // private const string IPXSPX = "NWLink IPX/SPX (DBMSSPXN)"; - // private const string Multiprotocol = "Multiprotocol (DBMSRPCN)"; - private const string NamedPipes = "Named Pipes (DBNMPNTW)"; // valid protocols - private const string SharedMemory = "Shared Memory (DBMSLPCN)"; - private const string TCPIP = "TCP/IP (DBMSSOCN)"; - private const string VIA = "VIA (DBMSGNET)"; - - // these are correctly non-static, property grid will cache an instance - private StandardValuesCollection _standardValues; +#if !NETFRAMEWORK + if (s_notSupportedKeywords.Contains(keyword, StringComparer.OrdinalIgnoreCase)) + { + return SQL.UnsupportedKeyword(keyword); + } + else if (s_notSupportedNetworkLibraryKeywords.Contains(keyword, StringComparer.OrdinalIgnoreCase)) + { + return SQL.NetworkLibraryKeywordNotSupported(); + } + else +#endif + return ADP.KeywordNotSupported(keyword); + } + private sealed class SqlInitialCatalogConverter : StringConverter + { // converter classes should have public ctor - public NetworkLibraryConverter() + public SqlInitialCatalogConverter() { } - public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) + public override bool GetStandardValuesSupported(ITypeDescriptorContext context) { - // Only know how to convert from a string - return ((typeof(string) == sourceType) || base.CanConvertFrom(context, sourceType)); + return GetStandardValuesSupportedInternal(context); } - public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value) + private bool GetStandardValuesSupportedInternal(ITypeDescriptorContext context) { - string svalue = (value as string); - if (null != svalue) + // Only say standard values are supported if the connection string has enough + // information set to instantiate a connection and retrieve a list of databases + bool flag = false; + if (null != context) { - svalue = svalue.Trim(); - if (StringComparer.OrdinalIgnoreCase.Equals(svalue, NamedPipes)) - { - return SqlConnectionString.NETLIB.NamedPipes; - } - else if (StringComparer.OrdinalIgnoreCase.Equals(svalue, SharedMemory)) - { - return SqlConnectionString.NETLIB.SharedMemory; - } - else if (StringComparer.OrdinalIgnoreCase.Equals(svalue, TCPIP)) - { - return SqlConnectionString.NETLIB.TCPIP; - } - else if (StringComparer.OrdinalIgnoreCase.Equals(svalue, VIA)) - { - return SqlConnectionString.NETLIB.VIA; - } - else + SqlConnectionStringBuilder constr = (context.Instance as SqlConnectionStringBuilder); + if (null != constr) { - return svalue; + if ((0 < constr.DataSource.Length) && (constr.IntegratedSecurity || (0 < constr.UserID.Length))) + { + flag = true; + } } } - return base.ConvertFrom(context, culture, value); + return flag; } - public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) + public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) { - return ((typeof(string) == destinationType) || base.CanConvertTo(context, destinationType)); + // Although theoretically this could be true, some people may want to just type in a name + return false; } - public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType) + public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) { - string svalue = (value as string); - if ((null != svalue) && (destinationType == typeof(string))) + // There can only be standard values if the connection string is in a state that might + // be able to instantiate a connection + if (GetStandardValuesSupportedInternal(context)) { - switch (svalue.Trim().ToLower(CultureInfo.InvariantCulture)) + // Create an array list to store the database names + List values = new List(); + + try { - case SqlConnectionString.NETLIB.NamedPipes: - return NamedPipes; - case SqlConnectionString.NETLIB.SharedMemory: - return SharedMemory; - case SqlConnectionString.NETLIB.TCPIP: - return TCPIP; - case SqlConnectionString.NETLIB.VIA: - return VIA; - default: - return svalue; + SqlConnectionStringBuilder constr = (SqlConnectionStringBuilder)context.Instance; + + // Create a connection + using (SqlConnection connection = new SqlConnection()) + { + // Create a basic connection string from current property values + connection.ConnectionString = constr.ConnectionString; + + // Try to open the connection + connection.Open(); + + DataTable databaseTable = connection.GetSchema("DATABASES"); + + foreach (DataRow row in databaseTable.Rows) + { + string dbName = (string)row["database_name"]; + values.Add(dbName); + } + } + } + catch (SqlException e) + { + ADP.TraceExceptionWithoutRethrow(e); + // silently fail } + + // Return values as a StandardValuesCollection + return new StandardValuesCollection(values); } - return base.ConvertTo(context, culture, value, destinationType); + return null; } + } - public override bool GetStandardValuesSupported(ITypeDescriptorContext context) +#if NETFRAMEWORK + /// + [Browsable(false)] + [DisplayName(DbConnectionStringKeywords.ConnectionReset)] + [Obsolete("ConnectionReset has been deprecated. SqlConnection will ignore the 'connection reset' keyword and always reset the connection.")] // SQLPT 41700 + [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Pooling)] + [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_ConnectionReset)] + [RefreshPropertiesAttribute(RefreshProperties.All)] + public bool ConnectionReset + { + get { return _connectionReset; } + set { - return true; + SetValue(DbConnectionStringKeywords.ConnectionReset, value); + _connectionReset = value; } + } - public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) + /// + [DisplayName(DbConnectionStringKeywords.ContextConnection)] + [Obsolete("ContextConnection has been deprecated. SqlConnection will ignore the 'Context Connection' keyword.")] + [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Source)] + [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_ContextConnection)] + [RefreshPropertiesAttribute(RefreshProperties.All)] + public bool ContextConnection + { + get { return _contextConnection; } + set { - return false; + SetValue(DbConnectionStringKeywords.ContextConnection, value); + _contextConnection = value; } + } - public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) + /// + [DisplayName(DbConnectionStringKeywords.TransparentNetworkIPResolution)] + [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Source)] + [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_TransparentNetworkIPResolution)] + [RefreshPropertiesAttribute(RefreshProperties.All)] + public bool TransparentNetworkIPResolution + { + get { return _transparentNetworkIPResolution; } + set { + SetValue(DbConnectionStringKeywords.TransparentNetworkIPResolution, value); + _transparentNetworkIPResolution = value; + } + } - SqlConnectionStringBuilder constr = null; - if (null != context) + /// + [DisplayName(DbConnectionStringKeywords.NetworkLibrary)] + [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Advanced)] + [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_NetworkLibrary)] + [RefreshPropertiesAttribute(RefreshProperties.All)] + [TypeConverter(typeof(NetworkLibraryConverter))] + public string NetworkLibrary + { + get { return _networkLibrary; } + set + { + if (null != value) { - constr = (context.Instance as SqlConnectionStringBuilder); + switch (value.Trim().ToLower(CultureInfo.InvariantCulture)) + { + case SqlConnectionString.NETLIB.AppleTalk: + value = SqlConnectionString.NETLIB.AppleTalk; + break; + case SqlConnectionString.NETLIB.BanyanVines: + value = SqlConnectionString.NETLIB.BanyanVines; + break; + case SqlConnectionString.NETLIB.IPXSPX: + value = SqlConnectionString.NETLIB.IPXSPX; + break; + case SqlConnectionString.NETLIB.Multiprotocol: + value = SqlConnectionString.NETLIB.Multiprotocol; + break; + case SqlConnectionString.NETLIB.NamedPipes: + value = SqlConnectionString.NETLIB.NamedPipes; + break; + case SqlConnectionString.NETLIB.SharedMemory: + value = SqlConnectionString.NETLIB.SharedMemory; + break; + case SqlConnectionString.NETLIB.TCPIP: + value = SqlConnectionString.NETLIB.TCPIP; + break; + case SqlConnectionString.NETLIB.VIA: + value = SqlConnectionString.NETLIB.VIA; + break; + default: + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.NetworkLibrary); + } } + SetValue(DbConnectionStringKeywords.NetworkLibrary, value); + _networkLibrary = value; + } + } - StandardValuesCollection standardValues = _standardValues; - if (null == standardValues) - { - string[] names = new string[] { - NamedPipes, - SharedMemory, - TCPIP, - VIA, - }; - standardValues = new StandardValuesCollection(names); - _standardValues = standardValues; +#if ADONET_CERT_AUTH + [DisplayName(DbConnectionStringKeywords.Certificate)] + [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] + [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_Certificate)] + [RefreshPropertiesAttribute(RefreshProperties.All)] + public string Certificate { + get { return _certificate; } + set { + if (!DbConnectionStringBuilderUtil.IsValidCertificateValue(value)) { + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.Certificate); } - return standardValues; + + SetValue(DbConnectionStringKeywords.Certificate, value); + _certificate = value; } } +#else + internal string Certificate => null; +#endif private sealed class SqlDataSourceConverter : StringConverter { - private StandardValuesCollection _standardValues; // converter classes should have public ctor - public SqlDataSourceConverter() - { - } + public SqlDataSourceConverter(){} - public override bool GetStandardValuesSupported(ITypeDescriptorContext context) - { - return true; - } + public override bool GetStandardValuesSupported(ITypeDescriptorContext context) => true; - public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) - { - return false; - } + public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) => false; public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) { @@ -1808,99 +1751,104 @@ public override StandardValuesCollection GetStandardValues(ITypeDescriptorContex } } - private sealed class SqlInitialCatalogConverter : StringConverter + private sealed class NetworkLibraryConverter : TypeConverter { + // private const string AppleTalk = "Apple Talk (DBMSADSN)"; Invalid protocals + // private const string BanyanVines = "Banyan VINES (DBMSVINN)"; + // private const string IPXSPX = "NWLink IPX/SPX (DBMSSPXN)"; + // private const string Multiprotocol = "Multiprotocol (DBMSRPCN)"; + private const string NamedPipes = "Named Pipes (DBNMPNTW)"; // valid protocols + private const string SharedMemory = "Shared Memory (DBMSLPCN)"; + private const string TCPIP = "TCP/IP (DBMSSOCN)"; + private const string VIA = "VIA (DBMSGNET)"; + + // these are correctly non-static, property grid will cache an instance + private StandardValuesCollection _standardValues; // converter classes should have public ctor - public SqlInitialCatalogConverter() - { - } + public NetworkLibraryConverter() {} - public override bool GetStandardValuesSupported(ITypeDescriptorContext context) - { - return GetStandardValuesSupportedInternal(context); - } + public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) + // Only know how to convert from a string + => (typeof(string) == sourceType) || base.CanConvertFrom(context, sourceType); - private bool GetStandardValuesSupportedInternal(ITypeDescriptorContext context) + public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { - // Only say standard values are supported if the connection string has enough - // information set to instantiate a connection and retrieve a list of databases - bool flag = false; - if (null != context) + string svalue = (value as string); + if (null != svalue) { - SqlConnectionStringBuilder constr = (context.Instance as SqlConnectionStringBuilder); - if (null != constr) + svalue = svalue.Trim(); + if (StringComparer.OrdinalIgnoreCase.Equals(svalue, NamedPipes)) { - if ((0 < constr.DataSource.Length) && (constr.IntegratedSecurity || (0 < constr.UserID.Length))) - { - flag = true; - } + return SqlConnectionString.NETLIB.NamedPipes; + } + else if (StringComparer.OrdinalIgnoreCase.Equals(svalue, SharedMemory)) + { + return SqlConnectionString.NETLIB.SharedMemory; + } + else if (StringComparer.OrdinalIgnoreCase.Equals(svalue, TCPIP)) + { + return SqlConnectionString.NETLIB.TCPIP; + } + else if (StringComparer.OrdinalIgnoreCase.Equals(svalue, VIA)) + { + return SqlConnectionString.NETLIB.VIA; + } + else + { + return svalue; } } - return flag; + return base.ConvertFrom(context, culture, value); } - public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) - { - // Although theoretically this could be true, some people may want to just type in a name - return false; - } + public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) + => (typeof(string) == destinationType) || base.CanConvertTo(context, destinationType); - public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) + public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { - // There can only be standard values if the connection string is in a state that might - // be able to instantiate a connection - if (GetStandardValuesSupportedInternal(context)) + if ((value is string svalue) && (destinationType == typeof(string))) { - - // Create an array list to store the database names - List values = new List(); - - try + return svalue.Trim().ToLower(CultureInfo.InvariantCulture) switch { - SqlConnectionStringBuilder constr = (SqlConnectionStringBuilder)context.Instance; - - // Create a connection - using (SqlConnection connection = new SqlConnection()) - { - - // Create a basic connection string from current property values - connection.ConnectionString = constr.ConnectionString; - - // Try to open the connection - connection.Open(); + SqlConnectionString.NETLIB.NamedPipes => NamedPipes, + SqlConnectionString.NETLIB.SharedMemory => SharedMemory, + SqlConnectionString.NETLIB.TCPIP => TCPIP, + SqlConnectionString.NETLIB.VIA => VIA, + _ => svalue, + }; + } + return base.ConvertTo(context, culture, value, destinationType); + } - DataTable databaseTable = connection.GetSchema("DATABASES"); + public override bool GetStandardValuesSupported(ITypeDescriptorContext context) => true; - foreach (DataRow row in databaseTable.Rows) - { - string dbName = (string)row["database_name"]; - values.Add(dbName); - } - } - } - catch (SqlException e) - { - ADP.TraceExceptionWithoutRethrow(e); - // silently fail - } + public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) => false; - // Return values as a StandardValuesCollection - return new StandardValuesCollection(values); + public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) + { + StandardValuesCollection standardValues = _standardValues; + if (null == standardValues) + { + string[] names = new string[] { + NamedPipes, + SharedMemory, + TCPIP, + VIA, + }; + standardValues = new StandardValuesCollection(names); + _standardValues = standardValues; } - return null; + return standardValues; } } - sealed internal class SqlConnectionStringBuilderConverter : ExpandableObjectConverter + internal sealed class SqlConnectionStringBuilderConverter : ExpandableObjectConverter { - // converter classes should have public ctor - public SqlConnectionStringBuilderConverter() - { - } + public SqlConnectionStringBuilderConverter() {} - override public bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) + public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) { if (typeof(System.ComponentModel.Design.Serialization.InstanceDescriptor) == destinationType) { @@ -1909,11 +1857,11 @@ override public bool CanConvertTo(ITypeDescriptorContext context, Type destinati return base.CanConvertTo(context, destinationType); } - override public object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) + public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { if (destinationType == null) { - throw ADP.ArgumentNull("destinationType"); + throw ADP.ArgumentNull(nameof(destinationType)); } if (typeof(System.ComponentModel.Design.Serialization.InstanceDescriptor) == destinationType) { @@ -1930,10 +1878,24 @@ private System.ComponentModel.Design.Serialization.InstanceDescriptor ConvertToI { Type[] ctorParams = new Type[] { typeof(string) }; object[] ctorValues = new object[] { options.ConnectionString }; - System.Reflection.ConstructorInfo ctor = typeof(SqlConnectionStringBuilder).GetConstructor(ctorParams); + ConstructorInfo ctor = typeof(SqlConnectionStringBuilder).GetConstructor(ctorParams); return new System.ComponentModel.Design.Serialization.InstanceDescriptor(ctor, ctorValues); } } - } +#else + + private static readonly string[] s_notSupportedKeywords = new string[] { + DbConnectionStringKeywords.ConnectionReset, + DbConnectionStringKeywords.ContextConnection, + DbConnectionStringKeywords.TransactionBinding, + }; + private static readonly string[] s_notSupportedNetworkLibraryKeywords = new string[] { + DbConnectionStringKeywords.NetworkLibrary, + + DbConnectionStringSynonyms.NET, + DbConnectionStringSynonyms.NETWORK + }; +#endif + } } From b1cd6ba96b0e4000c727bb61bf801b5f9e34ab76 Mon Sep 17 00:00:00 2001 From: Davoud Eshtehari Date: Wed, 13 Oct 2021 18:52:20 -0700 Subject: [PATCH 2/5] Classify --- .../SqlClient/SqlConnectionStringBuilder.cs | 2551 ++++++++--------- 1 file changed, 1264 insertions(+), 1287 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs index 10059fa7a8..aedbf7b481 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs @@ -7,6 +7,7 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; +using System.ComponentModel.Design.Serialization; using System.Data; using System.Data.Common; using System.Diagnostics; @@ -20,16 +21,14 @@ namespace Microsoft.Data.SqlClient { /// [DefaultProperty(DbConnectionStringKeywords.DataSource)] -#if NETFRAMEWORK - [System.ComponentModel.TypeConverterAttribute(typeof(SqlConnectionStringBuilder.SqlConnectionStringBuilderConverter))] -#endif + [TypeConverter(typeof(SqlConnectionStringBuilderConverter))] public sealed class SqlConnectionStringBuilder : DbConnectionStringBuilder { /// /// specific ordering for ConnectionString output construction /// private enum Keywords - { // NamedConnection, + { DataSource, FailoverPartner, AttachDBFilename, @@ -79,15 +78,16 @@ private enum Keywords CommandTimeout, IPAddressPreference, + #if NETFRAMEWORK && ADONET_CERT_AUTH Certificate, #endif - // keep the count value last + // keep the KeywordsCount value last KeywordsCount } + #region Fields internal const int KeywordsCount = (int)Keywords.KeywordsCount; - internal const int DeprecatedKeywordsCount = 3; private static readonly string[] s_validKeywords = CreateValidKeywords(); private static readonly Dictionary s_keywords = CreateKeywordsDictionary(); @@ -139,7 +139,12 @@ private enum Keywords #if ADONET_CERT_AUTH private string _certificate = DbConnectionStringDefaults.Certificate; #endif +#else + internal const int DeprecatedKeywordsCount = 3; #endif + #endregion //Fields + + #region Private Methods private static string[] CreateValidKeywords() { string[] validKeywords = new string[KeywordsCount]; @@ -179,7 +184,6 @@ private static string[] CreateValidKeywords() validKeywords[(int)Keywords.EnclaveAttestationUrl] = DbConnectionStringKeywords.EnclaveAttestationUrl; validKeywords[(int)Keywords.AttestationProtocol] = DbConnectionStringKeywords.AttestationProtocol; validKeywords[(int)Keywords.IPAddressPreference] = DbConnectionStringKeywords.IPAddressPreference; - #if NETFRAMEWORK validKeywords[(int)Keywords.ConnectionReset] = DbConnectionStringKeywords.ConnectionReset; validKeywords[(int)Keywords.ContextConnection] = DbConnectionStringKeywords.ContextConnection; @@ -194,7 +198,7 @@ private static string[] CreateValidKeywords() private static Dictionary CreateKeywordsDictionary() { - Dictionary hash = new(KeywordsCount + SqlConnectionString.SynonymCount, StringComparer.OrdinalIgnoreCase) + Dictionary pairs = new(KeywordsCount + SqlConnectionString.SynonymCount, StringComparer.OrdinalIgnoreCase) { { DbConnectionStringKeywords.ApplicationIntent, Keywords.ApplicationIntent }, { DbConnectionStringKeywords.ApplicationName, Keywords.ApplicationName }, @@ -272,1319 +276,1487 @@ private static Dictionary CreateKeywordsDictionary() { DbConnectionStringSynonyms.User, Keywords.UserID }, { DbConnectionStringSynonyms.WSID, Keywords.WorkstationID } }; - Debug.Assert((KeywordsCount + SqlConnectionString.SynonymCount) == hash.Count, "initial expected size is incorrect"); - return hash; + Debug.Assert((KeywordsCount + SqlConnectionString.SynonymCount) == pairs.Count, "initial expected size is incorrect"); + return pairs; } - /// - public SqlConnectionStringBuilder() : this((string)null) - { - } + private static bool ConvertToBoolean(object value) => DbConnectionStringBuilderUtil.ConvertToBoolean(value); - /// - public SqlConnectionStringBuilder(string connectionString) : base() - { - if (!string.IsNullOrEmpty(connectionString)) - { - ConnectionString = connectionString; - } - } + private static int ConvertToInt32(object value) => DbConnectionStringBuilderUtil.ConvertToInt32(value); - /// - public override object this[string keyword] - { - get - { - Keywords index = GetIndex(keyword); - return GetAt(index); - } - set - { - if (null != value) - { - Keywords index = GetIndex(keyword); - switch (index) - { - case Keywords.ApplicationIntent: - ApplicationIntent = ConvertToApplicationIntent(keyword, value); - break; - case Keywords.ApplicationName: - ApplicationName = ConvertToString(value); - break; - case Keywords.AttachDBFilename: - AttachDBFilename = ConvertToString(value); - break; - case Keywords.CurrentLanguage: - CurrentLanguage = ConvertToString(value); - break; - case Keywords.DataSource: - DataSource = ConvertToString(value); - break; - case Keywords.FailoverPartner: - FailoverPartner = ConvertToString(value); - break; - case Keywords.InitialCatalog: - InitialCatalog = ConvertToString(value); - break; - // case Keywords.NamedConnection: NamedConnection = ConvertToString(value); break; - case Keywords.Password: - Password = ConvertToString(value); - break; - case Keywords.UserID: - UserID = ConvertToString(value); - break; - case Keywords.TransactionBinding: - TransactionBinding = ConvertToString(value); - break; - case Keywords.TypeSystemVersion: - TypeSystemVersion = ConvertToString(value); - break; - case Keywords.WorkstationID: - WorkstationID = ConvertToString(value); - break; + private static bool ConvertToIntegratedSecurity(object value) => DbConnectionStringBuilderUtil.ConvertToIntegratedSecurity(value); - case Keywords.CommandTimeout: - CommandTimeout = ConvertToInt32(value); - break; - case Keywords.ConnectTimeout: - ConnectTimeout = ConvertToInt32(value); - break; - case Keywords.LoadBalanceTimeout: - LoadBalanceTimeout = ConvertToInt32(value); - break; - case Keywords.MaxPoolSize: - MaxPoolSize = ConvertToInt32(value); - break; - case Keywords.MinPoolSize: - MinPoolSize = ConvertToInt32(value); - break; - case Keywords.PacketSize: - PacketSize = ConvertToInt32(value); - break; + private static SqlAuthenticationMethod ConvertToAuthenticationType(string keyword, object value) => DbConnectionStringBuilderUtil.ConvertToAuthenticationType(keyword, value); - case Keywords.IntegratedSecurity: - IntegratedSecurity = ConvertToIntegratedSecurity(value); - break; - case Keywords.Authentication: - Authentication = ConvertToAuthenticationType(keyword, value); - break; - case Keywords.ColumnEncryptionSetting: - ColumnEncryptionSetting = ConvertToColumnEncryptionSetting(keyword, value); - break; - case Keywords.EnclaveAttestationUrl: - EnclaveAttestationUrl = ConvertToString(value); - break; - case Keywords.AttestationProtocol: - AttestationProtocol = ConvertToAttestationProtocol(keyword, value); - break; - case Keywords.IPAddressPreference: - IPAddressPreference = ConvertToIPAddressPreference(keyword, value); - break; - case Keywords.PoolBlockingPeriod: - PoolBlockingPeriod = ConvertToPoolBlockingPeriod(keyword, value); - break; - case Keywords.Encrypt: - Encrypt = ConvertToBoolean(value); - break; - case Keywords.TrustServerCertificate: - TrustServerCertificate = ConvertToBoolean(value); - break; - case Keywords.Enlist: - Enlist = ConvertToBoolean(value); - break; - case Keywords.MultipleActiveResultSets: - MultipleActiveResultSets = ConvertToBoolean(value); - break; - case Keywords.MultiSubnetFailover: - MultiSubnetFailover = ConvertToBoolean(value); - break; - case Keywords.PersistSecurityInfo: - PersistSecurityInfo = ConvertToBoolean(value); - break; - case Keywords.Pooling: - Pooling = ConvertToBoolean(value); - break; - case Keywords.Replication: - Replication = ConvertToBoolean(value); - break; - case Keywords.UserInstance: - UserInstance = ConvertToBoolean(value); - break; - case Keywords.ConnectRetryCount: - ConnectRetryCount = ConvertToInt32(value); - break; - case Keywords.ConnectRetryInterval: - ConnectRetryInterval = ConvertToInt32(value); - break; -#if NETFRAMEWORK -#pragma warning disable 618 // Obsolete properties - case Keywords.ConnectionReset: - ConnectionReset = ConvertToBoolean(value); - break; - case Keywords.ContextConnection: - ContextConnection = ConvertToBoolean(value); - break; -#pragma warning restore 618 - case Keywords.NetworkLibrary: - NetworkLibrary = ConvertToString(value); - break; - case Keywords.TransparentNetworkIPResolution: - TransparentNetworkIPResolution = ConvertToBoolean(value); - break; -#if ADONET_CERT_AUTH - case Keywords.Certificate: - Certificate = ConvertToString(value); - break; -#endif -#endif - default: - Debug.Fail("unexpected keyword"); - throw UnsupportedKeyword(keyword); - } - } - else - { - Remove(keyword); - } - } - } + private static string ConvertToString(object value) => DbConnectionStringBuilderUtil.ConvertToString(value); - /// - [DisplayNameAttribute(DbConnectionStringKeywords.ApplicationIntent)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Initialization)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_ApplicationIntent)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public ApplicationIntent ApplicationIntent - { - get { return _applicationIntent; } - set - { - if (!DbConnectionStringBuilderUtil.IsValidApplicationIntentValue(value)) - { - throw ADP.InvalidEnumerationValue(typeof(ApplicationIntent), (int)value); - } + private static ApplicationIntent ConvertToApplicationIntent(string keyword, object value) => DbConnectionStringBuilderUtil.ConvertToApplicationIntent(keyword, value); - SetApplicationIntentValue(value); - _applicationIntent = value; - } - } + /// + /// Convert to SqlConnectionColumnEncryptionSetting. + /// + /// + /// + private static SqlConnectionColumnEncryptionSetting ConvertToColumnEncryptionSetting(string keyword, object value) + => DbConnectionStringBuilderUtil.ConvertToColumnEncryptionSetting(keyword, value); - /// - [DisplayNameAttribute(DbConnectionStringKeywords.ApplicationName)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Context)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_ApplicationName)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public string ApplicationName - { - get { return _applicationName; } - set - { - SetValue(DbConnectionStringKeywords.ApplicationName, value); - _applicationName = value; - } - } + /// + /// Convert to SqlConnectionAttestationProtocol + /// + /// + /// + private static SqlConnectionAttestationProtocol ConvertToAttestationProtocol(string keyword, object value) + => DbConnectionStringBuilderUtil.ConvertToAttestationProtocol(keyword, value); - /// - [DisplayNameAttribute(DbConnectionStringKeywords.AttachDBFilename)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Source)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_AttachDBFilename)] - [EditorAttribute("System.Windows.Forms.Design.FileNameEditor, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public string AttachDBFilename - { - get { return _attachDBFilename; } - set - { - SetValue(DbConnectionStringKeywords.AttachDBFilename, value); - _attachDBFilename = value; - } - } + /// + /// Convert to SqlConnectionIPAddressPreference + /// + /// + /// + private static SqlConnectionIPAddressPreference ConvertToIPAddressPreference(string keyword, object value) + => DbConnectionStringBuilderUtil.ConvertToIPAddressPreference(keyword, value); - /// - [DisplayNameAttribute(DbConnectionStringKeywords.CommandTimeout)] - [ResCategory(StringsHelper.ResourceNames.DataCategory_Initialization)] - [ResDescription(StringsHelper.ResourceNames.DbCommand_CommandTimeout)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public int CommandTimeout - { - get { return _commandTimeout; } - set - { - if (value < 0) - { - throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.CommandTimeout); - } - SetValue(DbConnectionStringKeywords.CommandTimeout, value); - _commandTimeout = value; - } - } + private static PoolBlockingPeriod ConvertToPoolBlockingPeriod(string keyword, object value) + => DbConnectionStringBuilderUtil.ConvertToPoolBlockingPeriod(keyword, value); - /// - [DisplayNameAttribute(DbConnectionStringKeywords.ConnectTimeout)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Initialization)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_ConnectTimeout)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public int ConnectTimeout + private object GetAt(Keywords index) { - get { return _connectTimeout; } - set + switch (index) { - if (value < 0) - { - throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.ConnectTimeout); - } - SetValue(DbConnectionStringKeywords.ConnectTimeout, value); - _connectTimeout = value; + case Keywords.ApplicationIntent: + return ApplicationIntent; + case Keywords.ApplicationName: + return ApplicationName; + case Keywords.AttachDBFilename: + return AttachDBFilename; + case Keywords.PoolBlockingPeriod: + return PoolBlockingPeriod; + case Keywords.CommandTimeout: + return CommandTimeout; + case Keywords.ConnectTimeout: + return ConnectTimeout; + case Keywords.CurrentLanguage: + return CurrentLanguage; + case Keywords.DataSource: + return DataSource; + case Keywords.Encrypt: + return Encrypt; + case Keywords.Enlist: + return Enlist; + case Keywords.FailoverPartner: + return FailoverPartner; + case Keywords.InitialCatalog: + return InitialCatalog; + case Keywords.IntegratedSecurity: + return IntegratedSecurity; + case Keywords.LoadBalanceTimeout: + return LoadBalanceTimeout; + case Keywords.MultipleActiveResultSets: + return MultipleActiveResultSets; + case Keywords.MaxPoolSize: + return MaxPoolSize; + case Keywords.MinPoolSize: + return MinPoolSize; + case Keywords.MultiSubnetFailover: + return MultiSubnetFailover; + // case Keywords.NamedConnection: return NamedConnection; + case Keywords.PacketSize: + return PacketSize; + case Keywords.Password: + return Password; + case Keywords.PersistSecurityInfo: + return PersistSecurityInfo; + case Keywords.Pooling: + return Pooling; + case Keywords.Replication: + return Replication; + case Keywords.TransactionBinding: + return TransactionBinding; + case Keywords.TrustServerCertificate: + return TrustServerCertificate; + case Keywords.TypeSystemVersion: + return TypeSystemVersion; + case Keywords.UserID: + return UserID; + case Keywords.UserInstance: + return UserInstance; + case Keywords.WorkstationID: + return WorkstationID; + case Keywords.ConnectRetryCount: + return ConnectRetryCount; + case Keywords.ConnectRetryInterval: + return ConnectRetryInterval; + case Keywords.Authentication: + return Authentication; + case Keywords.ColumnEncryptionSetting: + return ColumnEncryptionSetting; + case Keywords.EnclaveAttestationUrl: + return EnclaveAttestationUrl; + case Keywords.AttestationProtocol: + return AttestationProtocol; + case Keywords.IPAddressPreference: + return IPAddressPreference; + +#if NETFRAMEWORK +#pragma warning disable 618 // Obsolete properties + case Keywords.ConnectionReset: + return ConnectionReset; + case Keywords.ContextConnection: + return ContextConnection; +#pragma warning restore 618 + case Keywords.TransparentNetworkIPResolution: + return TransparentNetworkIPResolution; + case Keywords.NetworkLibrary: + return NetworkLibrary; +#if ADONET_CERT_AUTH + case Keywords.Certificate: return Certificate; +#endif +#endif + default: + Debug.Fail("unexpected keyword"); + throw UnsupportedKeyword(s_validKeywords[(int)index]); } } - /// - [DisplayNameAttribute(DbConnectionStringKeywords.CurrentLanguage)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Initialization)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_CurrentLanguage)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public string CurrentLanguage + private Keywords GetIndex(string keyword) { - get { return _currentLanguage; } - set + ADP.CheckArgumentNull(keyword, nameof(keyword)); + if (s_keywords.TryGetValue(keyword, out Keywords index)) { - SetValue(DbConnectionStringKeywords.CurrentLanguage, value); - _currentLanguage = value; + return index; } + + throw UnsupportedKeyword(keyword); } - /// - [DisplayNameAttribute(DbConnectionStringKeywords.DataSource)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Source)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_DataSource)] - [RefreshPropertiesAttribute(RefreshProperties.All)] + private void Reset(Keywords index) + { + switch (index) + { + case Keywords.ApplicationIntent: + _applicationIntent = DbConnectionStringDefaults.ApplicationIntent; + break; + case Keywords.ApplicationName: + _applicationName = DbConnectionStringDefaults.ApplicationName; + break; + case Keywords.AttachDBFilename: + _attachDBFilename = DbConnectionStringDefaults.AttachDBFilename; + break; + case Keywords.Authentication: + _authentication = DbConnectionStringDefaults.Authentication; + break; + case Keywords.PoolBlockingPeriod: + _poolBlockingPeriod = DbConnectionStringDefaults.PoolBlockingPeriod; + break; + case Keywords.CommandTimeout: + _commandTimeout = DbConnectionStringDefaults.CommandTimeout; + break; + case Keywords.ConnectTimeout: + _connectTimeout = DbConnectionStringDefaults.ConnectTimeout; + break; + case Keywords.CurrentLanguage: + _currentLanguage = DbConnectionStringDefaults.CurrentLanguage; + break; + case Keywords.DataSource: + _dataSource = DbConnectionStringDefaults.DataSource; + break; + case Keywords.Encrypt: + _encrypt = DbConnectionStringDefaults.Encrypt; + break; + case Keywords.Enlist: + _enlist = DbConnectionStringDefaults.Enlist; + break; + case Keywords.FailoverPartner: + _failoverPartner = DbConnectionStringDefaults.FailoverPartner; + break; + case Keywords.InitialCatalog: + _initialCatalog = DbConnectionStringDefaults.InitialCatalog; + break; + case Keywords.IntegratedSecurity: + _integratedSecurity = DbConnectionStringDefaults.IntegratedSecurity; + break; + case Keywords.LoadBalanceTimeout: + _loadBalanceTimeout = DbConnectionStringDefaults.LoadBalanceTimeout; + break; + case Keywords.MultipleActiveResultSets: + _multipleActiveResultSets = DbConnectionStringDefaults.MultipleActiveResultSets; + break; + case Keywords.MaxPoolSize: + _maxPoolSize = DbConnectionStringDefaults.MaxPoolSize; + break; + case Keywords.MinPoolSize: + _minPoolSize = DbConnectionStringDefaults.MinPoolSize; + break; + case Keywords.MultiSubnetFailover: + _multiSubnetFailover = DbConnectionStringDefaults.MultiSubnetFailover; + break; + case Keywords.PacketSize: + _packetSize = DbConnectionStringDefaults.PacketSize; + break; + case Keywords.Password: + _password = DbConnectionStringDefaults.Password; + break; + case Keywords.PersistSecurityInfo: + _persistSecurityInfo = DbConnectionStringDefaults.PersistSecurityInfo; + break; + case Keywords.Pooling: + _pooling = DbConnectionStringDefaults.Pooling; + break; + case Keywords.ConnectRetryCount: + _connectRetryCount = DbConnectionStringDefaults.ConnectRetryCount; + break; + case Keywords.ConnectRetryInterval: + _connectRetryInterval = DbConnectionStringDefaults.ConnectRetryInterval; + break; + case Keywords.Replication: + _replication = DbConnectionStringDefaults.Replication; + break; + case Keywords.TransactionBinding: + _transactionBinding = DbConnectionStringDefaults.TransactionBinding; + break; + case Keywords.TrustServerCertificate: + _trustServerCertificate = DbConnectionStringDefaults.TrustServerCertificate; + break; + case Keywords.TypeSystemVersion: + _typeSystemVersion = DbConnectionStringDefaults.TypeSystemVersion; + break; + case Keywords.UserID: + _userID = DbConnectionStringDefaults.UserID; + break; + case Keywords.UserInstance: + _userInstance = DbConnectionStringDefaults.UserInstance; + break; + case Keywords.WorkstationID: + _workstationID = DbConnectionStringDefaults.WorkstationID; + break; + case Keywords.ColumnEncryptionSetting: + _columnEncryptionSetting = DbConnectionStringDefaults.ColumnEncryptionSetting; + break; + case Keywords.EnclaveAttestationUrl: + _enclaveAttestationUrl = DbConnectionStringDefaults.EnclaveAttestationUrl; + break; + case Keywords.AttestationProtocol: + _attestationProtocol = DbConnectionStringDefaults.AttestationProtocol; + break; + case Keywords.IPAddressPreference: + _ipAddressPreference = DbConnectionStringDefaults.IPAddressPreference; + break; #if NETFRAMEWORK - [TypeConverter(typeof(SqlDataSourceConverter))] + case Keywords.ConnectionReset: + _connectionReset = DbConnectionStringDefaults.ConnectionReset; + break; + case Keywords.ContextConnection: + _contextConnection = DbConnectionStringDefaults.ContextConnection; + break; + case Keywords.TransparentNetworkIPResolution: + _transparentNetworkIPResolution = DbConnectionStringDefaults.TransparentNetworkIPResolution; + break; + case Keywords.NetworkLibrary: + _networkLibrary = DbConnectionStringDefaults.NetworkLibrary; + break; +#if ADONET_CERT_AUTH + case Keywords.Certificate: + _certificate = DbConnectionStringDefaults.Certificate; + break; #endif - public string DataSource +#endif + default: + Debug.Fail("unexpected keyword"); + throw UnsupportedKeyword(s_validKeywords[(int)index]); + } + } + + private void SetValue(string keyword, bool value) => base[keyword] = value.ToString(); + + private void SetValue(string keyword, int value) => base[keyword] = value.ToString((System.IFormatProvider)null); + + private void SetValue(string keyword, string value) { - get { return _dataSource; } - set + ADP.CheckArgumentNull(value, keyword); + base[keyword] = value; + } + + private void SetApplicationIntentValue(ApplicationIntent value) + { + Debug.Assert(DbConnectionStringBuilderUtil.IsValidApplicationIntentValue(value), "invalid value for ApplicationIntent"); + base[DbConnectionStringKeywords.ApplicationIntent] = DbConnectionStringBuilderUtil.ApplicationIntentToString(value); + } + + private void SetColumnEncryptionSettingValue(SqlConnectionColumnEncryptionSetting value) + { + Debug.Assert(DbConnectionStringBuilderUtil.IsValidColumnEncryptionSetting(value), "Invalid value for SqlConnectionColumnEncryptionSetting"); + base[DbConnectionStringKeywords.ColumnEncryptionSetting] = DbConnectionStringBuilderUtil.ColumnEncryptionSettingToString(value); + } + + private void SetAttestationProtocolValue(SqlConnectionAttestationProtocol value) + { + Debug.Assert(DbConnectionStringBuilderUtil.IsValidAttestationProtocol(value), "Invalid value for SqlConnectionAttestationProtocol"); + base[DbConnectionStringKeywords.AttestationProtocol] = DbConnectionStringBuilderUtil.AttestationProtocolToString(value); + } + + private void SetIPAddressPreferenceValue(SqlConnectionIPAddressPreference value) + { + Debug.Assert(DbConnectionStringBuilderUtil.IsValidIPAddressPreference(value), "Invalid value for SqlConnectionIPAddressPreference"); + base[DbConnectionStringKeywords.IPAddressPreference] = DbConnectionStringBuilderUtil.IPAddressPreferenceToString(value); + } + + private void SetAuthenticationValue(SqlAuthenticationMethod value) + { + Debug.Assert(DbConnectionStringBuilderUtil.IsValidAuthenticationTypeValue(value), "Invalid value for AuthenticationType"); + base[DbConnectionStringKeywords.Authentication] = DbConnectionStringBuilderUtil.AuthenticationTypeToString(value); + } + + private void SetPoolBlockingPeriodValue(PoolBlockingPeriod value) + { + Debug.Assert(DbConnectionStringBuilderUtil.IsValidPoolBlockingPeriodValue(value), "Invalid value for PoolBlockingPeriod"); + base[DbConnectionStringKeywords.PoolBlockingPeriod] = DbConnectionStringBuilderUtil.PoolBlockingPeriodToString(value); + } + + private Exception UnsupportedKeyword(string keyword) + { +#if !NETFRAMEWORK + if (s_notSupportedKeywords.Contains(keyword, StringComparer.OrdinalIgnoreCase)) { - SetValue(DbConnectionStringKeywords.DataSource, value); - _dataSource = value; + return SQL.UnsupportedKeyword(keyword); } + else if (s_notSupportedNetworkLibraryKeywords.Contains(keyword, StringComparer.OrdinalIgnoreCase)) + { + return SQL.NetworkLibraryKeywordNotSupported(); + } + else +#endif + return ADP.KeywordNotSupported(keyword); } - /// - [DisplayNameAttribute(DbConnectionStringKeywords.Encrypt)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_Encrypt)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public bool Encrypt + private sealed class SqlInitialCatalogConverter : StringConverter { - get { return _encrypt; } - set + // converter classes should have public ctor + public SqlInitialCatalogConverter() {} + + public override bool GetStandardValuesSupported(ITypeDescriptorContext context) => GetStandardValuesSupportedInternal(context); + + private bool GetStandardValuesSupportedInternal(ITypeDescriptorContext context) { - SetValue(DbConnectionStringKeywords.Encrypt, value); - _encrypt = value; + // Only say standard values are supported if the connection string has enough + // information set to instantiate a connection and retrieve a list of databases + bool flag = false; + if (null != context) + { + SqlConnectionStringBuilder constr = (context.Instance as SqlConnectionStringBuilder); + if (null != constr) + { + if ((0 < constr.DataSource.Length) && (constr.IntegratedSecurity || (0 < constr.UserID.Length))) + { + flag = true; + } + } + } + return flag; } - } - /// - [DisplayNameAttribute(DbConnectionStringKeywords.ColumnEncryptionSetting)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.TCE_DbConnectionString_ColumnEncryptionSetting)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public SqlConnectionColumnEncryptionSetting ColumnEncryptionSetting - { - get { return _columnEncryptionSetting; } - set - { - if (!DbConnectionStringBuilderUtil.IsValidColumnEncryptionSetting(value)) - { - throw ADP.InvalidEnumerationValue(typeof(SqlConnectionColumnEncryptionSetting), (int)value); + // Although theoretically this could be true, some people may want to just type in a name + public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) => false; + + public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) + { + // There can only be standard values if the connection string is in a state that might + // be able to instantiate a connection + if (GetStandardValuesSupportedInternal(context)) + { + // Create an array list to store the database names + List values = new List(); + + try + { + SqlConnectionStringBuilder constr = (SqlConnectionStringBuilder)context.Instance; + + // Create a connection + using (SqlConnection connection = new SqlConnection()) + { + // Create a basic connection string from current property values + connection.ConnectionString = constr.ConnectionString; + + // Try to open the connection + connection.Open(); + + DataTable databaseTable = connection.GetSchema("DATABASES"); + + foreach (DataRow row in databaseTable.Rows) + { + string dbName = (string)row["database_name"]; + values.Add(dbName); + } + } + } + catch (SqlException e) + { + ADP.TraceExceptionWithoutRethrow(e); + // silently fail + } + + // Return values as a StandardValuesCollection + return new StandardValuesCollection(values); } - - SetColumnEncryptionSettingValue(value); - _columnEncryptionSetting = value; + return null; } } - /// - [DisplayNameAttribute(DbConnectionStringKeywords.EnclaveAttestationUrl)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.TCE_DbConnectionString_EnclaveAttestationUrl)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public string EnclaveAttestationUrl + internal sealed class SqlConnectionStringBuilderConverter : ExpandableObjectConverter { - get { return _enclaveAttestationUrl; } - set - { - SetValue(DbConnectionStringKeywords.EnclaveAttestationUrl, value); - _enclaveAttestationUrl = value; - } - } + // converter classes should have public ctor + public SqlConnectionStringBuilderConverter() { } - /// - [DisplayNameAttribute(DbConnectionStringKeywords.AttestationProtocol)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.TCE_DbConnectionString_AttestationProtocol)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public SqlConnectionAttestationProtocol AttestationProtocol - { - get { return _attestationProtocol; } - set + public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) { - if (!DbConnectionStringBuilderUtil.IsValidAttestationProtocol(value)) + if (typeof(System.ComponentModel.Design.Serialization.InstanceDescriptor) == destinationType) { - throw ADP.InvalidEnumerationValue(typeof(SqlConnectionAttestationProtocol), (int)value); + return true; } - - SetAttestationProtocolValue(value); - _attestationProtocol = value; + return base.CanConvertTo(context, destinationType); } - } - /// - [DisplayNameAttribute(DbConnectionStringKeywords.IPAddressPreference)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.TCE_DbConnectionString_IPAddressPreference)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public SqlConnectionIPAddressPreference IPAddressPreference - { - get => _ipAddressPreference; - set + public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { - if (!DbConnectionStringBuilderUtil.IsValidIPAddressPreference(value)) + if (destinationType == null) { - throw ADP.InvalidEnumerationValue(typeof(SqlConnectionIPAddressPreference), (int)value); + throw ADP.ArgumentNull(nameof(destinationType)); } - - SetIPAddressPreferenceValue(value); - _ipAddressPreference = value; - } - } - - /// - [DisplayNameAttribute(DbConnectionStringKeywords.TrustServerCertificate)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_TrustServerCertificate)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public bool TrustServerCertificate - { - get { return _trustServerCertificate; } - set - { - SetValue(DbConnectionStringKeywords.TrustServerCertificate, value); - _trustServerCertificate = value; + if (typeof(InstanceDescriptor) == destinationType) + { + SqlConnectionStringBuilder obj = (value as SqlConnectionStringBuilder); + if (null != obj) + { + return ConvertToInstanceDescriptor(obj); + } + } + return base.ConvertTo(context, culture, value, destinationType); } - } - /// - [DisplayNameAttribute(DbConnectionStringKeywords.Enlist)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Pooling)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_Enlist)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public bool Enlist - { - get { return _enlist; } - set + private InstanceDescriptor ConvertToInstanceDescriptor(SqlConnectionStringBuilder options) { - SetValue(DbConnectionStringKeywords.Enlist, value); - _enlist = value; + Type[] ctorParams = new Type[] { typeof(string) }; + object[] ctorValues = new object[] { options.ConnectionString }; + ConstructorInfo ctor = typeof(SqlConnectionStringBuilder).GetConstructor(ctorParams); + return new InstanceDescriptor(ctor, ctorValues); } } - /// - [DisplayNameAttribute(DbConnectionStringKeywords.FailoverPartner)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Source)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_FailoverPartner)] - [RefreshPropertiesAttribute(RefreshProperties.All)] #if NETFRAMEWORK - [TypeConverter(typeof(SqlDataSourceConverter))] -#endif - public string FailoverPartner + private sealed class SqlDataSourceConverter : StringConverter { - get { return _failoverPartner; } - set - { - SetValue(DbConnectionStringKeywords.FailoverPartner, value); - _failoverPartner = value; - } - } + private StandardValuesCollection _standardValues; - /// - [DisplayNameAttribute(DbConnectionStringKeywords.InitialCatalog)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Source)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_InitialCatalog)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - [TypeConverter(typeof(SqlInitialCatalogConverter))] - public string InitialCatalog - { - get { return _initialCatalog; } - set - { - SetValue(DbConnectionStringKeywords.InitialCatalog, value); - _initialCatalog = value; - } - } + // converter classes should have public ctor + public SqlDataSourceConverter() { } - /// - [DisplayNameAttribute(DbConnectionStringKeywords.IntegratedSecurity)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_IntegratedSecurity)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public bool IntegratedSecurity - { - get { return _integratedSecurity; } - set - { - SetValue(DbConnectionStringKeywords.IntegratedSecurity, value); - _integratedSecurity = value; - } - } + public override bool GetStandardValuesSupported(ITypeDescriptorContext context) => true; - /// - [DisplayNameAttribute(DbConnectionStringKeywords.Authentication)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_Authentication)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public SqlAuthenticationMethod Authentication - { - get { return _authentication; } - set + public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) => false; + + public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) { - if (!DbConnectionStringBuilderUtil.IsValidAuthenticationTypeValue(value)) + StandardValuesCollection dataSourceNames = _standardValues; + if (null == _standardValues) { - throw ADP.InvalidEnumerationValue(typeof(SqlAuthenticationMethod), (int)value); - } + // Get the sources rowset for the SQLOLEDB enumerator + DataTable table = SqlClientFactory.Instance.CreateDataSourceEnumerator().GetDataSources(); + string ServerName = typeof(System.Data.Sql.SqlDataSourceEnumerator).GetField("ServerName", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null).ToString(); + string InstanceName = typeof(System.Data.Sql.SqlDataSourceEnumerator).GetField("InstanceName", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null).ToString(); + DataColumn serverName = table.Columns[ServerName]; + DataColumn instanceName = table.Columns[InstanceName]; + DataRowCollection rows = table.Rows; - SetAuthenticationValue(value); - _authentication = value; - } - } + string[] serverNames = new string[rows.Count]; + for (int i = 0; i < serverNames.Length; ++i) + { + string server = rows[i][serverName] as string; + string instance = rows[i][instanceName] as string; + if ((null == instance) || (0 == instance.Length) || ("MSSQLSERVER" == instance)) + { + serverNames[i] = server; + } + else + { + serverNames[i] = server + @"\" + instance; + } + } + Array.Sort(serverNames); - /// - [DisplayNameAttribute(DbConnectionStringKeywords.LoadBalanceTimeout)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Pooling)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_LoadBalanceTimeout)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public int LoadBalanceTimeout - { - get { return _loadBalanceTimeout; } - set - { - if (value < 0) - { - throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.LoadBalanceTimeout); + // Create the standard values collection that contains the sources + dataSourceNames = new StandardValuesCollection(serverNames); + _standardValues = dataSourceNames; } - SetValue(DbConnectionStringKeywords.LoadBalanceTimeout, value); - _loadBalanceTimeout = value; + return dataSourceNames; } } - /// - [DisplayNameAttribute(DbConnectionStringKeywords.MaxPoolSize)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Pooling)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_MaxPoolSize)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public int MaxPoolSize + private sealed class NetworkLibraryConverter : TypeConverter { - get { return _maxPoolSize; } - set + // private const string AppleTalk = "Apple Talk (DBMSADSN)"; Invalid protocals + // private const string BanyanVines = "Banyan VINES (DBMSVINN)"; + // private const string IPXSPX = "NWLink IPX/SPX (DBMSSPXN)"; + // private const string Multiprotocol = "Multiprotocol (DBMSRPCN)"; + private const string NamedPipes = "Named Pipes (DBNMPNTW)"; // valid protocols + private const string SharedMemory = "Shared Memory (DBMSLPCN)"; + private const string TCPIP = "TCP/IP (DBMSSOCN)"; + private const string VIA = "VIA (DBMSGNET)"; + + // these are correctly non-static, property grid will cache an instance + private StandardValuesCollection _standardValues; + + // converter classes should have public ctor + public NetworkLibraryConverter() { } + + public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) + // Only know how to convert from a string + => (typeof(string) == sourceType) || base.CanConvertFrom(context, sourceType); + + public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { - if (value < 1) + string svalue = (value as string); + if (null != svalue) { - throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.MaxPoolSize); + svalue = svalue.Trim(); + if (StringComparer.OrdinalIgnoreCase.Equals(svalue, NamedPipes)) + { + return SqlConnectionString.NETLIB.NamedPipes; + } + else if (StringComparer.OrdinalIgnoreCase.Equals(svalue, SharedMemory)) + { + return SqlConnectionString.NETLIB.SharedMemory; + } + else if (StringComparer.OrdinalIgnoreCase.Equals(svalue, TCPIP)) + { + return SqlConnectionString.NETLIB.TCPIP; + } + else if (StringComparer.OrdinalIgnoreCase.Equals(svalue, VIA)) + { + return SqlConnectionString.NETLIB.VIA; + } + else + { + return svalue; + } } - SetValue(DbConnectionStringKeywords.MaxPoolSize, value); - _maxPoolSize = value; + return base.ConvertFrom(context, culture, value); } - } - /// - [DisplayNameAttribute(DbConnectionStringKeywords.ConnectRetryCount)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_ConnectionResilency)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_ConnectRetryCount)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public int ConnectRetryCount - { - get { return _connectRetryCount; } - set + public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) + => (typeof(string) == destinationType) || base.CanConvertTo(context, destinationType); + + public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { - if ((value < 0) || (value > 255)) + if ((value is string svalue) && (destinationType == typeof(string))) { - throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.ConnectRetryCount); + return svalue.Trim().ToLower(CultureInfo.InvariantCulture) switch + { + SqlConnectionString.NETLIB.NamedPipes => NamedPipes, + SqlConnectionString.NETLIB.SharedMemory => SharedMemory, + SqlConnectionString.NETLIB.TCPIP => TCPIP, + SqlConnectionString.NETLIB.VIA => VIA, + _ => svalue, + }; } - SetValue(DbConnectionStringKeywords.ConnectRetryCount, value); - _connectRetryCount = value; + return base.ConvertTo(context, culture, value, destinationType); } - } - /// - [DisplayNameAttribute(DbConnectionStringKeywords.ConnectRetryInterval)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_ConnectionResilency)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_ConnectRetryInterval)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public int ConnectRetryInterval - { - get { return _connectRetryInterval; } - set + public override bool GetStandardValuesSupported(ITypeDescriptorContext context) => true; + + public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) => false; + + public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) { - if ((value < 1) || (value > 60)) + StandardValuesCollection standardValues = _standardValues; + if (null == standardValues) { - throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.ConnectRetryInterval); + string[] names = new string[] { + NamedPipes, + SharedMemory, + TCPIP, + VIA, + }; + standardValues = new StandardValuesCollection(names); + _standardValues = standardValues; } - SetValue(DbConnectionStringKeywords.ConnectRetryInterval, value); - _connectRetryInterval = value; + return standardValues; } } +#else + private static readonly string[] s_notSupportedKeywords = new string[DeprecatedKeywordsCount] { + DbConnectionStringKeywords.ConnectionReset, + DbConnectionStringKeywords.ContextConnection, + DbConnectionStringKeywords.TransactionBinding, + }; + + private static readonly string[] s_notSupportedNetworkLibraryKeywords = new string[] { + DbConnectionStringKeywords.NetworkLibrary, + DbConnectionStringSynonyms.NET, + DbConnectionStringSynonyms.NETWORK + }; +#endif + #endregion //Private Methods - /// - [DisplayNameAttribute(DbConnectionStringKeywords.MinPoolSize)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Pooling)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_MinPoolSize)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public int MinPoolSize + #region Public APIs + /// + public SqlConnectionStringBuilder() : this(null) { - get { return _minPoolSize; } - set - { - if (value < 0) - { - throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.MinPoolSize); - } - SetValue(DbConnectionStringKeywords.MinPoolSize, value); - _minPoolSize = value; - } } - /// - [DisplayNameAttribute(DbConnectionStringKeywords.MultipleActiveResultSets)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Advanced)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_MultipleActiveResultSets)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public bool MultipleActiveResultSets + /// + public SqlConnectionStringBuilder(string connectionString) : base() { - get { return _multipleActiveResultSets; } - set + if (!string.IsNullOrEmpty(connectionString)) { - SetValue(DbConnectionStringKeywords.MultipleActiveResultSets, value); - _multipleActiveResultSets = value; + ConnectionString = connectionString; } } - /// - [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", Justification = "Reviewed and Approved by UE")] - [DisplayNameAttribute(DbConnectionStringKeywords.MultiSubnetFailover)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Source)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_MultiSubnetFailover)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public bool MultiSubnetFailover + /// + public override object this[string keyword] { - get { return _multiSubnetFailover; } - set + get { - SetValue(DbConnectionStringKeywords.MultiSubnetFailover, value); - _multiSubnetFailover = value; + Keywords index = GetIndex(keyword); + return GetAt(index); } - } - - /// - [DisplayNameAttribute(DbConnectionStringKeywords.PacketSize)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Advanced)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_PacketSize)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public int PacketSize - { - get { return _packetSize; } set { - if ((value < TdsEnums.MIN_PACKET_SIZE) || (TdsEnums.MAX_PACKET_SIZE < value)) + if (null != value) { - throw SQL.InvalidPacketSizeValue(); - } - SetValue(DbConnectionStringKeywords.PacketSize, value); - _packetSize = value; - } - } + Keywords index = GetIndex(keyword); + switch (index) + { + case Keywords.ApplicationIntent: + ApplicationIntent = ConvertToApplicationIntent(keyword, value); + break; + case Keywords.ApplicationName: + ApplicationName = ConvertToString(value); + break; + case Keywords.AttachDBFilename: + AttachDBFilename = ConvertToString(value); + break; + case Keywords.CurrentLanguage: + CurrentLanguage = ConvertToString(value); + break; + case Keywords.DataSource: + DataSource = ConvertToString(value); + break; + case Keywords.FailoverPartner: + FailoverPartner = ConvertToString(value); + break; + case Keywords.InitialCatalog: + InitialCatalog = ConvertToString(value); + break; + case Keywords.Password: + Password = ConvertToString(value); + break; + case Keywords.UserID: + UserID = ConvertToString(value); + break; + case Keywords.TransactionBinding: + TransactionBinding = ConvertToString(value); + break; + case Keywords.TypeSystemVersion: + TypeSystemVersion = ConvertToString(value); + break; + case Keywords.WorkstationID: + WorkstationID = ConvertToString(value); + break; - /// - [DisplayNameAttribute(DbConnectionStringKeywords.Password)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_Password)] - [PasswordPropertyTextAttribute(true)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public string Password - { - get { return _password; } - set - { - SetValue(DbConnectionStringKeywords.Password, value); - _password = value; - } - } + case Keywords.CommandTimeout: + CommandTimeout = ConvertToInt32(value); + break; + case Keywords.ConnectTimeout: + ConnectTimeout = ConvertToInt32(value); + break; + case Keywords.LoadBalanceTimeout: + LoadBalanceTimeout = ConvertToInt32(value); + break; + case Keywords.MaxPoolSize: + MaxPoolSize = ConvertToInt32(value); + break; + case Keywords.MinPoolSize: + MinPoolSize = ConvertToInt32(value); + break; + case Keywords.PacketSize: + PacketSize = ConvertToInt32(value); + break; - /// - [DisplayNameAttribute(DbConnectionStringKeywords.PersistSecurityInfo)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_PersistSecurityInfo)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public bool PersistSecurityInfo - { - get { return _persistSecurityInfo; } - set - { - SetValue(DbConnectionStringKeywords.PersistSecurityInfo, value); - _persistSecurityInfo = value; + case Keywords.IntegratedSecurity: + IntegratedSecurity = ConvertToIntegratedSecurity(value); + break; + case Keywords.Authentication: + Authentication = ConvertToAuthenticationType(keyword, value); + break; + case Keywords.ColumnEncryptionSetting: + ColumnEncryptionSetting = ConvertToColumnEncryptionSetting(keyword, value); + break; + case Keywords.EnclaveAttestationUrl: + EnclaveAttestationUrl = ConvertToString(value); + break; + case Keywords.AttestationProtocol: + AttestationProtocol = ConvertToAttestationProtocol(keyword, value); + break; + case Keywords.IPAddressPreference: + IPAddressPreference = ConvertToIPAddressPreference(keyword, value); + break; + case Keywords.PoolBlockingPeriod: + PoolBlockingPeriod = ConvertToPoolBlockingPeriod(keyword, value); + break; + case Keywords.Encrypt: + Encrypt = ConvertToBoolean(value); + break; + case Keywords.TrustServerCertificate: + TrustServerCertificate = ConvertToBoolean(value); + break; + case Keywords.Enlist: + Enlist = ConvertToBoolean(value); + break; + case Keywords.MultipleActiveResultSets: + MultipleActiveResultSets = ConvertToBoolean(value); + break; + case Keywords.MultiSubnetFailover: + MultiSubnetFailover = ConvertToBoolean(value); + break; + case Keywords.PersistSecurityInfo: + PersistSecurityInfo = ConvertToBoolean(value); + break; + case Keywords.Pooling: + Pooling = ConvertToBoolean(value); + break; + case Keywords.Replication: + Replication = ConvertToBoolean(value); + break; + case Keywords.UserInstance: + UserInstance = ConvertToBoolean(value); + break; + case Keywords.ConnectRetryCount: + ConnectRetryCount = ConvertToInt32(value); + break; + case Keywords.ConnectRetryInterval: + ConnectRetryInterval = ConvertToInt32(value); + break; +#if NETFRAMEWORK +#pragma warning disable 618 // Obsolete properties + case Keywords.ConnectionReset: + ConnectionReset = ConvertToBoolean(value); + break; + case Keywords.ContextConnection: + ContextConnection = ConvertToBoolean(value); + break; +#pragma warning restore 618 + case Keywords.NetworkLibrary: + NetworkLibrary = ConvertToString(value); + break; + case Keywords.TransparentNetworkIPResolution: + TransparentNetworkIPResolution = ConvertToBoolean(value); + break; +#if ADONET_CERT_AUTH + case Keywords.Certificate: + Certificate = ConvertToString(value); + break; +#endif +#endif + default: + Debug.Fail("unexpected keyword"); + throw UnsupportedKeyword(keyword); + } + } + else + { + Remove(keyword); + } } } - /// - [DisplayName(DbConnectionStringKeywords.PoolBlockingPeriod)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Pooling)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_PoolBlockingPeriod)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public PoolBlockingPeriod PoolBlockingPeriod + /// + [DisplayName(DbConnectionStringKeywords.ApplicationIntent)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Initialization)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_ApplicationIntent)] + [RefreshProperties(RefreshProperties.All)] + public ApplicationIntent ApplicationIntent { - get { return _poolBlockingPeriod; } + get { return _applicationIntent; } set { - if (!DbConnectionStringBuilderUtil.IsValidPoolBlockingPeriodValue(value)) + if (!DbConnectionStringBuilderUtil.IsValidApplicationIntentValue(value)) { - throw ADP.InvalidEnumerationValue(typeof(PoolBlockingPeriod), (int)value); + throw ADP.InvalidEnumerationValue(typeof(ApplicationIntent), (int)value); } - SetPoolBlockingPeriodValue(value); - _poolBlockingPeriod = value; + SetApplicationIntentValue(value); + _applicationIntent = value; } } - /// - [DisplayNameAttribute(DbConnectionStringKeywords.Pooling)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Pooling)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_Pooling)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public bool Pooling + /// + [DisplayName(DbConnectionStringKeywords.ApplicationName)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Context)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_ApplicationName)] + [RefreshProperties(RefreshProperties.All)] + public string ApplicationName { - get { return _pooling; } + get { return _applicationName; } set { - SetValue(DbConnectionStringKeywords.Pooling, value); - _pooling = value; + SetValue(DbConnectionStringKeywords.ApplicationName, value); + _applicationName = value; } } - /// - [DisplayNameAttribute(DbConnectionStringKeywords.Replication)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Replication)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_Replication)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public bool Replication + /// + [DisplayName(DbConnectionStringKeywords.AttachDBFilename)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Source)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_AttachDBFilename)] + [Editor("System.Windows.Forms.Design.FileNameEditor, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")] + [RefreshProperties(RefreshProperties.All)] + public string AttachDBFilename { - get { return _replication; } + get { return _attachDBFilename; } set { - SetValue(DbConnectionStringKeywords.Replication, value); - _replication = value; + SetValue(DbConnectionStringKeywords.AttachDBFilename, value); + _attachDBFilename = value; } } - /// - [DisplayNameAttribute(DbConnectionStringKeywords.TransactionBinding)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Advanced)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_TransactionBinding)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public string TransactionBinding + /// + [DisplayName(DbConnectionStringKeywords.CommandTimeout)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Initialization)] + [ResDescription(StringsHelper.ResourceNames.DbCommand_CommandTimeout)] + [RefreshProperties(RefreshProperties.All)] + public int CommandTimeout { - get { return _transactionBinding; } + get { return _commandTimeout; } set { - SetValue(DbConnectionStringKeywords.TransactionBinding, value); - _transactionBinding = value; + if (value < 0) + { + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.CommandTimeout); + } + SetValue(DbConnectionStringKeywords.CommandTimeout, value); + _commandTimeout = value; } } - /// - [DisplayNameAttribute(DbConnectionStringKeywords.TypeSystemVersion)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Advanced)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_TypeSystemVersion)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public string TypeSystemVersion + /// + [DisplayName(DbConnectionStringKeywords.ConnectTimeout)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Initialization)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_ConnectTimeout)] + [RefreshProperties(RefreshProperties.All)] + public int ConnectTimeout { - get { return _typeSystemVersion; } + get { return _connectTimeout; } set { - SetValue(DbConnectionStringKeywords.TypeSystemVersion, value); - _typeSystemVersion = value; + if (value < 0) + { + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.ConnectTimeout); + } + SetValue(DbConnectionStringKeywords.ConnectTimeout, value); + _connectTimeout = value; } } - /// - [DisplayNameAttribute(DbConnectionStringKeywords.UserID)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_UserID)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public string UserID + /// + [DisplayName(DbConnectionStringKeywords.CurrentLanguage)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Initialization)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_CurrentLanguage)] + [RefreshProperties(RefreshProperties.All)] + public string CurrentLanguage { - get { return _userID; } + get { return _currentLanguage; } set { - SetValue(DbConnectionStringKeywords.UserID, value); - _userID = value; + SetValue(DbConnectionStringKeywords.CurrentLanguage, value); + _currentLanguage = value; } } - /// - [DisplayNameAttribute(DbConnectionStringKeywords.UserInstance)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Source)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_UserInstance)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public bool UserInstance + /// + [DisplayName(DbConnectionStringKeywords.DataSource)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Source)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_DataSource)] + [RefreshProperties(RefreshProperties.All)] +#if NETFRAMEWORK + [TypeConverter(typeof(SqlDataSourceConverter))] +#endif + public string DataSource { - get { return _userInstance; } + get { return _dataSource; } set { - SetValue(DbConnectionStringKeywords.UserInstance, value); - _userInstance = value; + SetValue(DbConnectionStringKeywords.DataSource, value); + _dataSource = value; } } - /// - [DisplayNameAttribute(DbConnectionStringKeywords.WorkstationID)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Context)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_WorkstationID)] - [RefreshPropertiesAttribute(RefreshProperties.All)] - public string WorkstationID + /// + [DisplayName(DbConnectionStringKeywords.Encrypt)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Security)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_Encrypt)] + [RefreshProperties(RefreshProperties.All)] + public bool Encrypt { - get { return _workstationID; } + get { return _encrypt; } set { - SetValue(DbConnectionStringKeywords.WorkstationID, value); - _workstationID = value; + SetValue(DbConnectionStringKeywords.Encrypt, value); + _encrypt = value; } } - /// - public override bool IsFixedSize => true; - - /// - public override ICollection Keys => new System.Collections.ObjectModel.ReadOnlyCollection(s_validKeywords); - - /// - public override ICollection Values + /// + [DisplayName(DbConnectionStringKeywords.ColumnEncryptionSetting)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Security)] + [ResDescription(StringsHelper.ResourceNames.TCE_DbConnectionString_ColumnEncryptionSetting)] + [RefreshProperties(RefreshProperties.All)] + public SqlConnectionColumnEncryptionSetting ColumnEncryptionSetting { - get + get { return _columnEncryptionSetting; } + set { - // written this way so if the ordering of Keywords & _validKeywords changes - // this is one less place to maintain - object[] values = new object[s_validKeywords.Length]; - for (int i = 0; i < values.Length; ++i) + if (!DbConnectionStringBuilderUtil.IsValidColumnEncryptionSetting(value)) { - values[i] = GetAt((Keywords)i); + throw ADP.InvalidEnumerationValue(typeof(SqlConnectionColumnEncryptionSetting), (int)value); } - return new System.Collections.ObjectModel.ReadOnlyCollection(values); + + SetColumnEncryptionSettingValue(value); + _columnEncryptionSetting = value; } } - /// - public override void Clear() + /// + [DisplayName(DbConnectionStringKeywords.EnclaveAttestationUrl)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Security)] + [ResDescription(StringsHelper.ResourceNames.TCE_DbConnectionString_EnclaveAttestationUrl)] + [RefreshProperties(RefreshProperties.All)] + public string EnclaveAttestationUrl { - base.Clear(); - for (int i = 0; i < s_validKeywords.Length; ++i) + get { return _enclaveAttestationUrl; } + set { - Reset((Keywords)i); + SetValue(DbConnectionStringKeywords.EnclaveAttestationUrl, value); + _enclaveAttestationUrl = value; } } - /// - public override bool ContainsKey(string keyword) - { - ADP.CheckArgumentNull(keyword, nameof(keyword)); - return s_keywords.ContainsKey(keyword); - } - - private static bool ConvertToBoolean(object value) - { - return DbConnectionStringBuilderUtil.ConvertToBoolean(value); - } - private static int ConvertToInt32(object value) - { - return DbConnectionStringBuilderUtil.ConvertToInt32(value); - } - private static bool ConvertToIntegratedSecurity(object value) - { - return DbConnectionStringBuilderUtil.ConvertToIntegratedSecurity(value); - } - private static SqlAuthenticationMethod ConvertToAuthenticationType(string keyword, object value) - { - return DbConnectionStringBuilderUtil.ConvertToAuthenticationType(keyword, value); - } - private static string ConvertToString(object value) - { - return DbConnectionStringBuilderUtil.ConvertToString(value); - } - private static ApplicationIntent ConvertToApplicationIntent(string keyword, object value) - { - return DbConnectionStringBuilderUtil.ConvertToApplicationIntent(keyword, value); - } - - /// - /// Convert to SqlConnectionColumnEncryptionSetting. - /// - /// - /// - private static SqlConnectionColumnEncryptionSetting ConvertToColumnEncryptionSetting(string keyword, object value) - { - return DbConnectionStringBuilderUtil.ConvertToColumnEncryptionSetting(keyword, value); - } - - /// - /// Convert to SqlConnectionAttestationProtocol - /// - /// - /// - private static SqlConnectionAttestationProtocol ConvertToAttestationProtocol(string keyword, object value) - { - return DbConnectionStringBuilderUtil.ConvertToAttestationProtocol(keyword, value); - } - - /// - /// Convert to SqlConnectionIPAddressPreference - /// - /// - /// - private static SqlConnectionIPAddressPreference ConvertToIPAddressPreference(string keyword, object value) - => DbConnectionStringBuilderUtil.ConvertToIPAddressPreference(keyword, value); - - private static PoolBlockingPeriod ConvertToPoolBlockingPeriod(string keyword, object value) - => DbConnectionStringBuilderUtil.ConvertToPoolBlockingPeriod(keyword, value); - - private object GetAt(Keywords index) + /// + [DisplayName(DbConnectionStringKeywords.AttestationProtocol)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Security)] + [ResDescription(StringsHelper.ResourceNames.TCE_DbConnectionString_AttestationProtocol)] + [RefreshProperties(RefreshProperties.All)] + public SqlConnectionAttestationProtocol AttestationProtocol { - switch (index) + get { return _attestationProtocol; } + set { - case Keywords.ApplicationIntent: - return ApplicationIntent; - case Keywords.ApplicationName: - return ApplicationName; - case Keywords.AttachDBFilename: - return AttachDBFilename; - case Keywords.PoolBlockingPeriod: - return PoolBlockingPeriod; - case Keywords.CommandTimeout: - return CommandTimeout; - case Keywords.ConnectTimeout: - return ConnectTimeout; - case Keywords.CurrentLanguage: - return CurrentLanguage; - case Keywords.DataSource: - return DataSource; - case Keywords.Encrypt: - return Encrypt; - case Keywords.Enlist: - return Enlist; - case Keywords.FailoverPartner: - return FailoverPartner; - case Keywords.InitialCatalog: - return InitialCatalog; - case Keywords.IntegratedSecurity: - return IntegratedSecurity; - case Keywords.LoadBalanceTimeout: - return LoadBalanceTimeout; - case Keywords.MultipleActiveResultSets: - return MultipleActiveResultSets; - case Keywords.MaxPoolSize: - return MaxPoolSize; - case Keywords.MinPoolSize: - return MinPoolSize; - case Keywords.MultiSubnetFailover: - return MultiSubnetFailover; - // case Keywords.NamedConnection: return NamedConnection; - case Keywords.PacketSize: - return PacketSize; - case Keywords.Password: - return Password; - case Keywords.PersistSecurityInfo: - return PersistSecurityInfo; - case Keywords.Pooling: - return Pooling; - case Keywords.Replication: - return Replication; - case Keywords.TransactionBinding: - return TransactionBinding; - case Keywords.TrustServerCertificate: - return TrustServerCertificate; - case Keywords.TypeSystemVersion: - return TypeSystemVersion; - case Keywords.UserID: - return UserID; - case Keywords.UserInstance: - return UserInstance; - case Keywords.WorkstationID: - return WorkstationID; - case Keywords.ConnectRetryCount: - return ConnectRetryCount; - case Keywords.ConnectRetryInterval: - return ConnectRetryInterval; - case Keywords.Authentication: - return Authentication; - case Keywords.ColumnEncryptionSetting: - return ColumnEncryptionSetting; - case Keywords.EnclaveAttestationUrl: - return EnclaveAttestationUrl; - case Keywords.AttestationProtocol: - return AttestationProtocol; - case Keywords.IPAddressPreference: - return IPAddressPreference; + if (!DbConnectionStringBuilderUtil.IsValidAttestationProtocol(value)) + { + throw ADP.InvalidEnumerationValue(typeof(SqlConnectionAttestationProtocol), (int)value); + } + + SetAttestationProtocolValue(value); + _attestationProtocol = value; + } + } + + /// + [DisplayName(DbConnectionStringKeywords.IPAddressPreference)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Security)] + [ResDescription(StringsHelper.ResourceNames.TCE_DbConnectionString_IPAddressPreference)] + [RefreshProperties(RefreshProperties.All)] + public SqlConnectionIPAddressPreference IPAddressPreference + { + get => _ipAddressPreference; + set + { + if (!DbConnectionStringBuilderUtil.IsValidIPAddressPreference(value)) + { + throw ADP.InvalidEnumerationValue(typeof(SqlConnectionIPAddressPreference), (int)value); + } + + SetIPAddressPreferenceValue(value); + _ipAddressPreference = value; + } + } + + /// + [DisplayName(DbConnectionStringKeywords.TrustServerCertificate)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Security)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_TrustServerCertificate)] + [RefreshProperties(RefreshProperties.All)] + public bool TrustServerCertificate + { + get { return _trustServerCertificate; } + set + { + SetValue(DbConnectionStringKeywords.TrustServerCertificate, value); + _trustServerCertificate = value; + } + } + + /// + [DisplayName(DbConnectionStringKeywords.Enlist)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Pooling)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_Enlist)] + [RefreshProperties(RefreshProperties.All)] + public bool Enlist + { + get { return _enlist; } + set + { + SetValue(DbConnectionStringKeywords.Enlist, value); + _enlist = value; + } + } + /// + [DisplayName(DbConnectionStringKeywords.FailoverPartner)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Source)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_FailoverPartner)] + [RefreshProperties(RefreshProperties.All)] #if NETFRAMEWORK -#pragma warning disable 618 // Obsolete properties - case Keywords.ConnectionReset: - return ConnectionReset; - case Keywords.ContextConnection: - return ContextConnection; -#pragma warning restore 618 - case Keywords.TransparentNetworkIPResolution: - return TransparentNetworkIPResolution; - case Keywords.NetworkLibrary: - return NetworkLibrary; -#if ADONET_CERT_AUTH - case Keywords.Certificate: return Certificate; -#endif + [TypeConverter(typeof(SqlDataSourceConverter))] #endif - default: - Debug.Fail("unexpected keyword"); - throw UnsupportedKeyword(s_validKeywords[(int)index]); + public string FailoverPartner + { + get { return _failoverPartner; } + set + { + SetValue(DbConnectionStringKeywords.FailoverPartner, value); + _failoverPartner = value; } } - private Keywords GetIndex(string keyword) + /// + [DisplayName(DbConnectionStringKeywords.InitialCatalog)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Source)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_InitialCatalog)] + [RefreshProperties(RefreshProperties.All)] + [TypeConverter(typeof(SqlInitialCatalogConverter))] + public string InitialCatalog { - ADP.CheckArgumentNull(keyword, nameof(keyword)); - Keywords index; - if (s_keywords.TryGetValue(keyword, out index)) + get { return _initialCatalog; } + set { - return index; + SetValue(DbConnectionStringKeywords.InitialCatalog, value); + _initialCatalog = value; } + } - throw UnsupportedKeyword(keyword); + /// + [DisplayName(DbConnectionStringKeywords.IntegratedSecurity)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Security)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_IntegratedSecurity)] + [RefreshProperties(RefreshProperties.All)] + public bool IntegratedSecurity + { + get { return _integratedSecurity; } + set + { + SetValue(DbConnectionStringKeywords.IntegratedSecurity, value); + _integratedSecurity = value; + } } - /// - public override bool Remove(string keyword) + /// + [DisplayName(DbConnectionStringKeywords.Authentication)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Security)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_Authentication)] + [RefreshProperties(RefreshProperties.All)] + public SqlAuthenticationMethod Authentication { - ADP.CheckArgumentNull(keyword, nameof(keyword)); - Keywords index; - if (s_keywords.TryGetValue(keyword, out index)) + get { return _authentication; } + set { - if (base.Remove(s_validKeywords[(int)index])) + if (!DbConnectionStringBuilderUtil.IsValidAuthenticationTypeValue(value)) { - Reset(index); - return true; + throw ADP.InvalidEnumerationValue(typeof(SqlAuthenticationMethod), (int)value); } + + SetAuthenticationValue(value); + _authentication = value; } - return false; } - private void Reset(Keywords index) + /// + [DisplayName(DbConnectionStringKeywords.LoadBalanceTimeout)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Pooling)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_LoadBalanceTimeout)] + [RefreshProperties(RefreshProperties.All)] + public int LoadBalanceTimeout { - switch (index) + get { return _loadBalanceTimeout; } + set { - case Keywords.ApplicationIntent: - _applicationIntent = DbConnectionStringDefaults.ApplicationIntent; - break; - case Keywords.ApplicationName: - _applicationName = DbConnectionStringDefaults.ApplicationName; - break; - case Keywords.AttachDBFilename: - _attachDBFilename = DbConnectionStringDefaults.AttachDBFilename; - break; - case Keywords.Authentication: - _authentication = DbConnectionStringDefaults.Authentication; - break; - case Keywords.PoolBlockingPeriod: - _poolBlockingPeriod = DbConnectionStringDefaults.PoolBlockingPeriod; - break; - case Keywords.CommandTimeout: - _commandTimeout = DbConnectionStringDefaults.CommandTimeout; - break; - case Keywords.ConnectTimeout: - _connectTimeout = DbConnectionStringDefaults.ConnectTimeout; - break; - case Keywords.CurrentLanguage: - _currentLanguage = DbConnectionStringDefaults.CurrentLanguage; - break; - case Keywords.DataSource: - _dataSource = DbConnectionStringDefaults.DataSource; - break; - case Keywords.Encrypt: - _encrypt = DbConnectionStringDefaults.Encrypt; - break; - case Keywords.Enlist: - _enlist = DbConnectionStringDefaults.Enlist; - break; - case Keywords.FailoverPartner: - _failoverPartner = DbConnectionStringDefaults.FailoverPartner; - break; - case Keywords.InitialCatalog: - _initialCatalog = DbConnectionStringDefaults.InitialCatalog; - break; - case Keywords.IntegratedSecurity: - _integratedSecurity = DbConnectionStringDefaults.IntegratedSecurity; - break; - case Keywords.LoadBalanceTimeout: - _loadBalanceTimeout = DbConnectionStringDefaults.LoadBalanceTimeout; - break; - case Keywords.MultipleActiveResultSets: - _multipleActiveResultSets = DbConnectionStringDefaults.MultipleActiveResultSets; - break; - case Keywords.MaxPoolSize: - _maxPoolSize = DbConnectionStringDefaults.MaxPoolSize; - break; - case Keywords.MinPoolSize: - _minPoolSize = DbConnectionStringDefaults.MinPoolSize; - break; - case Keywords.MultiSubnetFailover: - _multiSubnetFailover = DbConnectionStringDefaults.MultiSubnetFailover; - break; - case Keywords.PacketSize: - _packetSize = DbConnectionStringDefaults.PacketSize; - break; - case Keywords.Password: - _password = DbConnectionStringDefaults.Password; - break; - case Keywords.PersistSecurityInfo: - _persistSecurityInfo = DbConnectionStringDefaults.PersistSecurityInfo; - break; - case Keywords.Pooling: - _pooling = DbConnectionStringDefaults.Pooling; - break; - case Keywords.ConnectRetryCount: - _connectRetryCount = DbConnectionStringDefaults.ConnectRetryCount; - break; - case Keywords.ConnectRetryInterval: - _connectRetryInterval = DbConnectionStringDefaults.ConnectRetryInterval; - break; - case Keywords.Replication: - _replication = DbConnectionStringDefaults.Replication; - break; - case Keywords.TransactionBinding: - _transactionBinding = DbConnectionStringDefaults.TransactionBinding; - break; - case Keywords.TrustServerCertificate: - _trustServerCertificate = DbConnectionStringDefaults.TrustServerCertificate; - break; - case Keywords.TypeSystemVersion: - _typeSystemVersion = DbConnectionStringDefaults.TypeSystemVersion; - break; - case Keywords.UserID: - _userID = DbConnectionStringDefaults.UserID; - break; - case Keywords.UserInstance: - _userInstance = DbConnectionStringDefaults.UserInstance; - break; - case Keywords.WorkstationID: - _workstationID = DbConnectionStringDefaults.WorkstationID; - break; - case Keywords.ColumnEncryptionSetting: - _columnEncryptionSetting = DbConnectionStringDefaults.ColumnEncryptionSetting; - break; - case Keywords.EnclaveAttestationUrl: - _enclaveAttestationUrl = DbConnectionStringDefaults.EnclaveAttestationUrl; - break; - case Keywords.AttestationProtocol: - _attestationProtocol = DbConnectionStringDefaults.AttestationProtocol; - break; - case Keywords.IPAddressPreference: - _ipAddressPreference = DbConnectionStringDefaults.IPAddressPreference; - break; -#if NETFRAMEWORK - case Keywords.ConnectionReset: - _connectionReset = DbConnectionStringDefaults.ConnectionReset; - break; - case Keywords.ContextConnection: - _contextConnection = DbConnectionStringDefaults.ContextConnection; - break; - case Keywords.TransparentNetworkIPResolution: - _transparentNetworkIPResolution = DbConnectionStringDefaults.TransparentNetworkIPResolution; - break; - case Keywords.NetworkLibrary: - _networkLibrary = DbConnectionStringDefaults.NetworkLibrary; - break; -#if ADONET_CERT_AUTH - case Keywords.Certificate: - _certificate = DbConnectionStringDefaults.Certificate; - break; -#endif -#endif - default: - Debug.Fail("unexpected keyword"); - throw UnsupportedKeyword(s_validKeywords[(int)index]); + if (value < 0) + { + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.LoadBalanceTimeout); + } + SetValue(DbConnectionStringKeywords.LoadBalanceTimeout, value); + _loadBalanceTimeout = value; + } + } + + /// + [DisplayName(DbConnectionStringKeywords.MaxPoolSize)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Pooling)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_MaxPoolSize)] + [RefreshProperties(RefreshProperties.All)] + public int MaxPoolSize + { + get { return _maxPoolSize; } + set + { + if (value < 1) + { + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.MaxPoolSize); + } + SetValue(DbConnectionStringKeywords.MaxPoolSize, value); + _maxPoolSize = value; } } - private void SetValue(string keyword, bool value) + /// + [DisplayName(DbConnectionStringKeywords.ConnectRetryCount)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_ConnectionResilency)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_ConnectRetryCount)] + [RefreshProperties(RefreshProperties.All)] + public int ConnectRetryCount { - base[keyword] = value.ToString(); + get { return _connectRetryCount; } + set + { + if ((value < 0) || (value > 255)) + { + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.ConnectRetryCount); + } + SetValue(DbConnectionStringKeywords.ConnectRetryCount, value); + _connectRetryCount = value; + } } - private void SetValue(string keyword, int value) + + /// + [DisplayName(DbConnectionStringKeywords.ConnectRetryInterval)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_ConnectionResilency)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_ConnectRetryInterval)] + [RefreshProperties(RefreshProperties.All)] + public int ConnectRetryInterval { - base[keyword] = value.ToString((System.IFormatProvider)null); + get { return _connectRetryInterval; } + set + { + if ((value < 1) || (value > 60)) + { + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.ConnectRetryInterval); + } + SetValue(DbConnectionStringKeywords.ConnectRetryInterval, value); + _connectRetryInterval = value; + } } - private void SetValue(string keyword, string value) + + + /// + [DisplayName(DbConnectionStringKeywords.MinPoolSize)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Pooling)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_MinPoolSize)] + [RefreshProperties(RefreshProperties.All)] + public int MinPoolSize { - ADP.CheckArgumentNull(value, keyword); - base[keyword] = value; + get { return _minPoolSize; } + set + { + if (value < 0) + { + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.MinPoolSize); + } + SetValue(DbConnectionStringKeywords.MinPoolSize, value); + _minPoolSize = value; + } } - private void SetApplicationIntentValue(ApplicationIntent value) + + /// + [DisplayName(DbConnectionStringKeywords.MultipleActiveResultSets)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Advanced)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_MultipleActiveResultSets)] + [RefreshProperties(RefreshProperties.All)] + public bool MultipleActiveResultSets { - Debug.Assert(DbConnectionStringBuilderUtil.IsValidApplicationIntentValue(value), "invalid value for ApplicationIntent"); - base[DbConnectionStringKeywords.ApplicationIntent] = DbConnectionStringBuilderUtil.ApplicationIntentToString(value); + get { return _multipleActiveResultSets; } + set + { + SetValue(DbConnectionStringKeywords.MultipleActiveResultSets, value); + _multipleActiveResultSets = value; + } } - private void SetColumnEncryptionSettingValue(SqlConnectionColumnEncryptionSetting value) + + /// + [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", Justification = "Reviewed and Approved by UE")] + [DisplayName(DbConnectionStringKeywords.MultiSubnetFailover)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Source)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_MultiSubnetFailover)] + [RefreshProperties(RefreshProperties.All)] + public bool MultiSubnetFailover { - Debug.Assert(DbConnectionStringBuilderUtil.IsValidColumnEncryptionSetting(value), "Invalid value for SqlConnectionColumnEncryptionSetting"); - base[DbConnectionStringKeywords.ColumnEncryptionSetting] = DbConnectionStringBuilderUtil.ColumnEncryptionSettingToString(value); + get { return _multiSubnetFailover; } + set + { + SetValue(DbConnectionStringKeywords.MultiSubnetFailover, value); + _multiSubnetFailover = value; + } } - private void SetAttestationProtocolValue(SqlConnectionAttestationProtocol value) + /// + [DisplayName(DbConnectionStringKeywords.PacketSize)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Advanced)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_PacketSize)] + [RefreshProperties(RefreshProperties.All)] + public int PacketSize { - Debug.Assert(DbConnectionStringBuilderUtil.IsValidAttestationProtocol(value), "Invalid value for SqlConnectionAttestationProtocol"); - base[DbConnectionStringKeywords.AttestationProtocol] = DbConnectionStringBuilderUtil.AttestationProtocolToString(value); + get { return _packetSize; } + set + { + if ((value < TdsEnums.MIN_PACKET_SIZE) || (TdsEnums.MAX_PACKET_SIZE < value)) + { + throw SQL.InvalidPacketSizeValue(); + } + SetValue(DbConnectionStringKeywords.PacketSize, value); + _packetSize = value; + } } - private void SetIPAddressPreferenceValue(SqlConnectionIPAddressPreference value) + /// + [DisplayName(DbConnectionStringKeywords.Password)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Security)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_Password)] + [PasswordPropertyText(true)] + [RefreshProperties(RefreshProperties.All)] + public string Password { - Debug.Assert(DbConnectionStringBuilderUtil.IsValidIPAddressPreference(value), "Invalid value for SqlConnectionIPAddressPreference"); - base[DbConnectionStringKeywords.IPAddressPreference] = DbConnectionStringBuilderUtil.IPAddressPreferenceToString(value); + get { return _password; } + set + { + SetValue(DbConnectionStringKeywords.Password, value); + _password = value; + } } - private void SetAuthenticationValue(SqlAuthenticationMethod value) + /// + [DisplayName(DbConnectionStringKeywords.PersistSecurityInfo)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Security)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_PersistSecurityInfo)] + [RefreshProperties(RefreshProperties.All)] + public bool PersistSecurityInfo { - Debug.Assert(DbConnectionStringBuilderUtil.IsValidAuthenticationTypeValue(value), "Invalid value for AuthenticationType"); - base[DbConnectionStringKeywords.Authentication] = DbConnectionStringBuilderUtil.AuthenticationTypeToString(value); + get { return _persistSecurityInfo; } + set + { + SetValue(DbConnectionStringKeywords.PersistSecurityInfo, value); + _persistSecurityInfo = value; + } } - private void SetPoolBlockingPeriodValue(PoolBlockingPeriod value) + /// + [DisplayName(DbConnectionStringKeywords.PoolBlockingPeriod)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Pooling)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_PoolBlockingPeriod)] + [RefreshProperties(RefreshProperties.All)] + public PoolBlockingPeriod PoolBlockingPeriod { - Debug.Assert(DbConnectionStringBuilderUtil.IsValidPoolBlockingPeriodValue(value), "Invalid value for PoolBlockingPeriod"); - base[DbConnectionStringKeywords.PoolBlockingPeriod] = DbConnectionStringBuilderUtil.PoolBlockingPeriodToString(value); + get { return _poolBlockingPeriod; } + set + { + if (!DbConnectionStringBuilderUtil.IsValidPoolBlockingPeriodValue(value)) + { + throw ADP.InvalidEnumerationValue(typeof(PoolBlockingPeriod), (int)value); + } + + SetPoolBlockingPeriodValue(value); + _poolBlockingPeriod = value; + } } - /// - public override bool ShouldSerialize(string keyword) + /// + [DisplayName(DbConnectionStringKeywords.Pooling)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Pooling)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_Pooling)] + [RefreshProperties(RefreshProperties.All)] + public bool Pooling { - ADP.CheckArgumentNull(keyword, nameof(keyword)); - Keywords index; - return s_keywords.TryGetValue(keyword, out index) && base.ShouldSerialize(s_validKeywords[(int)index]); + get { return _pooling; } + set + { + SetValue(DbConnectionStringKeywords.Pooling, value); + _pooling = value; + } } - /// - public override bool TryGetValue(string keyword, out object value) + /// + [DisplayName(DbConnectionStringKeywords.Replication)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Replication)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_Replication)] + [RefreshProperties(RefreshProperties.All)] + public bool Replication { - Keywords index; - if (s_keywords.TryGetValue(keyword, out index)) + get { return _replication; } + set { - value = GetAt(index); - return true; + SetValue(DbConnectionStringKeywords.Replication, value); + _replication = value; } - value = null; - return false; } - private Exception UnsupportedKeyword(string keyword) + /// + [DisplayName(DbConnectionStringKeywords.TransactionBinding)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Advanced)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_TransactionBinding)] + [RefreshProperties(RefreshProperties.All)] + public string TransactionBinding { -#if !NETFRAMEWORK - if (s_notSupportedKeywords.Contains(keyword, StringComparer.OrdinalIgnoreCase)) + get { return _transactionBinding; } + set { - return SQL.UnsupportedKeyword(keyword); + SetValue(DbConnectionStringKeywords.TransactionBinding, value); + _transactionBinding = value; } - else if (s_notSupportedNetworkLibraryKeywords.Contains(keyword, StringComparer.OrdinalIgnoreCase)) + } + + /// + [DisplayName(DbConnectionStringKeywords.TypeSystemVersion)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Advanced)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_TypeSystemVersion)] + [RefreshProperties(RefreshProperties.All)] + public string TypeSystemVersion + { + get { return _typeSystemVersion; } + set { - return SQL.NetworkLibraryKeywordNotSupported(); + SetValue(DbConnectionStringKeywords.TypeSystemVersion, value); + _typeSystemVersion = value; } - else -#endif - return ADP.KeywordNotSupported(keyword); } - private sealed class SqlInitialCatalogConverter : StringConverter + /// + [DisplayName(DbConnectionStringKeywords.UserID)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Security)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_UserID)] + [RefreshProperties(RefreshProperties.All)] + public string UserID { - // converter classes should have public ctor - public SqlInitialCatalogConverter() + get { return _userID; } + set + { + SetValue(DbConnectionStringKeywords.UserID, value); + _userID = value; + } + } + + /// + [DisplayName(DbConnectionStringKeywords.UserInstance)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Source)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_UserInstance)] + [RefreshProperties(RefreshProperties.All)] + public bool UserInstance + { + get { return _userInstance; } + set { + SetValue(DbConnectionStringKeywords.UserInstance, value); + _userInstance = value; } + } - public override bool GetStandardValuesSupported(ITypeDescriptorContext context) + /// + [DisplayName(DbConnectionStringKeywords.WorkstationID)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Context)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_WorkstationID)] + [RefreshProperties(RefreshProperties.All)] + public string WorkstationID + { + get { return _workstationID; } + set { - return GetStandardValuesSupportedInternal(context); + SetValue(DbConnectionStringKeywords.WorkstationID, value); + _workstationID = value; } + } - private bool GetStandardValuesSupportedInternal(ITypeDescriptorContext context) + /// + public override bool IsFixedSize => true; + + /// + public override ICollection Keys => new ReadOnlyCollection(s_validKeywords); + + /// + public override ICollection Values + { + get { - // Only say standard values are supported if the connection string has enough - // information set to instantiate a connection and retrieve a list of databases - bool flag = false; - if (null != context) + // written this way so if the ordering of Keywords & _validKeywords changes + // this is one less place to maintain + object[] values = new object[s_validKeywords.Length]; + for (int i = 0; i < values.Length; ++i) + { + values[i] = GetAt((Keywords)i); + } + return new ReadOnlyCollection(values); + } + } + + /// + public override void Clear() + { + base.Clear(); + for (int i = 0; i < s_validKeywords.Length; ++i) + { + Reset((Keywords)i); + } + } + + /// + public override bool ContainsKey(string keyword) + { + ADP.CheckArgumentNull(keyword, nameof(keyword)); + return s_keywords.ContainsKey(keyword); + } + + /// + public override bool Remove(string keyword) + { + ADP.CheckArgumentNull(keyword, nameof(keyword)); + Keywords index; + if (s_keywords.TryGetValue(keyword, out index)) + { + if (base.Remove(s_validKeywords[(int)index])) { - SqlConnectionStringBuilder constr = (context.Instance as SqlConnectionStringBuilder); - if (null != constr) - { - if ((0 < constr.DataSource.Length) && (constr.IntegratedSecurity || (0 < constr.UserID.Length))) - { - flag = true; - } - } + Reset(index); + return true; } - return flag; } + return false; + } - public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) - { - // Although theoretically this could be true, some people may want to just type in a name - return false; - } + /// + public override bool ShouldSerialize(string keyword) + { + ADP.CheckArgumentNull(keyword, nameof(keyword)); + Keywords index; + return s_keywords.TryGetValue(keyword, out index) && base.ShouldSerialize(s_validKeywords[(int)index]); + } - public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) + /// + public override bool TryGetValue(string keyword, out object value) + { + Keywords index; + if (s_keywords.TryGetValue(keyword, out index)) { - // There can only be standard values if the connection string is in a state that might - // be able to instantiate a connection - if (GetStandardValuesSupportedInternal(context)) - { - // Create an array list to store the database names - List values = new List(); - - try - { - SqlConnectionStringBuilder constr = (SqlConnectionStringBuilder)context.Instance; - - // Create a connection - using (SqlConnection connection = new SqlConnection()) - { - // Create a basic connection string from current property values - connection.ConnectionString = constr.ConnectionString; - - // Try to open the connection - connection.Open(); - - DataTable databaseTable = connection.GetSchema("DATABASES"); - - foreach (DataRow row in databaseTable.Rows) - { - string dbName = (string)row["database_name"]; - values.Add(dbName); - } - } - } - catch (SqlException e) - { - ADP.TraceExceptionWithoutRethrow(e); - // silently fail - } - - // Return values as a StandardValuesCollection - return new StandardValuesCollection(values); - } - return null; + value = GetAt(index); + return true; } + value = null; + return false; } #if NETFRAMEWORK @@ -1592,9 +1764,9 @@ public override StandardValuesCollection GetStandardValues(ITypeDescriptorContex [Browsable(false)] [DisplayName(DbConnectionStringKeywords.ConnectionReset)] [Obsolete("ConnectionReset has been deprecated. SqlConnection will ignore the 'connection reset' keyword and always reset the connection.")] // SQLPT 41700 - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Pooling)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_ConnectionReset)] - [RefreshPropertiesAttribute(RefreshProperties.All)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Pooling)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_ConnectionReset)] + [RefreshProperties(RefreshProperties.All)] public bool ConnectionReset { get { return _connectionReset; } @@ -1608,9 +1780,9 @@ public bool ConnectionReset /// [DisplayName(DbConnectionStringKeywords.ContextConnection)] [Obsolete("ContextConnection has been deprecated. SqlConnection will ignore the 'Context Connection' keyword.")] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Source)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_ContextConnection)] - [RefreshPropertiesAttribute(RefreshProperties.All)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Source)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_ContextConnection)] + [RefreshProperties(RefreshProperties.All)] public bool ContextConnection { get { return _contextConnection; } @@ -1623,9 +1795,9 @@ public bool ContextConnection /// [DisplayName(DbConnectionStringKeywords.TransparentNetworkIPResolution)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Source)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_TransparentNetworkIPResolution)] - [RefreshPropertiesAttribute(RefreshProperties.All)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Source)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_TransparentNetworkIPResolution)] + [RefreshProperties(RefreshProperties.All)] public bool TransparentNetworkIPResolution { get { return _transparentNetworkIPResolution; } @@ -1638,9 +1810,9 @@ public bool TransparentNetworkIPResolution /// [DisplayName(DbConnectionStringKeywords.NetworkLibrary)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Advanced)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_NetworkLibrary)] - [RefreshPropertiesAttribute(RefreshProperties.All)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Advanced)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_NetworkLibrary)] + [RefreshProperties(RefreshProperties.All)] [TypeConverter(typeof(NetworkLibraryConverter))] public string NetworkLibrary { @@ -1686,9 +1858,9 @@ public string NetworkLibrary #if ADONET_CERT_AUTH [DisplayName(DbConnectionStringKeywords.Certificate)] - [ResCategoryAttribute(StringsHelper.ResourceNames.DataCategory_Security)] - [ResDescriptionAttribute(StringsHelper.ResourceNames.DbConnectionString_Certificate)] - [RefreshPropertiesAttribute(RefreshProperties.All)] + [ResCategory(StringsHelper.ResourceNames.DataCategory_Security)] + [ResDescription(StringsHelper.ResourceNames.DbConnectionString_Certificate)] + [RefreshProperties(RefreshProperties.All)] public string Certificate { get { return _certificate; } set { @@ -1700,203 +1872,8 @@ public string Certificate { _certificate = value; } } -#else - internal string Certificate => null; #endif - - private sealed class SqlDataSourceConverter : StringConverter - { - private StandardValuesCollection _standardValues; - - // converter classes should have public ctor - public SqlDataSourceConverter(){} - - public override bool GetStandardValuesSupported(ITypeDescriptorContext context) => true; - - public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) => false; - - public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) - { - StandardValuesCollection dataSourceNames = _standardValues; - if (null == _standardValues) - { - // Get the sources rowset for the SQLOLEDB enumerator - DataTable table = SqlClientFactory.Instance.CreateDataSourceEnumerator().GetDataSources(); - string ServerName = typeof(System.Data.Sql.SqlDataSourceEnumerator).GetField("ServerName", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null).ToString(); - string InstanceName = typeof(System.Data.Sql.SqlDataSourceEnumerator).GetField("InstanceName", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null).ToString(); - DataColumn serverName = table.Columns[ServerName]; - DataColumn instanceName = table.Columns[InstanceName]; - DataRowCollection rows = table.Rows; - - string[] serverNames = new string[rows.Count]; - for (int i = 0; i < serverNames.Length; ++i) - { - string server = rows[i][serverName] as string; - string instance = rows[i][instanceName] as string; - if ((null == instance) || (0 == instance.Length) || ("MSSQLSERVER" == instance)) - { - serverNames[i] = server; - } - else - { - serverNames[i] = server + @"\" + instance; - } - } - Array.Sort(serverNames); - - // Create the standard values collection that contains the sources - dataSourceNames = new StandardValuesCollection(serverNames); - _standardValues = dataSourceNames; - } - return dataSourceNames; - } - } - - private sealed class NetworkLibraryConverter : TypeConverter - { - // private const string AppleTalk = "Apple Talk (DBMSADSN)"; Invalid protocals - // private const string BanyanVines = "Banyan VINES (DBMSVINN)"; - // private const string IPXSPX = "NWLink IPX/SPX (DBMSSPXN)"; - // private const string Multiprotocol = "Multiprotocol (DBMSRPCN)"; - private const string NamedPipes = "Named Pipes (DBNMPNTW)"; // valid protocols - private const string SharedMemory = "Shared Memory (DBMSLPCN)"; - private const string TCPIP = "TCP/IP (DBMSSOCN)"; - private const string VIA = "VIA (DBMSGNET)"; - - // these are correctly non-static, property grid will cache an instance - private StandardValuesCollection _standardValues; - - // converter classes should have public ctor - public NetworkLibraryConverter() {} - - public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) - // Only know how to convert from a string - => (typeof(string) == sourceType) || base.CanConvertFrom(context, sourceType); - - public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) - { - string svalue = (value as string); - if (null != svalue) - { - svalue = svalue.Trim(); - if (StringComparer.OrdinalIgnoreCase.Equals(svalue, NamedPipes)) - { - return SqlConnectionString.NETLIB.NamedPipes; - } - else if (StringComparer.OrdinalIgnoreCase.Equals(svalue, SharedMemory)) - { - return SqlConnectionString.NETLIB.SharedMemory; - } - else if (StringComparer.OrdinalIgnoreCase.Equals(svalue, TCPIP)) - { - return SqlConnectionString.NETLIB.TCPIP; - } - else if (StringComparer.OrdinalIgnoreCase.Equals(svalue, VIA)) - { - return SqlConnectionString.NETLIB.VIA; - } - else - { - return svalue; - } - } - return base.ConvertFrom(context, culture, value); - } - - public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) - => (typeof(string) == destinationType) || base.CanConvertTo(context, destinationType); - - public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) - { - if ((value is string svalue) && (destinationType == typeof(string))) - { - return svalue.Trim().ToLower(CultureInfo.InvariantCulture) switch - { - SqlConnectionString.NETLIB.NamedPipes => NamedPipes, - SqlConnectionString.NETLIB.SharedMemory => SharedMemory, - SqlConnectionString.NETLIB.TCPIP => TCPIP, - SqlConnectionString.NETLIB.VIA => VIA, - _ => svalue, - }; - } - return base.ConvertTo(context, culture, value, destinationType); - } - - public override bool GetStandardValuesSupported(ITypeDescriptorContext context) => true; - - public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) => false; - - public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) - { - StandardValuesCollection standardValues = _standardValues; - if (null == standardValues) - { - string[] names = new string[] { - NamedPipes, - SharedMemory, - TCPIP, - VIA, - }; - standardValues = new StandardValuesCollection(names); - _standardValues = standardValues; - } - return standardValues; - } - } - - internal sealed class SqlConnectionStringBuilderConverter : ExpandableObjectConverter - { - // converter classes should have public ctor - public SqlConnectionStringBuilderConverter() {} - - public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) - { - if (typeof(System.ComponentModel.Design.Serialization.InstanceDescriptor) == destinationType) - { - return true; - } - return base.CanConvertTo(context, destinationType); - } - - public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) - { - if (destinationType == null) - { - throw ADP.ArgumentNull(nameof(destinationType)); - } - if (typeof(System.ComponentModel.Design.Serialization.InstanceDescriptor) == destinationType) - { - SqlConnectionStringBuilder obj = (value as SqlConnectionStringBuilder); - if (null != obj) - { - return ConvertToInstanceDescriptor(obj); - } - } - return base.ConvertTo(context, culture, value, destinationType); - } - - private System.ComponentModel.Design.Serialization.InstanceDescriptor ConvertToInstanceDescriptor(SqlConnectionStringBuilder options) - { - Type[] ctorParams = new Type[] { typeof(string) }; - object[] ctorValues = new object[] { options.ConnectionString }; - ConstructorInfo ctor = typeof(SqlConnectionStringBuilder).GetConstructor(ctorParams); - return new System.ComponentModel.Design.Serialization.InstanceDescriptor(ctor, ctorValues); - } - } -#else - - private static readonly string[] s_notSupportedKeywords = new string[] { - DbConnectionStringKeywords.ConnectionReset, - DbConnectionStringKeywords.ContextConnection, - DbConnectionStringKeywords.TransactionBinding, - }; - - private static readonly string[] s_notSupportedNetworkLibraryKeywords = new string[] { - DbConnectionStringKeywords.NetworkLibrary, - - DbConnectionStringSynonyms.NET, - DbConnectionStringSynonyms.NETWORK - }; #endif + #endregion // Public APIs } } From 2199c0dfb157cc7690b288e37049bbe85016fd6d Mon Sep 17 00:00:00 2001 From: Davoud Eshtehari Date: Thu, 14 Oct 2021 12:22:13 -0700 Subject: [PATCH 3/5] Improvement --- .../SqlClient/SqlConnectionStringBuilder.cs | 50 ++++++------------- 1 file changed, 15 insertions(+), 35 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs index aedbf7b481..e1916b8206 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs @@ -708,7 +708,7 @@ public SqlConnectionStringBuilderConverter() { } public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) { - if (typeof(System.ComponentModel.Design.Serialization.InstanceDescriptor) == destinationType) + if (typeof(InstanceDescriptor) == destinationType) { return true; } @@ -1726,8 +1726,7 @@ public override bool ContainsKey(string keyword) public override bool Remove(string keyword) { ADP.CheckArgumentNull(keyword, nameof(keyword)); - Keywords index; - if (s_keywords.TryGetValue(keyword, out index)) + if (s_keywords.TryGetValue(keyword, out Keywords index)) { if (base.Remove(s_validKeywords[(int)index])) { @@ -1742,15 +1741,13 @@ public override bool Remove(string keyword) public override bool ShouldSerialize(string keyword) { ADP.CheckArgumentNull(keyword, nameof(keyword)); - Keywords index; - return s_keywords.TryGetValue(keyword, out index) && base.ShouldSerialize(s_validKeywords[(int)index]); + return s_keywords.TryGetValue(keyword, out Keywords index) && base.ShouldSerialize(s_validKeywords[(int)index]); } /// public override bool TryGetValue(string keyword, out object value) { - Keywords index; - if (s_keywords.TryGetValue(keyword, out index)) + if (s_keywords.TryGetValue(keyword, out Keywords index)) { value = GetAt(index); return true; @@ -1821,35 +1818,18 @@ public string NetworkLibrary { if (null != value) { - switch (value.Trim().ToLower(CultureInfo.InvariantCulture)) + value = value.Trim().ToLower(CultureInfo.InvariantCulture) switch { - case SqlConnectionString.NETLIB.AppleTalk: - value = SqlConnectionString.NETLIB.AppleTalk; - break; - case SqlConnectionString.NETLIB.BanyanVines: - value = SqlConnectionString.NETLIB.BanyanVines; - break; - case SqlConnectionString.NETLIB.IPXSPX: - value = SqlConnectionString.NETLIB.IPXSPX; - break; - case SqlConnectionString.NETLIB.Multiprotocol: - value = SqlConnectionString.NETLIB.Multiprotocol; - break; - case SqlConnectionString.NETLIB.NamedPipes: - value = SqlConnectionString.NETLIB.NamedPipes; - break; - case SqlConnectionString.NETLIB.SharedMemory: - value = SqlConnectionString.NETLIB.SharedMemory; - break; - case SqlConnectionString.NETLIB.TCPIP: - value = SqlConnectionString.NETLIB.TCPIP; - break; - case SqlConnectionString.NETLIB.VIA: - value = SqlConnectionString.NETLIB.VIA; - break; - default: - throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.NetworkLibrary); - } + SqlConnectionString.NETLIB.AppleTalk => SqlConnectionString.NETLIB.AppleTalk, + SqlConnectionString.NETLIB.BanyanVines => SqlConnectionString.NETLIB.BanyanVines, + SqlConnectionString.NETLIB.IPXSPX => SqlConnectionString.NETLIB.IPXSPX, + SqlConnectionString.NETLIB.Multiprotocol => SqlConnectionString.NETLIB.Multiprotocol, + SqlConnectionString.NETLIB.NamedPipes => SqlConnectionString.NETLIB.NamedPipes, + SqlConnectionString.NETLIB.SharedMemory => SqlConnectionString.NETLIB.SharedMemory, + SqlConnectionString.NETLIB.TCPIP => SqlConnectionString.NETLIB.TCPIP, + SqlConnectionString.NETLIB.VIA => SqlConnectionString.NETLIB.VIA, + _ => throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.NetworkLibrary), + }; } SetValue(DbConnectionStringKeywords.NetworkLibrary, value); _networkLibrary = value; From 5b693bd27bffc30f304ee2204378f399bef9d92b Mon Sep 17 00:00:00 2001 From: Davoud Eshtehari Date: Fri, 15 Oct 2021 09:01:22 -0700 Subject: [PATCH 4/5] Address comments --- .../SqlClient/SqlConnectionStringBuilder.cs | 134 ++++++++---------- 1 file changed, 61 insertions(+), 73 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs index e1916b8206..93b5292998 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs @@ -42,18 +42,12 @@ private enum Keywords MinPoolSize, MaxPoolSize, PoolBlockingPeriod, -#if NETFRAMEWORK - ConnectionReset, -#endif MultipleActiveResultSets, Replication, ConnectTimeout, Encrypt, TrustServerCertificate, LoadBalanceTimeout, -#if NETFRAMEWORK - NetworkLibrary, -#endif PacketSize, TypeSystemVersion, Authentication, @@ -61,26 +55,24 @@ private enum Keywords CurrentLanguage, WorkstationID, UserInstance, -#if NETFRAMEWORK - ContextConnection, -#endif TransactionBinding, ApplicationIntent, MultiSubnetFailover, -#if NETFRAMEWORK - TransparentNetworkIPResolution, -#endif ConnectRetryCount, ConnectRetryInterval, ColumnEncryptionSetting, EnclaveAttestationUrl, AttestationProtocol, - CommandTimeout, IPAddressPreference, - -#if NETFRAMEWORK && ADONET_CERT_AUTH +#if NETFRAMEWORK + ConnectionReset, + NetworkLibrary, + ContextConnection, + TransparentNetworkIPResolution, +#if ADONET_CERT_AUTH Certificate, +#endif #endif // keep the KeywordsCount value last KeywordsCount @@ -297,7 +289,7 @@ private static Dictionary CreateKeywordsDictionary() /// /// /// - private static SqlConnectionColumnEncryptionSetting ConvertToColumnEncryptionSetting(string keyword, object value) + private static SqlConnectionColumnEncryptionSetting ConvertToColumnEncryptionSetting(string keyword, object value) => DbConnectionStringBuilderUtil.ConvertToColumnEncryptionSetting(keyword, value); /// @@ -305,7 +297,7 @@ private static SqlConnectionColumnEncryptionSetting ConvertToColumnEncryptionSet /// /// /// - private static SqlConnectionAttestationProtocol ConvertToAttestationProtocol(string keyword, object value) + private static SqlConnectionAttestationProtocol ConvertToAttestationProtocol(string keyword, object value) => DbConnectionStringBuilderUtil.ConvertToAttestationProtocol(keyword, value); /// @@ -631,7 +623,7 @@ private Exception UnsupportedKeyword(string keyword) private sealed class SqlInitialCatalogConverter : StringConverter { // converter classes should have public ctor - public SqlInitialCatalogConverter() {} + public SqlInitialCatalogConverter() { } public override bool GetStandardValuesSupported(ITypeDescriptorContext context) => GetStandardValuesSupportedInternal(context); @@ -640,10 +632,10 @@ private bool GetStandardValuesSupportedInternal(ITypeDescriptorContext context) // Only say standard values are supported if the connection string has enough // information set to instantiate a connection and retrieve a list of databases bool flag = false; - if (null != context) + if (context is not null) { SqlConnectionStringBuilder constr = (context.Instance as SqlConnectionStringBuilder); - if (null != constr) + if (constr is not null) { if ((0 < constr.DataSource.Length) && (constr.IntegratedSecurity || (0 < constr.UserID.Length))) { @@ -717,14 +709,14 @@ public override bool CanConvertTo(ITypeDescriptorContext context, Type destinati public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { - if (destinationType == null) + if (destinationType is null) { throw ADP.ArgumentNull(nameof(destinationType)); } if (typeof(InstanceDescriptor) == destinationType) { SqlConnectionStringBuilder obj = (value as SqlConnectionStringBuilder); - if (null != obj) + if (obj is not null) { return ConvertToInstanceDescriptor(obj); } @@ -756,7 +748,7 @@ public SqlDataSourceConverter() { } public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) { StandardValuesCollection dataSourceNames = _standardValues; - if (null == _standardValues) + if (_standardValues is null) { // Get the sources rowset for the SQLOLEDB enumerator DataTable table = SqlClientFactory.Instance.CreateDataSourceEnumerator().GetDataSources(); @@ -771,7 +763,7 @@ public override StandardValuesCollection GetStandardValues(ITypeDescriptorContex { string server = rows[i][serverName] as string; string instance = rows[i][instanceName] as string; - if ((null == instance) || (0 == instance.Length) || ("MSSQLSERVER" == instance)) + if ((instance is null) || (0 == instance.Length) || ("MSSQLSERVER" == instance)) { serverNames[i] = server; } @@ -814,7 +806,7 @@ public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceT public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { string svalue = (value as string); - if (null != svalue) + if (svalue is not null) { svalue = svalue.Trim(); if (StringComparer.OrdinalIgnoreCase.Equals(svalue, NamedPipes)) @@ -867,7 +859,7 @@ public override object ConvertTo(ITypeDescriptorContext context, CultureInfo cul public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) { StandardValuesCollection standardValues = _standardValues; - if (null == standardValues) + if (standardValues is null) { string[] names = new string[] { NamedPipes, @@ -915,14 +907,10 @@ public SqlConnectionStringBuilder(string connectionString) : base() /// public override object this[string keyword] { - get - { - Keywords index = GetIndex(keyword); - return GetAt(index); - } + get => GetAt(GetIndex(keyword)); set { - if (null != value) + if (value is not null) { Keywords index = GetIndex(keyword); switch (index) @@ -1077,7 +1065,7 @@ public override object this[string keyword] [RefreshProperties(RefreshProperties.All)] public ApplicationIntent ApplicationIntent { - get { return _applicationIntent; } + get => _applicationIntent; set { if (!DbConnectionStringBuilderUtil.IsValidApplicationIntentValue(value)) @@ -1097,7 +1085,7 @@ public ApplicationIntent ApplicationIntent [RefreshProperties(RefreshProperties.All)] public string ApplicationName { - get { return _applicationName; } + get => _applicationName; set { SetValue(DbConnectionStringKeywords.ApplicationName, value); @@ -1113,7 +1101,7 @@ public string ApplicationName [RefreshProperties(RefreshProperties.All)] public string AttachDBFilename { - get { return _attachDBFilename; } + get => _attachDBFilename; set { SetValue(DbConnectionStringKeywords.AttachDBFilename, value); @@ -1128,7 +1116,7 @@ public string AttachDBFilename [RefreshProperties(RefreshProperties.All)] public int CommandTimeout { - get { return _commandTimeout; } + get => _commandTimeout; set { if (value < 0) @@ -1147,7 +1135,7 @@ public int CommandTimeout [RefreshProperties(RefreshProperties.All)] public int ConnectTimeout { - get { return _connectTimeout; } + get => _connectTimeout; set { if (value < 0) @@ -1166,7 +1154,7 @@ public int ConnectTimeout [RefreshProperties(RefreshProperties.All)] public string CurrentLanguage { - get { return _currentLanguage; } + get => _currentLanguage; set { SetValue(DbConnectionStringKeywords.CurrentLanguage, value); @@ -1184,7 +1172,7 @@ public string CurrentLanguage #endif public string DataSource { - get { return _dataSource; } + get => _dataSource; set { SetValue(DbConnectionStringKeywords.DataSource, value); @@ -1199,7 +1187,7 @@ public string DataSource [RefreshProperties(RefreshProperties.All)] public bool Encrypt { - get { return _encrypt; } + get => _encrypt; set { SetValue(DbConnectionStringKeywords.Encrypt, value); @@ -1214,7 +1202,7 @@ public bool Encrypt [RefreshProperties(RefreshProperties.All)] public SqlConnectionColumnEncryptionSetting ColumnEncryptionSetting { - get { return _columnEncryptionSetting; } + get => _columnEncryptionSetting; set { if (!DbConnectionStringBuilderUtil.IsValidColumnEncryptionSetting(value)) @@ -1234,7 +1222,7 @@ public SqlConnectionColumnEncryptionSetting ColumnEncryptionSetting [RefreshProperties(RefreshProperties.All)] public string EnclaveAttestationUrl { - get { return _enclaveAttestationUrl; } + get => _enclaveAttestationUrl; set { SetValue(DbConnectionStringKeywords.EnclaveAttestationUrl, value); @@ -1249,7 +1237,7 @@ public string EnclaveAttestationUrl [RefreshProperties(RefreshProperties.All)] public SqlConnectionAttestationProtocol AttestationProtocol { - get { return _attestationProtocol; } + get => _attestationProtocol; set { if (!DbConnectionStringBuilderUtil.IsValidAttestationProtocol(value)) @@ -1289,7 +1277,7 @@ public SqlConnectionIPAddressPreference IPAddressPreference [RefreshProperties(RefreshProperties.All)] public bool TrustServerCertificate { - get { return _trustServerCertificate; } + get => _trustServerCertificate; set { SetValue(DbConnectionStringKeywords.TrustServerCertificate, value); @@ -1304,7 +1292,7 @@ public bool TrustServerCertificate [RefreshProperties(RefreshProperties.All)] public bool Enlist { - get { return _enlist; } + get => _enlist; set { SetValue(DbConnectionStringKeywords.Enlist, value); @@ -1322,7 +1310,7 @@ public bool Enlist #endif public string FailoverPartner { - get { return _failoverPartner; } + get => _failoverPartner; set { SetValue(DbConnectionStringKeywords.FailoverPartner, value); @@ -1338,7 +1326,7 @@ public string FailoverPartner [TypeConverter(typeof(SqlInitialCatalogConverter))] public string InitialCatalog { - get { return _initialCatalog; } + get => _initialCatalog; set { SetValue(DbConnectionStringKeywords.InitialCatalog, value); @@ -1353,7 +1341,7 @@ public string InitialCatalog [RefreshProperties(RefreshProperties.All)] public bool IntegratedSecurity { - get { return _integratedSecurity; } + get => _integratedSecurity; set { SetValue(DbConnectionStringKeywords.IntegratedSecurity, value); @@ -1368,7 +1356,7 @@ public bool IntegratedSecurity [RefreshProperties(RefreshProperties.All)] public SqlAuthenticationMethod Authentication { - get { return _authentication; } + get => _authentication; set { if (!DbConnectionStringBuilderUtil.IsValidAuthenticationTypeValue(value)) @@ -1388,7 +1376,7 @@ public SqlAuthenticationMethod Authentication [RefreshProperties(RefreshProperties.All)] public int LoadBalanceTimeout { - get { return _loadBalanceTimeout; } + get => _loadBalanceTimeout; set { if (value < 0) @@ -1407,7 +1395,7 @@ public int LoadBalanceTimeout [RefreshProperties(RefreshProperties.All)] public int MaxPoolSize { - get { return _maxPoolSize; } + get => _maxPoolSize; set { if (value < 1) @@ -1426,7 +1414,7 @@ public int MaxPoolSize [RefreshProperties(RefreshProperties.All)] public int ConnectRetryCount { - get { return _connectRetryCount; } + get => _connectRetryCount; set { if ((value < 0) || (value > 255)) @@ -1445,7 +1433,7 @@ public int ConnectRetryCount [RefreshProperties(RefreshProperties.All)] public int ConnectRetryInterval { - get { return _connectRetryInterval; } + get => _connectRetryInterval; set { if ((value < 1) || (value > 60)) @@ -1465,7 +1453,7 @@ public int ConnectRetryInterval [RefreshProperties(RefreshProperties.All)] public int MinPoolSize { - get { return _minPoolSize; } + get => _minPoolSize; set { if (value < 0) @@ -1484,7 +1472,7 @@ public int MinPoolSize [RefreshProperties(RefreshProperties.All)] public bool MultipleActiveResultSets { - get { return _multipleActiveResultSets; } + get => _multipleActiveResultSets; set { SetValue(DbConnectionStringKeywords.MultipleActiveResultSets, value); @@ -1500,7 +1488,7 @@ public bool MultipleActiveResultSets [RefreshProperties(RefreshProperties.All)] public bool MultiSubnetFailover { - get { return _multiSubnetFailover; } + get => _multiSubnetFailover; set { SetValue(DbConnectionStringKeywords.MultiSubnetFailover, value); @@ -1515,7 +1503,7 @@ public bool MultiSubnetFailover [RefreshProperties(RefreshProperties.All)] public int PacketSize { - get { return _packetSize; } + get => _packetSize; set { if ((value < TdsEnums.MIN_PACKET_SIZE) || (TdsEnums.MAX_PACKET_SIZE < value)) @@ -1535,7 +1523,7 @@ public int PacketSize [RefreshProperties(RefreshProperties.All)] public string Password { - get { return _password; } + get => _password; set { SetValue(DbConnectionStringKeywords.Password, value); @@ -1550,7 +1538,7 @@ public string Password [RefreshProperties(RefreshProperties.All)] public bool PersistSecurityInfo { - get { return _persistSecurityInfo; } + get => _persistSecurityInfo; set { SetValue(DbConnectionStringKeywords.PersistSecurityInfo, value); @@ -1565,7 +1553,7 @@ public bool PersistSecurityInfo [RefreshProperties(RefreshProperties.All)] public PoolBlockingPeriod PoolBlockingPeriod { - get { return _poolBlockingPeriod; } + get => _poolBlockingPeriod; set { if (!DbConnectionStringBuilderUtil.IsValidPoolBlockingPeriodValue(value)) @@ -1585,7 +1573,7 @@ public PoolBlockingPeriod PoolBlockingPeriod [RefreshProperties(RefreshProperties.All)] public bool Pooling { - get { return _pooling; } + get => _pooling; set { SetValue(DbConnectionStringKeywords.Pooling, value); @@ -1600,7 +1588,7 @@ public bool Pooling [RefreshProperties(RefreshProperties.All)] public bool Replication { - get { return _replication; } + get => _replication; set { SetValue(DbConnectionStringKeywords.Replication, value); @@ -1615,7 +1603,7 @@ public bool Replication [RefreshProperties(RefreshProperties.All)] public string TransactionBinding { - get { return _transactionBinding; } + get => _transactionBinding; set { SetValue(DbConnectionStringKeywords.TransactionBinding, value); @@ -1630,7 +1618,7 @@ public string TransactionBinding [RefreshProperties(RefreshProperties.All)] public string TypeSystemVersion { - get { return _typeSystemVersion; } + get => _typeSystemVersion; set { SetValue(DbConnectionStringKeywords.TypeSystemVersion, value); @@ -1645,7 +1633,7 @@ public string TypeSystemVersion [RefreshProperties(RefreshProperties.All)] public string UserID { - get { return _userID; } + get => _userID; set { SetValue(DbConnectionStringKeywords.UserID, value); @@ -1660,7 +1648,7 @@ public string UserID [RefreshProperties(RefreshProperties.All)] public bool UserInstance { - get { return _userInstance; } + get => _userInstance; set { SetValue(DbConnectionStringKeywords.UserInstance, value); @@ -1675,7 +1663,7 @@ public bool UserInstance [RefreshProperties(RefreshProperties.All)] public string WorkstationID { - get { return _workstationID; } + get => _workstationID; set { SetValue(DbConnectionStringKeywords.WorkstationID, value); @@ -1766,7 +1754,7 @@ public override bool TryGetValue(string keyword, out object value) [RefreshProperties(RefreshProperties.All)] public bool ConnectionReset { - get { return _connectionReset; } + get => _connectionReset; set { SetValue(DbConnectionStringKeywords.ConnectionReset, value); @@ -1782,7 +1770,7 @@ public bool ConnectionReset [RefreshProperties(RefreshProperties.All)] public bool ContextConnection { - get { return _contextConnection; } + get => _contextConnection; set { SetValue(DbConnectionStringKeywords.ContextConnection, value); @@ -1797,7 +1785,7 @@ public bool ContextConnection [RefreshProperties(RefreshProperties.All)] public bool TransparentNetworkIPResolution { - get { return _transparentNetworkIPResolution; } + get => _transparentNetworkIPResolution; set { SetValue(DbConnectionStringKeywords.TransparentNetworkIPResolution, value); @@ -1813,10 +1801,10 @@ public bool TransparentNetworkIPResolution [TypeConverter(typeof(NetworkLibraryConverter))] public string NetworkLibrary { - get { return _networkLibrary; } + get => _networkLibrary; set { - if (null != value) + if (value is not null) { value = value.Trim().ToLower(CultureInfo.InvariantCulture) switch { @@ -1842,7 +1830,7 @@ public string NetworkLibrary [ResDescription(StringsHelper.ResourceNames.DbConnectionString_Certificate)] [RefreshProperties(RefreshProperties.All)] public string Certificate { - get { return _certificate; } + get => _certificate; set { if (!DbConnectionStringBuilderUtil.IsValidCertificateValue(value)) { throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.Certificate); From ade256dd81d1b34c44477926362d3411f7146429 Mon Sep 17 00:00:00 2001 From: Davoud Eshtehari Date: Fri, 15 Oct 2021 19:04:47 -0700 Subject: [PATCH 5/5] Remove comments --- .../Data/SqlClient/SqlConnectionStringBuilder.cs | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs index 93b5292998..b78c2e392b 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs @@ -284,27 +284,12 @@ private static Dictionary CreateKeywordsDictionary() private static ApplicationIntent ConvertToApplicationIntent(string keyword, object value) => DbConnectionStringBuilderUtil.ConvertToApplicationIntent(keyword, value); - /// - /// Convert to SqlConnectionColumnEncryptionSetting. - /// - /// - /// private static SqlConnectionColumnEncryptionSetting ConvertToColumnEncryptionSetting(string keyword, object value) => DbConnectionStringBuilderUtil.ConvertToColumnEncryptionSetting(keyword, value); - /// - /// Convert to SqlConnectionAttestationProtocol - /// - /// - /// private static SqlConnectionAttestationProtocol ConvertToAttestationProtocol(string keyword, object value) => DbConnectionStringBuilderUtil.ConvertToAttestationProtocol(keyword, value); - /// - /// Convert to SqlConnectionIPAddressPreference - /// - /// - /// private static SqlConnectionIPAddressPreference ConvertToIPAddressPreference(string keyword, object value) => DbConnectionStringBuilderUtil.ConvertToIPAddressPreference(keyword, value);