From 95b4676ace9ccd66aa7e87774cf3c67f0ba14228 Mon Sep 17 00:00:00 2001 From: Ben Russell Date: Fri, 9 May 2025 18:46:11 -0500 Subject: [PATCH 01/10] Lazily merge the platform specific code into DbConnectionOptions.cs --- .../netcore/src/Microsoft.Data.SqlClient.csproj | 6 ++++++ .../Data/Common/ConnectionString/DbConnectionOptions.cs | 5 ++--- 2 files changed, 8 insertions(+), 3 deletions(-) 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 0a48c5499e..f90e060364 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj @@ -813,6 +813,7 @@ + @@ -959,9 +960,11 @@ Microsoft\Data\SqlTypes\SqlFileStream.Windows.cs + + @@ -1000,8 +1003,10 @@ Microsoft\Data\SqlTypes\SqlFileStream.netcore.Unix.cs + + @@ -1029,6 +1034,7 @@ Resources\Microsoft.Data.SqlClient.SqlMetaData.xml + diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionOptions.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionOptions.cs index 39d66a41e0..f0a40c9786 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionOptions.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionOptions.cs @@ -573,7 +573,7 @@ internal NameValuePair ReplacePasswordPwd(out string constr, bool fakePassword) constr = builder.ToString(); return head; } - + // SxS notes: // * this method queries "DataDirectory" value from the current AppDomain. // This string is used for to replace "!DataDirectory!" values in the connection string, it is not considered as an "exposed resource". @@ -644,7 +644,7 @@ internal string ExpandAttachDbFileName(string replacementValue) #endif #endregion - + #region NetFx Methods #if NETFRAMEWORK @@ -770,6 +770,5 @@ internal static void AppendKeyValuePairBuilder(StringBuilder builder, string key } #endif #endregion - } } From e86c06af078e58293208fe1741f350dddd10925a Mon Sep 17 00:00:00 2001 From: Ben Russell Date: Thu, 5 Jun 2025 15:19:08 -0500 Subject: [PATCH 02/10] Remove SqlConnectionString.DEFAULT class and replace usages with DbConnectionStringDefaults --- .../Microsoft/Data/SqlClient/SqlConnection.cs | 10 +- .../Microsoft/Data/SqlClient/SqlConnection.cs | 12 +- .../Data/SqlClient/SqlConnectionString.cs | 135 ++++++------------ .../Data/SqlClient/TdsParserHelperClasses.cs | 31 ++-- 4 files changed, 70 insertions(+), 118 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnection.cs b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnection.cs index 45df50badb..77745f6bbb 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnection.cs +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnection.cs @@ -663,7 +663,7 @@ public override int ConnectionTimeout get { SqlConnectionString constr = (SqlConnectionString)ConnectionOptions; - return constr != null ? constr.ConnectTimeout : SqlConnectionString.DEFAULT.Connect_Timeout; + return constr != null ? constr.ConnectTimeout : DbConnectionStringDefaults.ConnectTimeout; } } @@ -675,7 +675,7 @@ public int CommandTimeout get { SqlConnectionString constr = (SqlConnectionString)ConnectionOptions; - return constr != null ? constr.CommandTimeout : SqlConnectionString.DEFAULT.Command_Timeout; + return constr != null ? constr.CommandTimeout : DbConnectionStringDefaults.CommandTimeout; } } @@ -757,7 +757,7 @@ public override string Database else { SqlConnectionString constr = (SqlConnectionString)ConnectionOptions; - result = constr != null ? constr.InitialCatalog : SqlConnectionString.DEFAULT.Initial_Catalog; + result = constr != null ? constr.InitialCatalog : DbConnectionStringDefaults.InitialCatalog; } return result; } @@ -830,7 +830,7 @@ public override string DataSource else { SqlConnectionString constr = (SqlConnectionString)ConnectionOptions; - result = constr != null ? constr.DataSource : SqlConnectionString.DEFAULT.Data_Source; + result = constr != null ? constr.DataSource : DbConnectionStringDefaults.DataSource; } return result; } @@ -857,7 +857,7 @@ public int PacketSize else { SqlConnectionString constr = (SqlConnectionString)ConnectionOptions; - result = constr != null ? constr.PacketSize : SqlConnectionString.DEFAULT.Packet_Size; + result = constr != null ? constr.PacketSize : DbConnectionStringDefaults.PacketSize; } return result; } diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnection.cs b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnection.cs index 46800b4140..ac025861fe 100644 --- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnection.cs +++ b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnection.cs @@ -657,7 +657,7 @@ public override int ConnectionTimeout get { SqlConnectionString constr = (SqlConnectionString)ConnectionOptions; - return constr != null ? constr.ConnectTimeout : SqlConnectionString.DEFAULT.Connect_Timeout; + return constr != null ? constr.ConnectTimeout : DbConnectionStringDefaults.ConnectTimeout; } } @@ -669,7 +669,7 @@ public int CommandTimeout get { SqlConnectionString constr = (SqlConnectionString)ConnectionOptions; - return constr != null ? constr.CommandTimeout : SqlConnectionString.DEFAULT.Command_Timeout; + return constr != null ? constr.CommandTimeout : DbConnectionStringDefaults.CommandTimeout; } } @@ -685,7 +685,7 @@ public string AccessToken // When a connection is connecting or is ever opened, make AccessToken available only if "Persist Security Info" is set to true // otherwise, return null SqlConnectionString connectionOptions = (SqlConnectionString)UserConnectionOptions; - return InnerConnection.ShouldHidePassword && connectionOptions != null && !connectionOptions.PersistSecurityInfo ? null : _accessToken; + return InnerConnection.ShouldHidePassword&& connectionOptions != null && !connectionOptions.PersistSecurityInfo ? null : _accessToken; } set { @@ -750,7 +750,7 @@ public override string Database else { SqlConnectionString constr = (SqlConnectionString)ConnectionOptions; - result = constr != null ? constr.InitialCatalog : SqlConnectionString.DEFAULT.Initial_Catalog; + result = constr != null ? constr.InitialCatalog : DbConnectionStringDefaults.InitialCatalog; } return result; } @@ -822,7 +822,7 @@ public override string DataSource else { SqlConnectionString constr = (SqlConnectionString)ConnectionOptions; - result = constr != null ? constr.DataSource : SqlConnectionString.DEFAULT.Data_Source; + result = constr != null ? constr.DataSource : DbConnectionStringDefaults.DataSource; } return result; } @@ -847,7 +847,7 @@ public int PacketSize else { SqlConnectionString constr = (SqlConnectionString)ConnectionOptions; - result = constr != null ? constr.PacketSize : SqlConnectionString.DEFAULT.Packet_Size; + result = constr != null ? constr.PacketSize : DbConnectionStringDefaults.PacketSize; } return result; diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs index 3816e74e49..fb2bcdcc72 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs @@ -24,55 +24,6 @@ internal sealed class SqlConnectionString : DbConnectionOptions // used by pooling classes so it is much easier to verify correctness // when not worried about the class being modified during execution - // @TODO: Remove this in favor of using DbConnectionStringDefaults?? - internal static class DEFAULT - { - internal const ApplicationIntent ApplicationIntent = DbConnectionStringDefaults.ApplicationIntent; - internal const string Application_Name = DbConnectionStringDefaults.ApplicationName; - internal const string AttachDBFilename = DbConnectionStringDefaults.AttachDBFilename; - internal const int Command_Timeout = DbConnectionStringDefaults.CommandTimeout; - internal const int Connect_Timeout = DbConnectionStringDefaults.ConnectTimeout; - internal const string Current_Language = DbConnectionStringDefaults.CurrentLanguage; - internal const string Data_Source = DbConnectionStringDefaults.DataSource; - internal static readonly SqlConnectionEncryptOption Encrypt = DbConnectionStringDefaults.Encrypt; - internal const string HostNameInCertificate = DbConnectionStringDefaults.HostNameInCertificate; - internal const string ServerCertificate = DbConnectionStringDefaults.ServerCertificate; - internal const bool Enlist = DbConnectionStringDefaults.Enlist; - internal const string FailoverPartner = DbConnectionStringDefaults.FailoverPartner; - internal const string Initial_Catalog = DbConnectionStringDefaults.InitialCatalog; - internal const bool Integrated_Security = DbConnectionStringDefaults.IntegratedSecurity; - internal const int Load_Balance_Timeout = DbConnectionStringDefaults.LoadBalanceTimeout; - internal const bool MARS = DbConnectionStringDefaults.MultipleActiveResultSets; - internal const int Max_Pool_Size = DbConnectionStringDefaults.MaxPoolSize; - internal const int Min_Pool_Size = DbConnectionStringDefaults.MinPoolSize; - internal const bool MultiSubnetFailover = DbConnectionStringDefaults.MultiSubnetFailover; - internal const int Packet_Size = DbConnectionStringDefaults.PacketSize; - internal const string Password = DbConnectionStringDefaults.Password; - internal const bool Persist_Security_Info = DbConnectionStringDefaults.PersistSecurityInfo; - internal const PoolBlockingPeriod PoolBlockingPeriod = DbConnectionStringDefaults.PoolBlockingPeriod; - internal const bool Pooling = DbConnectionStringDefaults.Pooling; - internal const bool TrustServerCertificate = DbConnectionStringDefaults.TrustServerCertificate; - internal const string Type_System_Version = DbConnectionStringDefaults.TypeSystemVersion; - internal const string User_ID = DbConnectionStringDefaults.UserID; - internal const bool User_Instance = DbConnectionStringDefaults.UserInstance; - internal const bool Replication = DbConnectionStringDefaults.Replication; - internal const int Connect_Retry_Count = DbConnectionStringDefaults.ConnectRetryCount; - internal const int Connect_Retry_Interval = DbConnectionStringDefaults.ConnectRetryInterval; - internal const string EnclaveAttestationUrl = DbConnectionStringDefaults.EnclaveAttestationUrl; - internal const SqlConnectionColumnEncryptionSetting ColumnEncryptionSetting = DbConnectionStringDefaults.ColumnEncryptionSetting; - internal static readonly SqlAuthenticationMethod Authentication = DbConnectionStringDefaults.Authentication; - internal static readonly SqlConnectionAttestationProtocol AttestationProtocol = DbConnectionStringDefaults.AttestationProtocol; - internal static readonly SqlConnectionIPAddressPreference IpAddressPreference = DbConnectionStringDefaults.IPAddressPreference; - internal const string ServerSPN = DbConnectionStringDefaults.ServerSPN; - internal const string FailoverPartnerSPN = DbConnectionStringDefaults.FailoverPartnerSPN; - internal const bool Context_Connection = DbConnectionStringDefaults.ContextConnection; -#if NETFRAMEWORK - internal static readonly bool TransparentNetworkIPResolution = DbConnectionStringDefaults.TransparentNetworkIPResolution; - internal const bool Connection_Reset = DbConnectionStringDefaults.ConnectionReset; - internal const string Network_Library = DbConnectionStringDefaults.NetworkLibrary; -#endif // NETFRAMEWORK - } - // @TODO: Remove in favor of DbConnectionStringKeywords // SqlConnection ConnectionString Options internal static class KEY @@ -307,49 +258,49 @@ internal SqlConnectionString(string connectionString) : base(connectionString, G _integratedSecurity = ConvertValueToIntegratedSecurity(); _poolBlockingPeriod = ConvertValueToPoolBlockingPeriod(); _encrypt = ConvertValueToSqlConnectionEncrypt(); - _enlist = ConvertValueToBoolean(KEY.Enlist, DEFAULT.Enlist); - _mars = ConvertValueToBoolean(KEY.MARS, DEFAULT.MARS); - _persistSecurityInfo = ConvertValueToBoolean(KEY.Persist_Security_Info, DEFAULT.Persist_Security_Info); - _pooling = ConvertValueToBoolean(KEY.Pooling, DEFAULT.Pooling); - _replication = ConvertValueToBoolean(KEY.Replication, DEFAULT.Replication); - _userInstance = ConvertValueToBoolean(KEY.User_Instance, DEFAULT.User_Instance); - _multiSubnetFailover = ConvertValueToBoolean(KEY.MultiSubnetFailover, DEFAULT.MultiSubnetFailover); - - _commandTimeout = ConvertValueToInt32(KEY.Command_Timeout, DEFAULT.Command_Timeout); - _connectTimeout = ConvertValueToInt32(KEY.Connect_Timeout, DEFAULT.Connect_Timeout); - _loadBalanceTimeout = ConvertValueToInt32(KEY.Load_Balance_Timeout, DEFAULT.Load_Balance_Timeout); - _maxPoolSize = ConvertValueToInt32(KEY.Max_Pool_Size, DEFAULT.Max_Pool_Size); - _minPoolSize = ConvertValueToInt32(KEY.Min_Pool_Size, DEFAULT.Min_Pool_Size); - _packetSize = ConvertValueToInt32(KEY.Packet_Size, DEFAULT.Packet_Size); - _connectRetryCount = ConvertValueToInt32(KEY.Connect_Retry_Count, DEFAULT.Connect_Retry_Count); - _connectRetryInterval = ConvertValueToInt32(KEY.Connect_Retry_Interval, DEFAULT.Connect_Retry_Interval); + _enlist = ConvertValueToBoolean(KEY.Enlist, DbConnectionStringDefaults.Enlist); + _mars = ConvertValueToBoolean(KEY.MARS, DbConnectionStringDefaults.MultipleActiveResultSets); + _persistSecurityInfo = ConvertValueToBoolean(KEY.Persist_Security_Info, DbConnectionStringDefaults.PersistSecurityInfo); + _pooling = ConvertValueToBoolean(KEY.Pooling, DbConnectionStringDefaults.Pooling); + _replication = ConvertValueToBoolean(KEY.Replication, DbConnectionStringDefaults.Replication); + _userInstance = ConvertValueToBoolean(KEY.User_Instance, DbConnectionStringDefaults.UserInstance); + _multiSubnetFailover = ConvertValueToBoolean(KEY.MultiSubnetFailover, DbConnectionStringDefaults.MultiSubnetFailover); + + _commandTimeout = ConvertValueToInt32(KEY.Command_Timeout, DbConnectionStringDefaults.CommandTimeout); + _connectTimeout = ConvertValueToInt32(KEY.Connect_Timeout, DbConnectionStringDefaults.ConnectTimeout); + _loadBalanceTimeout = ConvertValueToInt32(KEY.Load_Balance_Timeout, DbConnectionStringDefaults.LoadBalanceTimeout); + _maxPoolSize = ConvertValueToInt32(KEY.Max_Pool_Size, DbConnectionStringDefaults.MaxPoolSize); + _minPoolSize = ConvertValueToInt32(KEY.Min_Pool_Size, DbConnectionStringDefaults.MinPoolSize); + _packetSize = ConvertValueToInt32(KEY.Packet_Size, DbConnectionStringDefaults.PacketSize); + _connectRetryCount = ConvertValueToInt32(KEY.Connect_Retry_Count, DbConnectionStringDefaults.ConnectRetryCount); + _connectRetryInterval = ConvertValueToInt32(KEY.Connect_Retry_Interval, DbConnectionStringDefaults.ConnectRetryInterval); _applicationIntent = ConvertValueToApplicationIntent(); - _applicationName = ConvertValueToString(KEY.Application_Name, DEFAULT.Application_Name); - _attachDBFileName = ConvertValueToString(KEY.AttachDBFilename, DEFAULT.AttachDBFilename); - _contextConnection = ConvertValueToBoolean(KEY.Context_Connection, DEFAULT.Context_Connection); - _currentLanguage = ConvertValueToString(KEY.Current_Language, DEFAULT.Current_Language); - _dataSource = ConvertValueToString(KEY.Data_Source, DEFAULT.Data_Source); + _applicationName = ConvertValueToString(KEY.Application_Name, DbConnectionStringDefaults.ApplicationName); + _attachDBFileName = ConvertValueToString(KEY.AttachDBFilename, DbConnectionStringDefaults.AttachDBFilename); + _contextConnection = ConvertValueToBoolean(KEY.Context_Connection, DbConnectionStringDefaults.ContextConnection); + _currentLanguage = ConvertValueToString(KEY.Current_Language, DbConnectionStringDefaults.CurrentLanguage); + _dataSource = ConvertValueToString(KEY.Data_Source, DbConnectionStringDefaults.DataSource); _localDBInstance = LocalDbApi.GetLocalDbInstanceNameFromServerName(_dataSource); - _failoverPartner = ConvertValueToString(KEY.FailoverPartner, DEFAULT.FailoverPartner); - _initialCatalog = ConvertValueToString(KEY.Initial_Catalog, DEFAULT.Initial_Catalog); - _password = ConvertValueToString(KEY.Password, DEFAULT.Password); - _trustServerCertificate = ConvertValueToBoolean(KEY.TrustServerCertificate, DEFAULT.TrustServerCertificate); + _failoverPartner = ConvertValueToString(KEY.FailoverPartner, DbConnectionStringDefaults.FailoverPartner); + _initialCatalog = ConvertValueToString(KEY.Initial_Catalog, DbConnectionStringDefaults.InitialCatalog); + _password = ConvertValueToString(KEY.Password, DbConnectionStringDefaults.Password); + _trustServerCertificate = ConvertValueToBoolean(KEY.TrustServerCertificate, DbConnectionStringDefaults.TrustServerCertificate); _authType = ConvertValueToAuthenticationType(); _columnEncryptionSetting = ConvertValueToColumnEncryptionSetting(); - _enclaveAttestationUrl = ConvertValueToString(KEY.EnclaveAttestationUrl, DEFAULT.EnclaveAttestationUrl); + _enclaveAttestationUrl = ConvertValueToString(KEY.EnclaveAttestationUrl, DbConnectionStringDefaults.EnclaveAttestationUrl); _attestationProtocol = ConvertValueToAttestationProtocol(); _ipAddressPreference = ConvertValueToIPAddressPreference(); - _hostNameInCertificate = ConvertValueToString(KEY.HostNameInCertificate, DEFAULT.HostNameInCertificate); - _serverCertificate = ConvertValueToString(KEY.ServerCertificate, DEFAULT.ServerCertificate); - _serverSPN = ConvertValueToString(KEY.Server_SPN, DEFAULT.ServerSPN); - _failoverPartnerSPN = ConvertValueToString(KEY.Failover_Partner_SPN, DEFAULT.FailoverPartnerSPN); + _hostNameInCertificate = ConvertValueToString(KEY.HostNameInCertificate, DbConnectionStringDefaults.HostNameInCertificate); + _serverCertificate = ConvertValueToString(KEY.ServerCertificate, DbConnectionStringDefaults.ServerCertificate); + _serverSPN = ConvertValueToString(KEY.Server_SPN, DbConnectionStringDefaults.ServerSPN); + _failoverPartnerSPN = ConvertValueToString(KEY.Failover_Partner_SPN, DbConnectionStringDefaults.FailoverPartnerSPN); // Temporary string - this value is stored internally as an enum. string typeSystemVersionString = ConvertValueToString(KEY.Type_System_Version, null); string transactionBindingString = ConvertValueToString(KEY.TransactionBinding, null); - _userID = ConvertValueToString(KEY.User_ID, DEFAULT.User_ID); + _userID = ConvertValueToString(KEY.User_ID, DbConnectionStringDefaults.UserID); _workstationId = ConvertValueToString(KEY.Workstation_Id, null); if (_contextConnection) @@ -393,8 +344,8 @@ internal SqlConnectionString(string connectionString) : base(connectionString, G #if NETFRAMEWORK // SQLPT 41700: Ignore ResetConnection=False (still validate the keyword/value) - _connectionReset = ConvertValueToBoolean(KEY.Connection_Reset, DEFAULT.Connection_Reset); - _transparentNetworkIPResolution = ConvertValueToBoolean(KEY.TransparentNetworkIPResolution, DEFAULT.TransparentNetworkIPResolution); + _connectionReset = ConvertValueToBoolean(KEY.Connection_Reset, DbConnectionStringDefaults.ConnectionReset); + _transparentNetworkIPResolution = ConvertValueToBoolean(KEY.TransparentNetworkIPResolution, DbConnectionStringDefaults.TransparentNetworkIPResolution); _networkLibrary = ConvertValueToString(KEY.Network_Library, null); if (_networkLibrary != null) @@ -409,7 +360,7 @@ internal SqlConnectionString(string connectionString) : base(connectionString, G } else { - _networkLibrary = DEFAULT.Network_Library; + _networkLibrary = DbConnectionStringDefaults.NetworkLibrary; } #endif // NETFRAMEWORK @@ -437,7 +388,7 @@ internal SqlConnectionString(string connectionString) : base(connectionString, G ValidateValueLength(_workstationId, TdsEnums.MAXLEN_HOSTNAME, KEY.Workstation_Id); } - if (!string.Equals(DEFAULT.FailoverPartner, _failoverPartner, StringComparison.OrdinalIgnoreCase)) + if (!string.Equals(DbConnectionStringDefaults.FailoverPartner, _failoverPartner, StringComparison.OrdinalIgnoreCase)) { // fail-over partner is set @@ -446,7 +397,7 @@ internal SqlConnectionString(string connectionString) : base(connectionString, G throw SQL.MultiSubnetFailoverWithFailoverPartner(serverProvidedFailoverPartner: false, internalConnection: null); } - if (string.Equals(DEFAULT.Initial_Catalog, _initialCatalog, StringComparison.OrdinalIgnoreCase)) + if (string.Equals(DbConnectionStringDefaults.InitialCatalog, _initialCatalog, StringComparison.OrdinalIgnoreCase)) { throw ADP.MissingConnectionOptionValue(KEY.FailoverPartner, KEY.Initial_Catalog); } @@ -930,7 +881,7 @@ internal ApplicationIntent ConvertValueToApplicationIntent() { if (!TryGetParsetableValue(KEY.ApplicationIntent, out string value)) { - return DEFAULT.ApplicationIntent; + return DbConnectionStringDefaults.ApplicationIntent; } // when wrong value is used in the connection string provided to SqlConnection.ConnectionString or c-tor, @@ -964,7 +915,7 @@ internal SqlAuthenticationMethod ConvertValueToAuthenticationType() { if (!TryGetParsetableValue(KEY.Authentication, out string value)) { - return DEFAULT.Authentication; + return DbConnectionStringDefaults.Authentication; } try @@ -989,7 +940,7 @@ internal SqlConnectionColumnEncryptionSetting ConvertValueToColumnEncryptionSett { if (!TryGetParsetableValue(KEY.ColumnEncryptionSetting, out string value)) { - return DEFAULT.ColumnEncryptionSetting; + return DbConnectionStringDefaults.ColumnEncryptionSetting; } try @@ -1014,7 +965,7 @@ internal SqlConnectionAttestationProtocol ConvertValueToAttestationProtocol() { if (!TryGetParsetableValue(KEY.AttestationProtocol, out string value)) { - return DEFAULT.AttestationProtocol; + return DbConnectionStringDefaults.AttestationProtocol; } try @@ -1039,7 +990,7 @@ internal SqlConnectionIPAddressPreference ConvertValueToIPAddressPreference() { if (!TryGetParsetableValue(KEY.IPAddressPreference, out string value)) { - return DEFAULT.IpAddressPreference; + return DbConnectionStringDefaults.IPAddressPreference; } try @@ -1060,7 +1011,7 @@ internal PoolBlockingPeriod ConvertValueToPoolBlockingPeriod() { if (!TryGetParsetableValue(KEY.PoolBlockingPeriod, out string value)) { - return DEFAULT.PoolBlockingPeriod; + return DbConnectionStringDefaults.PoolBlockingPeriod; } try @@ -1077,7 +1028,7 @@ internal SqlConnectionEncryptOption ConvertValueToSqlConnectionEncrypt() { if (!TryGetParsetableValue(KEY.Encrypt, out string value)) { - return DEFAULT.Encrypt; + return DbConnectionStringDefaults.Encrypt; } try diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/TdsParserHelperClasses.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/TdsParserHelperClasses.cs index 873d87c92e..75eed599ce 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/TdsParserHelperClasses.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/TdsParserHelperClasses.cs @@ -14,6 +14,7 @@ using System.Security.Authentication; using System.Text; using Microsoft.Data.Common; +using Microsoft.Data.Common.ConnectionString; namespace Microsoft.Data.SqlClient { @@ -100,22 +101,22 @@ internal RoutingInfo(byte protocol, ushort port, string servername) internal sealed class SqlLogin { internal SqlAuthenticationMethod authentication = SqlAuthenticationMethod.NotSpecified; // Authentication type - internal int timeout; // login timeout - internal bool userInstance = false; // user instance - internal string hostName = ""; // client machine name - internal string userName = ""; // user id - internal string password = ""; // password - internal string applicationName = ""; // application name - internal string serverName = ""; // server name - internal string language = ""; // initial language - internal string database = ""; // initial database - internal string attachDBFilename = ""; // DB filename to be attached - internal bool useReplication = false; // user login for replication - internal string newPassword = ""; // new password for reset password + internal int timeout; // login timeout + internal bool userInstance = false; // user instance + internal string hostName = ""; // client machine name + internal string userName = ""; // user id + internal string password = ""; // password + internal string applicationName = ""; // application name + internal string serverName = ""; // server name + internal string language = ""; // initial language + internal string database = ""; // initial database + internal string attachDBFilename = ""; // DB filename to be attached + internal bool useReplication = false; // user login for replication + internal string newPassword = ""; // new password for reset password internal bool useSSPI = false; // use integrated security - internal int packetSize = SqlConnectionString.DEFAULT.Packet_Size; // packet size - internal bool readOnlyIntent = false; // read-only intent - internal SqlCredential credential; // user id and password in SecureString + internal int packetSize = DbConnectionStringDefaults.PacketSize; // packet size + internal bool readOnlyIntent = false; // read-only intent + internal SqlCredential credential; // user id and password in SecureString internal SecureString newSecurePassword; } From 13678c493669572599b2391fe61ec5c7b6dbe3fe Mon Sep 17 00:00:00 2001 From: Ben Russell Date: Thu, 5 Jun 2025 15:21:36 -0500 Subject: [PATCH 03/10] Rename DbConnectionStringDefaults to match naming conventions --- .../DbConnectionStringDefaults.cs | 14 +++++----- .../IpAddressPreferenceUtilities.cs | 4 +-- .../Data/SqlClient/SqlConnectionString.cs | 12 ++++---- .../SqlClient/SqlConnectionStringBuilder.cs | 28 +++++++++---------- 4 files changed, 29 insertions(+), 29 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionStringDefaults.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionStringDefaults.cs index 41a8058b5c..20831c4912 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionStringDefaults.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionStringDefaults.cs @@ -15,7 +15,7 @@ internal static class DbConnectionStringDefaults #else "Core Microsoft SqlClient Data Provider"; #endif - internal const string AttachDBFilename = ""; + internal const string AttachDbFilename = ""; internal const SqlConnectionAttestationProtocol AttestationProtocol = SqlConnectionAttestationProtocol.NotSpecified; internal static readonly SqlAuthenticationMethod Authentication = SqlAuthenticationMethod.NotSpecified; internal const SqlConnectionColumnEncryptionSetting ColumnEncryptionSetting = SqlConnectionColumnEncryptionSetting.Disabled; @@ -30,11 +30,11 @@ internal static class DbConnectionStringDefaults internal static readonly SqlConnectionEncryptOption Encrypt = SqlConnectionEncryptOption.Mandatory; internal const bool Enlist = true; internal const string FailoverPartner = ""; - internal const string FailoverPartnerSPN = ""; + internal const string FailoverPartnerSpn = ""; internal const string HostNameInCertificate = ""; internal const string InitialCatalog = ""; internal const bool IntegratedSecurity = false; - internal const SqlConnectionIPAddressPreference IPAddressPreference = SqlConnectionIPAddressPreference.IPv4First; + internal const SqlConnectionIPAddressPreference IpAddressPreference = SqlConnectionIPAddressPreference.IPv4First; internal const int LoadBalanceTimeout = 0; // default of 0 means don't use internal const int MaxPoolSize = 100; internal const int MinPoolSize = 0; @@ -47,17 +47,17 @@ internal static class DbConnectionStringDefaults internal const bool Pooling = true; internal const bool Replication = false; internal const string ServerCertificate = ""; - internal const string ServerSPN = ""; + internal const string ServerSpn = ""; internal const string TransactionBinding = "Implicit Unbind"; internal const bool TrustServerCertificate = false; internal const string TypeSystemVersion = "Latest"; - internal const string UserID = ""; + internal const string UserId = ""; internal const bool UserInstance = false; - internal const string WorkstationID = ""; + internal const string WorkstationId = ""; #if NETFRAMEWORK internal const bool ConnectionReset = true; - internal static readonly bool TransparentNetworkIPResolution = !LocalAppContextSwitches.DisableTnirByDefault; + internal static readonly bool TransparentNetworkIpResolution = !LocalAppContextSwitches.DisableTnirByDefault; internal const string NetworkLibrary = ""; #endif } diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/IpAddressPreferenceUtilities.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/IpAddressPreferenceUtilities.cs index a9e59dfe2b..747ae157e4 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/IpAddressPreferenceUtilities.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/IpAddressPreferenceUtilities.cs @@ -34,7 +34,7 @@ internal static bool TryConvertToIPAddressPreference(string value, out SqlConnec { if (!s_preferenceNames.TryGetValue(value, out result)) { - result = DbConnectionStringDefaults.IPAddressPreference; + result = DbConnectionStringDefaults.IpAddressPreference; return false; } return true; @@ -55,7 +55,7 @@ internal static SqlConnectionIPAddressPreference ConvertToIPAddressPreference(st { if (value is null) { - return DbConnectionStringDefaults.IPAddressPreference; // IPv4First + return DbConnectionStringDefaults.IpAddressPreference; // IPv4First } if (value is string sValue) diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs index fb2bcdcc72..c4c27f82ce 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs @@ -277,7 +277,7 @@ internal SqlConnectionString(string connectionString) : base(connectionString, G _applicationIntent = ConvertValueToApplicationIntent(); _applicationName = ConvertValueToString(KEY.Application_Name, DbConnectionStringDefaults.ApplicationName); - _attachDBFileName = ConvertValueToString(KEY.AttachDBFilename, DbConnectionStringDefaults.AttachDBFilename); + _attachDBFileName = ConvertValueToString(KEY.AttachDBFilename, DbConnectionStringDefaults.AttachDbFilename); _contextConnection = ConvertValueToBoolean(KEY.Context_Connection, DbConnectionStringDefaults.ContextConnection); _currentLanguage = ConvertValueToString(KEY.Current_Language, DbConnectionStringDefaults.CurrentLanguage); _dataSource = ConvertValueToString(KEY.Data_Source, DbConnectionStringDefaults.DataSource); @@ -293,14 +293,14 @@ internal SqlConnectionString(string connectionString) : base(connectionString, G _ipAddressPreference = ConvertValueToIPAddressPreference(); _hostNameInCertificate = ConvertValueToString(KEY.HostNameInCertificate, DbConnectionStringDefaults.HostNameInCertificate); _serverCertificate = ConvertValueToString(KEY.ServerCertificate, DbConnectionStringDefaults.ServerCertificate); - _serverSPN = ConvertValueToString(KEY.Server_SPN, DbConnectionStringDefaults.ServerSPN); - _failoverPartnerSPN = ConvertValueToString(KEY.Failover_Partner_SPN, DbConnectionStringDefaults.FailoverPartnerSPN); + _serverSPN = ConvertValueToString(KEY.Server_SPN, DbConnectionStringDefaults.ServerSpn); + _failoverPartnerSPN = ConvertValueToString(KEY.Failover_Partner_SPN, DbConnectionStringDefaults.FailoverPartnerSpn); // Temporary string - this value is stored internally as an enum. string typeSystemVersionString = ConvertValueToString(KEY.Type_System_Version, null); string transactionBindingString = ConvertValueToString(KEY.TransactionBinding, null); - _userID = ConvertValueToString(KEY.User_ID, DbConnectionStringDefaults.UserID); + _userID = ConvertValueToString(KEY.User_ID, DbConnectionStringDefaults.UserId); _workstationId = ConvertValueToString(KEY.Workstation_Id, null); if (_contextConnection) @@ -345,7 +345,7 @@ internal SqlConnectionString(string connectionString) : base(connectionString, G #if NETFRAMEWORK // SQLPT 41700: Ignore ResetConnection=False (still validate the keyword/value) _connectionReset = ConvertValueToBoolean(KEY.Connection_Reset, DbConnectionStringDefaults.ConnectionReset); - _transparentNetworkIPResolution = ConvertValueToBoolean(KEY.TransparentNetworkIPResolution, DbConnectionStringDefaults.TransparentNetworkIPResolution); + _transparentNetworkIPResolution = ConvertValueToBoolean(KEY.TransparentNetworkIPResolution, DbConnectionStringDefaults.TransparentNetworkIpResolution); _networkLibrary = ConvertValueToString(KEY.Network_Library, null); if (_networkLibrary != null) @@ -990,7 +990,7 @@ internal SqlConnectionIPAddressPreference ConvertValueToIPAddressPreference() { if (!TryGetParsetableValue(KEY.IPAddressPreference, out string value)) { - return DbConnectionStringDefaults.IPAddressPreference; + return DbConnectionStringDefaults.IpAddressPreference; } try 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 6c3e5989f4..dd829e9f28 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs @@ -87,7 +87,7 @@ private enum Keywords private ApplicationIntent _applicationIntent = DbConnectionStringDefaults.ApplicationIntent; private string _applicationName = DbConnectionStringDefaults.ApplicationName; - private string _attachDBFilename = DbConnectionStringDefaults.AttachDBFilename; + private string _attachDBFilename = DbConnectionStringDefaults.AttachDbFilename; private string _currentLanguage = DbConnectionStringDefaults.CurrentLanguage; private string _dataSource = DbConnectionStringDefaults.DataSource; private string _failoverPartner = DbConnectionStringDefaults.FailoverPartner; @@ -95,8 +95,8 @@ private enum Keywords 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 string _userID = DbConnectionStringDefaults.UserId; + private string _workstationID = DbConnectionStringDefaults.WorkstationId; private int _commandTimeout = DbConnectionStringDefaults.CommandTimeout; private int _connectTimeout = DbConnectionStringDefaults.ConnectTimeout; @@ -124,13 +124,13 @@ private enum Keywords private SqlConnectionColumnEncryptionSetting _columnEncryptionSetting = DbConnectionStringDefaults.ColumnEncryptionSetting; private string _enclaveAttestationUrl = DbConnectionStringDefaults.EnclaveAttestationUrl; private SqlConnectionAttestationProtocol _attestationProtocol = DbConnectionStringDefaults.AttestationProtocol; - private SqlConnectionIPAddressPreference _ipAddressPreference = DbConnectionStringDefaults.IPAddressPreference; - private string _serverSPN = DbConnectionStringDefaults.ServerSPN; - private string _failoverPartnerSPN = DbConnectionStringDefaults.FailoverPartnerSPN; + private SqlConnectionIPAddressPreference _ipAddressPreference = DbConnectionStringDefaults.IpAddressPreference; + private string _serverSPN = DbConnectionStringDefaults.ServerSpn; + private string _failoverPartnerSPN = DbConnectionStringDefaults.FailoverPartnerSpn; #if NETFRAMEWORK private bool _connectionReset = DbConnectionStringDefaults.ConnectionReset; - private bool _transparentNetworkIPResolution = DbConnectionStringDefaults.TransparentNetworkIPResolution; + private bool _transparentNetworkIPResolution = DbConnectionStringDefaults.TransparentNetworkIpResolution; private string _networkLibrary = DbConnectionStringDefaults.NetworkLibrary; #endif #endregion //Fields @@ -429,7 +429,7 @@ private void Reset(Keywords index) _applicationName = DbConnectionStringDefaults.ApplicationName; break; case Keywords.AttachDBFilename: - _attachDBFilename = DbConnectionStringDefaults.AttachDBFilename; + _attachDBFilename = DbConnectionStringDefaults.AttachDbFilename; break; case Keywords.Authentication: _authentication = DbConnectionStringDefaults.Authentication; @@ -516,13 +516,13 @@ private void Reset(Keywords index) _typeSystemVersion = DbConnectionStringDefaults.TypeSystemVersion; break; case Keywords.UserID: - _userID = DbConnectionStringDefaults.UserID; + _userID = DbConnectionStringDefaults.UserId; break; case Keywords.UserInstance: _userInstance = DbConnectionStringDefaults.UserInstance; break; case Keywords.WorkstationID: - _workstationID = DbConnectionStringDefaults.WorkstationID; + _workstationID = DbConnectionStringDefaults.WorkstationId; break; case Keywords.ColumnEncryptionSetting: _columnEncryptionSetting = DbConnectionStringDefaults.ColumnEncryptionSetting; @@ -534,13 +534,13 @@ private void Reset(Keywords index) _attestationProtocol = DbConnectionStringDefaults.AttestationProtocol; break; case Keywords.IPAddressPreference: - _ipAddressPreference = DbConnectionStringDefaults.IPAddressPreference; + _ipAddressPreference = DbConnectionStringDefaults.IpAddressPreference; break; case Keywords.ServerSPN: - _serverSPN = DbConnectionStringDefaults.ServerSPN; + _serverSPN = DbConnectionStringDefaults.ServerSpn; break; case Keywords.FailoverPartnerSPN: - _failoverPartnerSPN = DbConnectionStringDefaults.FailoverPartnerSPN; + _failoverPartnerSPN = DbConnectionStringDefaults.FailoverPartnerSpn; break; case Keywords.ContextConnection: break; @@ -549,7 +549,7 @@ private void Reset(Keywords index) _connectionReset = DbConnectionStringDefaults.ConnectionReset; break; case Keywords.TransparentNetworkIPResolution: - _transparentNetworkIPResolution = DbConnectionStringDefaults.TransparentNetworkIPResolution; + _transparentNetworkIPResolution = DbConnectionStringDefaults.TransparentNetworkIpResolution; break; case Keywords.NetworkLibrary: _networkLibrary = DbConnectionStringDefaults.NetworkLibrary; From ace94e686741227452c8e4d1bfdfab7d10fa8600 Mon Sep 17 00:00:00 2001 From: Ben Russell Date: Thu, 5 Jun 2025 15:37:45 -0500 Subject: [PATCH 04/10] Remove SqlConnectionString.KEY and replace with DbConnectionStringKeywords --- .../Microsoft/Data/SqlClient/SqlConnection.cs | 4 +- .../Microsoft/Data/SqlClient/SqlConnection.cs | 4 +- .../SqlClient/SqlInternalConnectionTds.cs | 2 +- .../SqlConnectionPoolGroupProviderInfo.cs | 9 +- .../SqlClient/SqlConnectionEncryptOption.cs | 3 +- .../Data/SqlClient/SqlConnectionString.cs | 398 ++++++++---------- 6 files changed, 183 insertions(+), 237 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnection.cs b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnection.cs index 77745f6bbb..93d9868eb0 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnection.cs +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnection.cs @@ -2272,7 +2272,7 @@ public static void ChangePassword(string connectionString, string newPassword) } if (!string.IsNullOrEmpty(connectionOptions.AttachDBFilename)) { - throw SQL.ChangePasswordUseOfUnallowedKey(SqlConnectionString.KEY.AttachDBFilename); + throw SQL.ChangePasswordUseOfUnallowedKey(DbConnectionStringKeywords.AttachDBFilename); } ChangePassword(connectionString, connectionOptions, null, newPassword, null); @@ -2329,7 +2329,7 @@ public static void ChangePassword(string connectionString, SqlCredential credent if (!string.IsNullOrEmpty(connectionOptions.AttachDBFilename)) { - throw SQL.ChangePasswordUseOfUnallowedKey(SqlConnectionString.KEY.AttachDBFilename); + throw SQL.ChangePasswordUseOfUnallowedKey(DbConnectionStringKeywords.AttachDBFilename); } ChangePassword(connectionString, connectionOptions, credential, null, newSecurePassword); diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnection.cs b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnection.cs index ac025861fe..02f4484401 100644 --- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnection.cs +++ b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnection.cs @@ -2195,7 +2195,7 @@ public static void ChangePassword(string connectionString, string newPassword) } if (!string.IsNullOrEmpty(connectionOptions.AttachDBFilename)) { - throw SQL.ChangePasswordUseOfUnallowedKey(SqlConnectionString.KEY.AttachDBFilename); + throw SQL.ChangePasswordUseOfUnallowedKey(DbConnectionStringKeywords.AttachDBFilename); } PermissionSet permissionSet = connectionOptions.CreatePermissionSet(); @@ -2255,7 +2255,7 @@ public static void ChangePassword(string connectionString, SqlCredential credent if (!string.IsNullOrEmpty(connectionOptions.AttachDBFilename)) { - throw SQL.ChangePasswordUseOfUnallowedKey(SqlConnectionString.KEY.AttachDBFilename); + throw SQL.ChangePasswordUseOfUnallowedKey(DbConnectionStringKeywords.AttachDBFilename); } PermissionSet permissionSet = connectionOptions.CreatePermissionSet(); diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs index d460c61619..9546e5142a 100644 --- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs +++ b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs @@ -1795,7 +1795,7 @@ private bool ShouldDisableTnir(SqlConnectionString connectionOptions) // Check if the user had explicitly specified the TNIR option in the connection string or the connection string builder. // If the user has specified the option in the connection string explicitly, then we shouldn't disable TNIR. - bool isTnirExplicitlySpecifiedInConnectionOptions = connectionOptions.Parsetable.ContainsKey(SqlConnectionString.KEY.TransparentNetworkIPResolution); + bool isTnirExplicitlySpecifiedInConnectionOptions = connectionOptions.Parsetable.ContainsKey(DbConnectionStringKeywords.TransparentNetworkIPResolution); return isTnirExplicitlySpecifiedInConnectionOptions ? false : (isAzureEndPoint || isFedAuthEnabled); } diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/SqlConnectionPoolGroupProviderInfo.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/SqlConnectionPoolGroupProviderInfo.cs index 1fe1768c0a..b83a2be4bb 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/SqlConnectionPoolGroupProviderInfo.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/SqlConnectionPoolGroupProviderInfo.cs @@ -3,6 +3,7 @@ // See the LICENSE file in the project root for more information. using System.Security; +using Microsoft.Data.Common.ConnectionString; namespace Microsoft.Data.SqlClient.ConnectionPool { @@ -103,14 +104,14 @@ private PermissionSet CreateFailoverPermission(SqlConnectionString userConnectio // the server, we will use that name over what was specified // in the original connection string. - if (userConnectionOptions.ContainsKey(SqlConnectionString.KEY.FailoverPartner) && - userConnectionOptions[SqlConnectionString.KEY.FailoverPartner] == null) + if (userConnectionOptions.ContainsKey(DbConnectionStringKeywords.FailoverPartner) && + userConnectionOptions[DbConnectionStringKeywords.FailoverPartner] == null) { - keywordToReplace = SqlConnectionString.KEY.Data_Source; + keywordToReplace = DbConnectionStringKeywords.DataSource; } else { - keywordToReplace = SqlConnectionString.KEY.FailoverPartner; + keywordToReplace = DbConnectionStringKeywords.FailoverPartner; } string failoverConnectionString = userConnectionOptions.ExpandKeyword(keywordToReplace, actualFailoverPartner); diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionEncryptOption.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionEncryptOption.cs index 997833437f..833132c944 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionEncryptOption.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionEncryptOption.cs @@ -5,6 +5,7 @@ using System; using System.ComponentModel; using Microsoft.Data.Common; +using Microsoft.Data.Common.ConnectionString; namespace Microsoft.Data.SqlClient { @@ -41,7 +42,7 @@ public static SqlConnectionEncryptOption Parse(string value) } else { - throw ADP.InvalidConnectionOptionValue(SqlConnectionString.KEY.Encrypt); + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.Encrypt); } } diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs index c4c27f82ce..d55c7fb886 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs @@ -24,62 +24,6 @@ internal sealed class SqlConnectionString : DbConnectionOptions // used by pooling classes so it is much easier to verify correctness // when not worried about the class being modified during execution - // @TODO: Remove in favor of DbConnectionStringKeywords - // SqlConnection ConnectionString Options - internal static class KEY - { - internal const string ApplicationIntent = DbConnectionStringKeywords.ApplicationIntent; - internal const string Application_Name = DbConnectionStringKeywords.ApplicationName; - internal const string AttachDBFilename = DbConnectionStringKeywords.AttachDBFilename; - internal const string PoolBlockingPeriod = DbConnectionStringKeywords.PoolBlockingPeriod; - internal const string ColumnEncryptionSetting = DbConnectionStringKeywords.ColumnEncryptionSetting; - internal const string EnclaveAttestationUrl = DbConnectionStringKeywords.EnclaveAttestationUrl; - internal const string AttestationProtocol = DbConnectionStringKeywords.AttestationProtocol; - internal const string IPAddressPreference = DbConnectionStringKeywords.IPAddressPreference; - - internal const string Command_Timeout = DbConnectionStringKeywords.CommandTimeout; - internal const string Connect_Timeout = DbConnectionStringKeywords.ConnectTimeout; - internal const string Connection_Reset = DbConnectionStringKeywords.ConnectionReset; - internal const string Context_Connection = DbConnectionStringKeywords.ContextConnection; - internal const string Current_Language = DbConnectionStringKeywords.CurrentLanguage; - internal const string Data_Source = DbConnectionStringKeywords.DataSource; - - // Encrypt related - internal const string Encrypt = DbConnectionStringKeywords.Encrypt; - internal const string HostNameInCertificate = DbConnectionStringKeywords.HostNameInCertificate; - internal const string ServerCertificate = DbConnectionStringKeywords.ServerCertificate; - - internal const string Enlist = DbConnectionStringKeywords.Enlist; - internal const string FailoverPartner = DbConnectionStringKeywords.FailoverPartner; - internal const string Initial_Catalog = DbConnectionStringKeywords.InitialCatalog; - internal const string Integrated_Security = DbConnectionStringKeywords.IntegratedSecurity; - internal const string Load_Balance_Timeout = DbConnectionStringKeywords.LoadBalanceTimeout; - internal const string MARS = DbConnectionStringKeywords.MultipleActiveResultSets; - internal const string Max_Pool_Size = DbConnectionStringKeywords.MaxPoolSize; - internal const string Min_Pool_Size = DbConnectionStringKeywords.MinPoolSize; - internal const string MultiSubnetFailover = DbConnectionStringKeywords.MultiSubnetFailover; - internal const string Network_Library = DbConnectionStringKeywords.NetworkLibrary; - internal const string Packet_Size = DbConnectionStringKeywords.PacketSize; - internal const string Password = DbConnectionStringKeywords.Password; - internal const string Persist_Security_Info = DbConnectionStringKeywords.PersistSecurityInfo; - internal const string Pooling = DbConnectionStringKeywords.Pooling; - internal const string TransactionBinding = DbConnectionStringKeywords.TransactionBinding; - internal const string TrustServerCertificate = DbConnectionStringKeywords.TrustServerCertificate; - internal const string Type_System_Version = DbConnectionStringKeywords.TypeSystemVersion; - internal const string User_ID = DbConnectionStringKeywords.UserID; - internal const string User_Instance = DbConnectionStringKeywords.UserInstance; - internal const string Workstation_Id = DbConnectionStringKeywords.WorkstationID; - internal const string Replication = DbConnectionStringKeywords.Replication; - internal const string Connect_Retry_Count = DbConnectionStringKeywords.ConnectRetryCount; - internal const string Connect_Retry_Interval = DbConnectionStringKeywords.ConnectRetryInterval; - internal const string Authentication = DbConnectionStringKeywords.Authentication; - internal const string Server_SPN = DbConnectionStringKeywords.ServerSPN; - internal const string Failover_Partner_SPN = DbConnectionStringKeywords.FailoverPartnerSPN; -#if NETFRAMEWORK - internal const string TransparentNetworkIPResolution = DbConnectionStringKeywords.TransparentNetworkIPResolution; -#endif // NETFRAMEWORK - } - // @TODO: Remove in favor DbConnectionStringSynonyms // Constant for the number of duplicate options in the connection string private static class SYNONYM @@ -243,13 +187,13 @@ internal static class TRANSACTIONBINDING // SxS: reading Software\\Microsoft\\MSSQLServer\\Client\\SuperSocketNetLib\Encrypt value from registry [ResourceExposure(ResourceScope.None)] [ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)] - internal SqlConnectionString(string connectionString) : base(connectionString, GetParseSynonyms()) + internal SqlConnectionString(string connectionString): base(connectionString, GetParseSynonyms()) { #if !NETFRAMEWORK - ThrowUnsupportedIfKeywordSet(KEY.Connection_Reset); + ThrowUnsupportedIfKeywordSet(DbConnectionStringKeywords.ConnectionReset); // Network Library has its own special error message - if (ContainsKey(KEY.Network_Library)) + if (ContainsKey(DbConnectionStringKeywords.NetworkLibrary)) { throw SQL.NetworkLibraryKeywordNotSupported(); } @@ -258,50 +202,50 @@ internal SqlConnectionString(string connectionString) : base(connectionString, G _integratedSecurity = ConvertValueToIntegratedSecurity(); _poolBlockingPeriod = ConvertValueToPoolBlockingPeriod(); _encrypt = ConvertValueToSqlConnectionEncrypt(); - _enlist = ConvertValueToBoolean(KEY.Enlist, DbConnectionStringDefaults.Enlist); - _mars = ConvertValueToBoolean(KEY.MARS, DbConnectionStringDefaults.MultipleActiveResultSets); - _persistSecurityInfo = ConvertValueToBoolean(KEY.Persist_Security_Info, DbConnectionStringDefaults.PersistSecurityInfo); - _pooling = ConvertValueToBoolean(KEY.Pooling, DbConnectionStringDefaults.Pooling); - _replication = ConvertValueToBoolean(KEY.Replication, DbConnectionStringDefaults.Replication); - _userInstance = ConvertValueToBoolean(KEY.User_Instance, DbConnectionStringDefaults.UserInstance); - _multiSubnetFailover = ConvertValueToBoolean(KEY.MultiSubnetFailover, DbConnectionStringDefaults.MultiSubnetFailover); - - _commandTimeout = ConvertValueToInt32(KEY.Command_Timeout, DbConnectionStringDefaults.CommandTimeout); - _connectTimeout = ConvertValueToInt32(KEY.Connect_Timeout, DbConnectionStringDefaults.ConnectTimeout); - _loadBalanceTimeout = ConvertValueToInt32(KEY.Load_Balance_Timeout, DbConnectionStringDefaults.LoadBalanceTimeout); - _maxPoolSize = ConvertValueToInt32(KEY.Max_Pool_Size, DbConnectionStringDefaults.MaxPoolSize); - _minPoolSize = ConvertValueToInt32(KEY.Min_Pool_Size, DbConnectionStringDefaults.MinPoolSize); - _packetSize = ConvertValueToInt32(KEY.Packet_Size, DbConnectionStringDefaults.PacketSize); - _connectRetryCount = ConvertValueToInt32(KEY.Connect_Retry_Count, DbConnectionStringDefaults.ConnectRetryCount); - _connectRetryInterval = ConvertValueToInt32(KEY.Connect_Retry_Interval, DbConnectionStringDefaults.ConnectRetryInterval); + _enlist = ConvertValueToBoolean(DbConnectionStringKeywords.Enlist, DbConnectionStringDefaults.Enlist); + _mars = ConvertValueToBoolean(DbConnectionStringKeywords.MultipleActiveResultSets, DbConnectionStringDefaults.MultipleActiveResultSets); + _persistSecurityInfo = ConvertValueToBoolean(DbConnectionStringKeywords.PersistSecurityInfo, DbConnectionStringDefaults.PersistSecurityInfo); + _pooling = ConvertValueToBoolean(DbConnectionStringKeywords.Pooling, DbConnectionStringDefaults.Pooling); + _replication = ConvertValueToBoolean(DbConnectionStringKeywords.Replication, DbConnectionStringDefaults.Replication); + _userInstance = ConvertValueToBoolean(DbConnectionStringKeywords.UserInstance, DbConnectionStringDefaults.UserInstance); + _multiSubnetFailover = ConvertValueToBoolean(DbConnectionStringKeywords.MultiSubnetFailover, DbConnectionStringDefaults.MultiSubnetFailover); + + _commandTimeout = ConvertValueToInt32(DbConnectionStringKeywords.CommandTimeout, DbConnectionStringDefaults.CommandTimeout); + _connectTimeout = ConvertValueToInt32(DbConnectionStringKeywords.ConnectTimeout, DbConnectionStringDefaults.ConnectTimeout); + _loadBalanceTimeout = ConvertValueToInt32(DbConnectionStringKeywords.LoadBalanceTimeout, DbConnectionStringDefaults.LoadBalanceTimeout); + _maxPoolSize = ConvertValueToInt32(DbConnectionStringKeywords.MaxPoolSize, DbConnectionStringDefaults.MaxPoolSize); + _minPoolSize = ConvertValueToInt32(DbConnectionStringKeywords.MinPoolSize, DbConnectionStringDefaults.MinPoolSize); + _packetSize = ConvertValueToInt32(DbConnectionStringKeywords.PacketSize, DbConnectionStringDefaults.PacketSize); + _connectRetryCount = ConvertValueToInt32(DbConnectionStringKeywords.ConnectRetryCount, DbConnectionStringDefaults.ConnectRetryCount); + _connectRetryInterval = ConvertValueToInt32(DbConnectionStringKeywords.ConnectRetryInterval, DbConnectionStringDefaults.ConnectRetryInterval); _applicationIntent = ConvertValueToApplicationIntent(); - _applicationName = ConvertValueToString(KEY.Application_Name, DbConnectionStringDefaults.ApplicationName); - _attachDBFileName = ConvertValueToString(KEY.AttachDBFilename, DbConnectionStringDefaults.AttachDbFilename); - _contextConnection = ConvertValueToBoolean(KEY.Context_Connection, DbConnectionStringDefaults.ContextConnection); - _currentLanguage = ConvertValueToString(KEY.Current_Language, DbConnectionStringDefaults.CurrentLanguage); - _dataSource = ConvertValueToString(KEY.Data_Source, DbConnectionStringDefaults.DataSource); + _applicationName = ConvertValueToString(DbConnectionStringKeywords.ApplicationName, DbConnectionStringDefaults.ApplicationName); + _attachDBFileName = ConvertValueToString(DbConnectionStringKeywords.AttachDBFilename, DbConnectionStringDefaults.AttachDbFilename); + _contextConnection = ConvertValueToBoolean(DbConnectionStringKeywords.ContextConnection, DbConnectionStringDefaults.ContextConnection); + _currentLanguage = ConvertValueToString(DbConnectionStringKeywords.CurrentLanguage, DbConnectionStringDefaults.CurrentLanguage); + _dataSource = ConvertValueToString(DbConnectionStringKeywords.DataSource, DbConnectionStringDefaults.DataSource); _localDBInstance = LocalDbApi.GetLocalDbInstanceNameFromServerName(_dataSource); - _failoverPartner = ConvertValueToString(KEY.FailoverPartner, DbConnectionStringDefaults.FailoverPartner); - _initialCatalog = ConvertValueToString(KEY.Initial_Catalog, DbConnectionStringDefaults.InitialCatalog); - _password = ConvertValueToString(KEY.Password, DbConnectionStringDefaults.Password); - _trustServerCertificate = ConvertValueToBoolean(KEY.TrustServerCertificate, DbConnectionStringDefaults.TrustServerCertificate); + _failoverPartner = ConvertValueToString(DbConnectionStringKeywords.FailoverPartner, DbConnectionStringDefaults.FailoverPartner); + _initialCatalog = ConvertValueToString(DbConnectionStringKeywords.InitialCatalog, DbConnectionStringDefaults.InitialCatalog); + _password = ConvertValueToString(DbConnectionStringKeywords.Password, DbConnectionStringDefaults.Password); + _trustServerCertificate = ConvertValueToBoolean(DbConnectionStringKeywords.TrustServerCertificate, DbConnectionStringDefaults.TrustServerCertificate); _authType = ConvertValueToAuthenticationType(); _columnEncryptionSetting = ConvertValueToColumnEncryptionSetting(); - _enclaveAttestationUrl = ConvertValueToString(KEY.EnclaveAttestationUrl, DbConnectionStringDefaults.EnclaveAttestationUrl); + _enclaveAttestationUrl = ConvertValueToString(DbConnectionStringKeywords.EnclaveAttestationUrl, DbConnectionStringDefaults.EnclaveAttestationUrl); _attestationProtocol = ConvertValueToAttestationProtocol(); _ipAddressPreference = ConvertValueToIPAddressPreference(); - _hostNameInCertificate = ConvertValueToString(KEY.HostNameInCertificate, DbConnectionStringDefaults.HostNameInCertificate); - _serverCertificate = ConvertValueToString(KEY.ServerCertificate, DbConnectionStringDefaults.ServerCertificate); - _serverSPN = ConvertValueToString(KEY.Server_SPN, DbConnectionStringDefaults.ServerSpn); - _failoverPartnerSPN = ConvertValueToString(KEY.Failover_Partner_SPN, DbConnectionStringDefaults.FailoverPartnerSpn); + _hostNameInCertificate = ConvertValueToString(DbConnectionStringKeywords.HostNameInCertificate, DbConnectionStringDefaults.HostNameInCertificate); + _serverCertificate = ConvertValueToString(DbConnectionStringKeywords.ServerCertificate, DbConnectionStringDefaults.ServerCertificate); + _serverSPN = ConvertValueToString(DbConnectionStringKeywords.ServerSPN, DbConnectionStringDefaults.ServerSpn); + _failoverPartnerSPN = ConvertValueToString(DbConnectionStringKeywords.FailoverPartnerSPN, DbConnectionStringDefaults.FailoverPartnerSpn); // Temporary string - this value is stored internally as an enum. - string typeSystemVersionString = ConvertValueToString(KEY.Type_System_Version, null); - string transactionBindingString = ConvertValueToString(KEY.TransactionBinding, null); + string typeSystemVersionString = ConvertValueToString(DbConnectionStringKeywords.TypeSystemVersion, null); + string transactionBindingString = ConvertValueToString(DbConnectionStringKeywords.TransactionBinding, null); - _userID = ConvertValueToString(KEY.User_ID, DbConnectionStringDefaults.UserId); - _workstationId = ConvertValueToString(KEY.Workstation_Id, null); + _userID = ConvertValueToString(DbConnectionStringKeywords.UserID, DbConnectionStringDefaults.UserId); + _workstationId = ConvertValueToString(DbConnectionStringKeywords.WorkstationID, null); if (_contextConnection) { @@ -310,27 +254,27 @@ internal SqlConnectionString(string connectionString) : base(connectionString, G if (_loadBalanceTimeout < 0) { - throw ADP.InvalidConnectionOptionValue(KEY.Load_Balance_Timeout); + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.LoadBalanceTimeout); } if (_connectTimeout < 0) { - throw ADP.InvalidConnectionOptionValue(KEY.Connect_Timeout); + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.ConnectTimeout); } if (_commandTimeout < 0) { - throw ADP.InvalidConnectionOptionValue(KEY.Command_Timeout); + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.CommandTimeout); } if (_maxPoolSize < 1) { - throw ADP.InvalidConnectionOptionValue(KEY.Max_Pool_Size); + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.MaxPoolSize); } if (_minPoolSize < 0) { - throw ADP.InvalidConnectionOptionValue(KEY.Min_Pool_Size); + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.MinPoolSize); } if (_maxPoolSize < _minPoolSize) { @@ -344,9 +288,9 @@ internal SqlConnectionString(string connectionString) : base(connectionString, G #if NETFRAMEWORK // SQLPT 41700: Ignore ResetConnection=False (still validate the keyword/value) - _connectionReset = ConvertValueToBoolean(KEY.Connection_Reset, DbConnectionStringDefaults.ConnectionReset); - _transparentNetworkIPResolution = ConvertValueToBoolean(KEY.TransparentNetworkIPResolution, DbConnectionStringDefaults.TransparentNetworkIpResolution); - _networkLibrary = ConvertValueToString(KEY.Network_Library, null); + _connectionReset = ConvertValueToBoolean(DbConnectionStringKeywords.ConnectionReset, DbConnectionStringDefaults.ConnectionReset); + _transparentNetworkIPResolution = ConvertValueToBoolean(DbConnectionStringKeywords.TransparentNetworkIPResolution, DbConnectionStringDefaults.TransparentNetworkIpResolution); + _networkLibrary = ConvertValueToString(DbConnectionStringKeywords.NetworkLibrary, null); if (_networkLibrary != null) { // MDAC 83525 @@ -354,7 +298,7 @@ internal SqlConnectionString(string connectionString) : base(connectionString, G Dictionary netlib = NetlibMapping(); if (!netlib.ContainsKey(networkLibrary)) { - throw ADP.InvalidConnectionOptionValue(KEY.Network_Library); + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.NetworkLibrary); } _networkLibrary = netlib[networkLibrary]; } @@ -376,16 +320,16 @@ internal SqlConnectionString(string connectionString) : base(connectionString, G } } - ValidateValueLength(_applicationName, TdsEnums.MAXLEN_APPNAME, KEY.Application_Name); - ValidateValueLength(_currentLanguage, TdsEnums.MAXLEN_LANGUAGE, KEY.Current_Language); - ValidateValueLength(_dataSource, TdsEnums.MAXLEN_SERVERNAME, KEY.Data_Source); - ValidateValueLength(_failoverPartner, TdsEnums.MAXLEN_SERVERNAME, KEY.FailoverPartner); - ValidateValueLength(_initialCatalog, TdsEnums.MAXLEN_DATABASE, KEY.Initial_Catalog); - ValidateValueLength(_password, TdsEnums.MAXLEN_CLIENTSECRET, KEY.Password); - ValidateValueLength(_userID, TdsEnums.MAXLEN_CLIENTID, KEY.User_ID); + ValidateValueLength(_applicationName, TdsEnums.MAXLEN_APPNAME, DbConnectionStringKeywords.ApplicationName); + ValidateValueLength(_currentLanguage, TdsEnums.MAXLEN_LANGUAGE, DbConnectionStringKeywords.CurrentLanguage); + ValidateValueLength(_dataSource, TdsEnums.MAXLEN_SERVERNAME, DbConnectionStringKeywords.DataSource); + ValidateValueLength(_failoverPartner, TdsEnums.MAXLEN_SERVERNAME, DbConnectionStringKeywords.FailoverPartner); + ValidateValueLength(_initialCatalog, TdsEnums.MAXLEN_DATABASE, DbConnectionStringKeywords.InitialCatalog); + ValidateValueLength(_password, TdsEnums.MAXLEN_CLIENTSECRET, DbConnectionStringKeywords.Password); + ValidateValueLength(_userID, TdsEnums.MAXLEN_CLIENTID, DbConnectionStringKeywords.UserID); if (_workstationId != null) { - ValidateValueLength(_workstationId, TdsEnums.MAXLEN_HOSTNAME, KEY.Workstation_Id); + ValidateValueLength(_workstationId, TdsEnums.MAXLEN_HOSTNAME, DbConnectionStringKeywords.WorkstationID); } if (!string.Equals(DbConnectionStringDefaults.FailoverPartner, _failoverPartner, StringComparison.OrdinalIgnoreCase)) @@ -399,19 +343,19 @@ internal SqlConnectionString(string connectionString) : base(connectionString, G if (string.Equals(DbConnectionStringDefaults.InitialCatalog, _initialCatalog, StringComparison.OrdinalIgnoreCase)) { - throw ADP.MissingConnectionOptionValue(KEY.FailoverPartner, KEY.Initial_Catalog); + throw ADP.MissingConnectionOptionValue(DbConnectionStringKeywords.FailoverPartner, DbConnectionStringKeywords.InitialCatalog); } } // expand during construction so that CreatePermissionSet and Expand are consistent - _expandedAttachDBFilename = ExpandDataDirectory(KEY.AttachDBFilename, _attachDBFileName); + _expandedAttachDBFilename = ExpandDataDirectory(DbConnectionStringKeywords.AttachDBFilename, _attachDBFileName); if (_expandedAttachDBFilename != null) { if (0 <= _expandedAttachDBFilename.IndexOf('|')) { - throw ADP.InvalidConnectionOptionValue(KEY.AttachDBFilename); + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.AttachDBFilename); } - ValidateValueLength(_expandedAttachDBFilename, TdsEnums.MAXLEN_ATTACHDBFILE, KEY.AttachDBFilename); + ValidateValueLength(_expandedAttachDBFilename, TdsEnums.MAXLEN_ATTACHDBFILE, DbConnectionStringKeywords.AttachDBFilename); if (_localDBInstance == null) { // fail fast to verify LocalHost when using |DataDirectory| @@ -426,11 +370,11 @@ internal SqlConnectionString(string connectionString) : base(connectionString, G } else if (0 <= _attachDBFileName.IndexOf('|')) { - throw ADP.InvalidConnectionOptionValue(KEY.AttachDBFilename); + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.AttachDBFilename); } else { - ValidateValueLength(_attachDBFileName, TdsEnums.MAXLEN_ATTACHDBFILE, KEY.AttachDBFilename); + ValidateValueLength(_attachDBFileName, TdsEnums.MAXLEN_ATTACHDBFILE, DbConnectionStringKeywords.AttachDBFilename); } _typeSystemAssemblyVersion = s_constTypeSystemAsmVersion10; @@ -467,7 +411,7 @@ internal SqlConnectionString(string connectionString) : base(connectionString, G } else { - throw ADP.InvalidConnectionOptionValue(KEY.Type_System_Version); + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.TypeSystemVersion); } if (string.IsNullOrEmpty(transactionBindingString)) @@ -485,7 +429,7 @@ internal SqlConnectionString(string connectionString) : base(connectionString, G } else { - throw ADP.InvalidConnectionOptionValue(KEY.TransactionBinding); + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.TransactionBinding); } if (_applicationIntent == ApplicationIntent.ReadOnly && !string.IsNullOrEmpty(_failoverPartner)) @@ -603,7 +547,7 @@ internal SqlConnectionString(SqlConnectionString connectionOptions, string dataS _networkLibrary = connectionOptions._networkLibrary; _typeSystemAssemblyVersion = connectionOptions._typeSystemAssemblyVersion; #endif // NETFRAMEWORK - ValidateValueLength(_dataSource, TdsEnums.MAXLEN_SERVERNAME, KEY.Data_Source); + ValidateValueLength(_dataSource, TdsEnums.MAXLEN_SERVERNAME, DbConnectionStringKeywords.DataSource); } internal bool IntegratedSecurity => _integratedSecurity; @@ -675,7 +619,7 @@ protected internal override string Expand() if (_expandedAttachDBFilename != null) { #if NETFRAMEWORK - return ExpandKeyword(KEY.AttachDBFilename, _expandedAttachDBFilename); + return ExpandKeyword(DbConnectionStringKeywords.AttachDBFilename, _expandedAttachDBFilename); #else return ExpandAttachDbFileName(_expandedAttachDBFilename); #endif @@ -721,85 +665,85 @@ internal static Dictionary GetParseSynonyms() int count = SqlConnectionStringBuilder.KeywordsCount + SynonymCount; synonyms = new Dictionary(count, StringComparer.OrdinalIgnoreCase) { - { KEY.ApplicationIntent, KEY.ApplicationIntent }, - { KEY.Application_Name, KEY.Application_Name }, - { KEY.AttachDBFilename, KEY.AttachDBFilename }, - { KEY.AttestationProtocol, KEY.AttestationProtocol}, - { KEY.Authentication, KEY.Authentication }, - { KEY.ColumnEncryptionSetting, KEY.ColumnEncryptionSetting }, - { KEY.Command_Timeout, KEY.Command_Timeout }, - { KEY.Connect_Retry_Count, KEY.Connect_Retry_Count }, - { KEY.Connect_Retry_Interval, KEY.Connect_Retry_Interval }, - { KEY.Connect_Timeout, KEY.Connect_Timeout }, - { KEY.Context_Connection, KEY.Context_Connection }, - { KEY.Current_Language, KEY.Current_Language }, - { KEY.Data_Source, KEY.Data_Source }, - { KEY.EnclaveAttestationUrl, KEY.EnclaveAttestationUrl }, - { KEY.Encrypt, KEY.Encrypt }, - { KEY.Enlist, KEY.Enlist }, - { KEY.FailoverPartner, KEY.FailoverPartner }, - { KEY.Failover_Partner_SPN, KEY.Failover_Partner_SPN }, - { KEY.HostNameInCertificate, KEY.HostNameInCertificate }, - { KEY.ServerCertificate, KEY.ServerCertificate}, - { KEY.Initial_Catalog, KEY.Initial_Catalog }, - { KEY.Integrated_Security, KEY.Integrated_Security }, - { KEY.IPAddressPreference, KEY.IPAddressPreference }, - { KEY.Load_Balance_Timeout, KEY.Load_Balance_Timeout }, - { KEY.MARS, KEY.MARS }, - { KEY.Max_Pool_Size, KEY.Max_Pool_Size }, - { KEY.Min_Pool_Size, KEY.Min_Pool_Size }, - { KEY.MultiSubnetFailover, KEY.MultiSubnetFailover }, - { KEY.Packet_Size, KEY.Packet_Size }, - { KEY.Password, KEY.Password }, - { KEY.Persist_Security_Info, KEY.Persist_Security_Info }, - { KEY.Pooling, KEY.Pooling }, - { KEY.PoolBlockingPeriod, KEY.PoolBlockingPeriod }, - { KEY.Replication, KEY.Replication }, - { KEY.Server_SPN, KEY.Server_SPN }, - { KEY.TrustServerCertificate, KEY.TrustServerCertificate }, - { KEY.TransactionBinding, KEY.TransactionBinding }, - { KEY.Type_System_Version, KEY.Type_System_Version }, - { KEY.User_ID, KEY.User_ID }, - { KEY.User_Instance, KEY.User_Instance }, - { KEY.Workstation_Id, KEY.Workstation_Id }, - - { SYNONYM.IPADDRESSPREFERENCE, KEY.IPAddressPreference }, - { SYNONYM.APP, KEY.Application_Name }, - { SYNONYM.APPLICATIONINTENT, KEY.ApplicationIntent }, - { SYNONYM.EXTENDED_PROPERTIES, KEY.AttachDBFilename }, - { SYNONYM.HOSTNAMEINCERTIFICATE, KEY.HostNameInCertificate }, - { SYNONYM.SERVERCERTIFICATE, KEY.ServerCertificate}, - { SYNONYM.INITIAL_FILE_NAME, KEY.AttachDBFilename }, - { SYNONYM.CONNECTRETRYCOUNT, KEY.Connect_Retry_Count }, - { SYNONYM.CONNECTRETRYINTERVAL, KEY.Connect_Retry_Interval }, - { SYNONYM.CONNECTION_TIMEOUT, KEY.Connect_Timeout }, - { SYNONYM.TIMEOUT, KEY.Connect_Timeout }, - { SYNONYM.LANGUAGE, KEY.Current_Language }, - { SYNONYM.ADDR, KEY.Data_Source }, - { SYNONYM.ADDRESS, KEY.Data_Source }, - { SYNONYM.MULTIPLEACTIVERESULTSETS, KEY.MARS }, - { SYNONYM.MULTISUBNETFAILOVER, KEY.MultiSubnetFailover }, - { SYNONYM.NETWORK_ADDRESS, KEY.Data_Source }, - { SYNONYM.POOLBLOCKINGPERIOD, KEY.PoolBlockingPeriod}, - { SYNONYM.SERVER, KEY.Data_Source }, - { SYNONYM.DATABASE, KEY.Initial_Catalog }, - { SYNONYM.TRUSTED_CONNECTION, KEY.Integrated_Security }, - { SYNONYM.TRUSTSERVERCERTIFICATE, KEY.TrustServerCertificate }, - { SYNONYM.Connection_Lifetime, KEY.Load_Balance_Timeout }, - { SYNONYM.Pwd, KEY.Password }, - { SYNONYM.PERSISTSECURITYINFO, KEY.Persist_Security_Info }, - { SYNONYM.UID, KEY.User_ID }, - { SYNONYM.User, KEY.User_ID }, - { SYNONYM.WSID, KEY.Workstation_Id }, - { SYNONYM.ServerSPN, KEY.Server_SPN }, - { SYNONYM.FailoverPartnerSPN, KEY.Failover_Partner_SPN }, + { DbConnectionStringKeywords.ApplicationIntent, DbConnectionStringKeywords.ApplicationIntent }, + { DbConnectionStringKeywords.ApplicationName, DbConnectionStringKeywords.ApplicationName }, + { DbConnectionStringKeywords.AttachDBFilename, DbConnectionStringKeywords.AttachDBFilename }, + { DbConnectionStringKeywords.AttestationProtocol, DbConnectionStringKeywords.AttestationProtocol}, + { DbConnectionStringKeywords.Authentication, DbConnectionStringKeywords.Authentication }, + { DbConnectionStringKeywords.ColumnEncryptionSetting, DbConnectionStringKeywords.ColumnEncryptionSetting }, + { DbConnectionStringKeywords.CommandTimeout, DbConnectionStringKeywords.CommandTimeout }, + { DbConnectionStringKeywords.ConnectRetryCount, DbConnectionStringKeywords.ConnectRetryCount }, + { DbConnectionStringKeywords.ConnectRetryInterval, DbConnectionStringKeywords.ConnectRetryInterval }, + { DbConnectionStringKeywords.ConnectTimeout, DbConnectionStringKeywords.ConnectTimeout }, + { DbConnectionStringKeywords.ContextConnection, DbConnectionStringKeywords.ContextConnection }, + { DbConnectionStringKeywords.CurrentLanguage, DbConnectionStringKeywords.CurrentLanguage }, + { DbConnectionStringKeywords.DataSource, DbConnectionStringKeywords.DataSource }, + { DbConnectionStringKeywords.EnclaveAttestationUrl, DbConnectionStringKeywords.EnclaveAttestationUrl }, + { DbConnectionStringKeywords.Encrypt, DbConnectionStringKeywords.Encrypt }, + { DbConnectionStringKeywords.Enlist, DbConnectionStringKeywords.Enlist }, + { DbConnectionStringKeywords.FailoverPartner, DbConnectionStringKeywords.FailoverPartner }, + { DbConnectionStringKeywords.FailoverPartnerSPN, DbConnectionStringKeywords.FailoverPartnerSPN }, + { DbConnectionStringKeywords.HostNameInCertificate, DbConnectionStringKeywords.HostNameInCertificate }, + { DbConnectionStringKeywords.ServerCertificate, DbConnectionStringKeywords.ServerCertificate}, + { DbConnectionStringKeywords.InitialCatalog, DbConnectionStringKeywords.InitialCatalog }, + { DbConnectionStringKeywords.IntegratedSecurity, DbConnectionStringKeywords.IntegratedSecurity }, + { DbConnectionStringKeywords.IPAddressPreference, DbConnectionStringKeywords.IPAddressPreference }, + { DbConnectionStringKeywords.LoadBalanceTimeout, DbConnectionStringKeywords.LoadBalanceTimeout }, + { DbConnectionStringKeywords.MultipleActiveResultSets, DbConnectionStringKeywords.MultipleActiveResultSets }, + { DbConnectionStringKeywords.MaxPoolSize, DbConnectionStringKeywords.MaxPoolSize }, + { DbConnectionStringKeywords.MinPoolSize, DbConnectionStringKeywords.MinPoolSize }, + { DbConnectionStringKeywords.MultiSubnetFailover, DbConnectionStringKeywords.MultiSubnetFailover }, + { DbConnectionStringKeywords.PacketSize, DbConnectionStringKeywords.PacketSize }, + { DbConnectionStringKeywords.Password, DbConnectionStringKeywords.Password }, + { DbConnectionStringKeywords.PersistSecurityInfo, DbConnectionStringKeywords.PersistSecurityInfo }, + { DbConnectionStringKeywords.Pooling, DbConnectionStringKeywords.Pooling }, + { DbConnectionStringKeywords.PoolBlockingPeriod, DbConnectionStringKeywords.PoolBlockingPeriod }, + { DbConnectionStringKeywords.Replication, DbConnectionStringKeywords.Replication }, + { DbConnectionStringKeywords.ServerSPN, DbConnectionStringKeywords.ServerSPN }, + { DbConnectionStringKeywords.TrustServerCertificate, DbConnectionStringKeywords.TrustServerCertificate }, + { DbConnectionStringKeywords.TransactionBinding, DbConnectionStringKeywords.TransactionBinding }, + { DbConnectionStringKeywords.TypeSystemVersion, DbConnectionStringKeywords.TypeSystemVersion }, + { DbConnectionStringKeywords.UserID, DbConnectionStringKeywords.UserID }, + { DbConnectionStringKeywords.UserInstance, DbConnectionStringKeywords.UserInstance }, + { DbConnectionStringKeywords.WorkstationID, DbConnectionStringKeywords.WorkstationID }, + + { SYNONYM.IPADDRESSPREFERENCE, DbConnectionStringKeywords.IPAddressPreference }, + { SYNONYM.APP, DbConnectionStringKeywords.ApplicationName }, + { SYNONYM.APPLICATIONINTENT, DbConnectionStringKeywords.ApplicationIntent }, + { SYNONYM.EXTENDED_PROPERTIES, DbConnectionStringKeywords.AttachDBFilename }, + { SYNONYM.HOSTNAMEINCERTIFICATE, DbConnectionStringKeywords.HostNameInCertificate }, + { SYNONYM.SERVERCERTIFICATE, DbConnectionStringKeywords.ServerCertificate}, + { SYNONYM.INITIAL_FILE_NAME, DbConnectionStringKeywords.AttachDBFilename }, + { SYNONYM.CONNECTRETRYCOUNT, DbConnectionStringKeywords.ConnectRetryCount }, + { SYNONYM.CONNECTRETRYINTERVAL, DbConnectionStringKeywords.ConnectRetryInterval }, + { SYNONYM.CONNECTION_TIMEOUT, DbConnectionStringKeywords.ConnectTimeout }, + { SYNONYM.TIMEOUT, DbConnectionStringKeywords.ConnectTimeout }, + { SYNONYM.LANGUAGE, DbConnectionStringKeywords.CurrentLanguage }, + { SYNONYM.ADDR, DbConnectionStringKeywords.DataSource }, + { SYNONYM.ADDRESS, DbConnectionStringKeywords.DataSource }, + { SYNONYM.MULTIPLEACTIVERESULTSETS, DbConnectionStringKeywords.MultipleActiveResultSets }, + { SYNONYM.MULTISUBNETFAILOVER, DbConnectionStringKeywords.MultiSubnetFailover }, + { SYNONYM.NETWORK_ADDRESS, DbConnectionStringKeywords.DataSource }, + { SYNONYM.POOLBLOCKINGPERIOD, DbConnectionStringKeywords.PoolBlockingPeriod}, + { SYNONYM.SERVER, DbConnectionStringKeywords.DataSource }, + { SYNONYM.DATABASE, DbConnectionStringKeywords.InitialCatalog }, + { SYNONYM.TRUSTED_CONNECTION, DbConnectionStringKeywords.IntegratedSecurity }, + { SYNONYM.TRUSTSERVERCERTIFICATE, DbConnectionStringKeywords.TrustServerCertificate }, + { SYNONYM.Connection_Lifetime, DbConnectionStringKeywords.LoadBalanceTimeout }, + { SYNONYM.Pwd, DbConnectionStringKeywords.Password }, + { SYNONYM.PERSISTSECURITYINFO, DbConnectionStringKeywords.PersistSecurityInfo }, + { SYNONYM.UID, DbConnectionStringKeywords.UserID }, + { SYNONYM.User, DbConnectionStringKeywords.UserID }, + { SYNONYM.WSID, DbConnectionStringKeywords.WorkstationID }, + { SYNONYM.ServerSPN, DbConnectionStringKeywords.ServerSPN }, + { SYNONYM.FailoverPartnerSPN, DbConnectionStringKeywords.FailoverPartnerSPN }, #if NETFRAMEWORK - { KEY.Connection_Reset, KEY.Connection_Reset }, - { KEY.Network_Library, KEY.Network_Library }, - { KEY.TransparentNetworkIPResolution, KEY.TransparentNetworkIPResolution }, - { SYNONYM.NET, KEY.Network_Library }, - { SYNONYM.NETWORK, KEY.Network_Library }, - { SYNONYM.TRANSPARENTNETWORKIPRESOLUTION, KEY.TransparentNetworkIPResolution }, + { DbConnectionStringKeywords.ConnectionReset, DbConnectionStringKeywords.ConnectionReset }, + { DbConnectionStringKeywords.NetworkLibrary, DbConnectionStringKeywords.NetworkLibrary }, + { DbConnectionStringKeywords.TransparentNetworkIPResolution, DbConnectionStringKeywords.TransparentNetworkIPResolution }, + { SYNONYM.NET, DbConnectionStringKeywords.NetworkLibrary }, + { SYNONYM.NETWORK, DbConnectionStringKeywords.NetworkLibrary }, + { SYNONYM.TRANSPARENTNETWORKIPRESOLUTION, DbConnectionStringKeywords.TransparentNetworkIPResolution }, #endif // NETFRAMEWORK }; Debug.Assert(synonyms.Count == count, $"incorrect initial ParseSynonyms size {count} v/s {synonyms.Count}"); @@ -820,7 +764,7 @@ internal string ObtainWorkstationId() // since permission to open the connection has been granted // the information is shared with the server, but not directly with the user result = ADP.MachineName(); - ValidateValueLength(result, TdsEnums.MAXLEN_HOSTNAME, KEY.Workstation_Id); + ValidateValueLength(result, TdsEnums.MAXLEN_HOSTNAME, DbConnectionStringKeywords.WorkstationID); } return result; } @@ -854,7 +798,7 @@ internal static void VerifyLocalHostAndFixup(ref string host, bool enforceLocalH { if (enforceLocalHost) { - throw ADP.InvalidConnectionOptionValue(KEY.AttachDBFilename); + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.AttachDBFilename); } } } @@ -879,7 +823,7 @@ private static string GetComputerNameDnsFullyQualified() internal ApplicationIntent ConvertValueToApplicationIntent() { - if (!TryGetParsetableValue(KEY.ApplicationIntent, out string value)) + if (!TryGetParsetableValue(DbConnectionStringKeywords.ApplicationIntent, out string value)) { return DbConnectionStringDefaults.ApplicationIntent; } @@ -888,15 +832,15 @@ internal ApplicationIntent ConvertValueToApplicationIntent() // wrap Format and Overflow exceptions with Argument one, to be consistent with rest of the keyword types (like int and bool) try { - return DbConnectionStringUtilities.ConvertToApplicationIntent(KEY.ApplicationIntent, value); + return DbConnectionStringUtilities.ConvertToApplicationIntent(DbConnectionStringKeywords.ApplicationIntent, value); } catch (FormatException e) { - throw ADP.InvalidConnectionOptionValue(KEY.ApplicationIntent, e); + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.ApplicationIntent, e); } catch (OverflowException e) { - throw ADP.InvalidConnectionOptionValue(KEY.ApplicationIntent, e); + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.ApplicationIntent, e); } // ArgumentException and other types are raised as is (no wrapping) } @@ -913,22 +857,22 @@ internal void ThrowUnsupportedIfKeywordSet(string keyword) internal SqlAuthenticationMethod ConvertValueToAuthenticationType() { - if (!TryGetParsetableValue(KEY.Authentication, out string value)) + if (!TryGetParsetableValue(DbConnectionStringKeywords.Authentication, out string value)) { return DbConnectionStringDefaults.Authentication; } try { - return DbConnectionStringUtilities.ConvertToAuthenticationType(KEY.Authentication, value); + return DbConnectionStringUtilities.ConvertToAuthenticationType(DbConnectionStringKeywords.Authentication, value); } catch (FormatException e) { - throw ADP.InvalidConnectionOptionValue(KEY.Authentication, e); + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.Authentication, e); } catch (OverflowException e) { - throw ADP.InvalidConnectionOptionValue(KEY.Authentication, e); + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.Authentication, e); } } @@ -938,22 +882,22 @@ internal SqlAuthenticationMethod ConvertValueToAuthenticationType() /// internal SqlConnectionColumnEncryptionSetting ConvertValueToColumnEncryptionSetting() { - if (!TryGetParsetableValue(KEY.ColumnEncryptionSetting, out string value)) + if (!TryGetParsetableValue(DbConnectionStringKeywords.ColumnEncryptionSetting, out string value)) { return DbConnectionStringDefaults.ColumnEncryptionSetting; } try { - return DbConnectionStringUtilities.ConvertToColumnEncryptionSetting(KEY.ColumnEncryptionSetting, value); + return DbConnectionStringUtilities.ConvertToColumnEncryptionSetting(DbConnectionStringKeywords.ColumnEncryptionSetting, value); } catch (FormatException e) { - throw ADP.InvalidConnectionOptionValue(KEY.ColumnEncryptionSetting, e); + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.ColumnEncryptionSetting, e); } catch (OverflowException e) { - throw ADP.InvalidConnectionOptionValue(KEY.ColumnEncryptionSetting, e); + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.ColumnEncryptionSetting, e); } } @@ -963,22 +907,22 @@ internal SqlConnectionColumnEncryptionSetting ConvertValueToColumnEncryptionSett /// internal SqlConnectionAttestationProtocol ConvertValueToAttestationProtocol() { - if (!TryGetParsetableValue(KEY.AttestationProtocol, out string value)) + if (!TryGetParsetableValue(DbConnectionStringKeywords.AttestationProtocol, out string value)) { return DbConnectionStringDefaults.AttestationProtocol; } try { - return AttestationProtocolUtilities.ConvertToAttestationProtocol(KEY.AttestationProtocol, value); + return AttestationProtocolUtilities.ConvertToAttestationProtocol(DbConnectionStringKeywords.AttestationProtocol, value); } catch (FormatException e) { - throw ADP.InvalidConnectionOptionValue(KEY.AttestationProtocol, e); + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.AttestationProtocol, e); } catch (OverflowException e) { - throw ADP.InvalidConnectionOptionValue(KEY.AttestationProtocol, e); + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.AttestationProtocol, e); } } @@ -988,60 +932,60 @@ internal SqlConnectionAttestationProtocol ConvertValueToAttestationProtocol() /// internal SqlConnectionIPAddressPreference ConvertValueToIPAddressPreference() { - if (!TryGetParsetableValue(KEY.IPAddressPreference, out string value)) + if (!TryGetParsetableValue(DbConnectionStringKeywords.IPAddressPreference, out string value)) { return DbConnectionStringDefaults.IpAddressPreference; } try { - return IpAddressPreferenceUtilities.ConvertToIPAddressPreference(KEY.IPAddressPreference, value); + return IpAddressPreferenceUtilities.ConvertToIPAddressPreference(DbConnectionStringKeywords.IPAddressPreference, value); } catch (FormatException e) { - throw ADP.InvalidConnectionOptionValue(KEY.IPAddressPreference, e); + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.IPAddressPreference, e); } catch (OverflowException e) { - throw ADP.InvalidConnectionOptionValue(KEY.IPAddressPreference, e); + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.IPAddressPreference, e); } } internal PoolBlockingPeriod ConvertValueToPoolBlockingPeriod() { - if (!TryGetParsetableValue(KEY.PoolBlockingPeriod, out string value)) + if (!TryGetParsetableValue(DbConnectionStringKeywords.PoolBlockingPeriod, out string value)) { return DbConnectionStringDefaults.PoolBlockingPeriod; } try { - return PoolBlockingUtilities.ConvertToPoolBlockingPeriod(KEY.PoolBlockingPeriod, value); + return PoolBlockingUtilities.ConvertToPoolBlockingPeriod(DbConnectionStringKeywords.PoolBlockingPeriod, value); } catch (Exception e) when (e is FormatException || e is OverflowException) { - throw ADP.InvalidConnectionOptionValue(KEY.PoolBlockingPeriod, e); + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.PoolBlockingPeriod, e); } } internal SqlConnectionEncryptOption ConvertValueToSqlConnectionEncrypt() { - if (!TryGetParsetableValue(KEY.Encrypt, out string value)) + if (!TryGetParsetableValue(DbConnectionStringKeywords.Encrypt, out string value)) { return DbConnectionStringDefaults.Encrypt; } try { - return AttestationProtocolUtilities.ConvertToSqlConnectionEncryptOption(KEY.Encrypt, value); + return AttestationProtocolUtilities.ConvertToSqlConnectionEncryptOption(DbConnectionStringKeywords.Encrypt, value); } catch (FormatException e) { - throw ADP.InvalidConnectionOptionValue(KEY.Encrypt, e); + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.Encrypt, e); } catch (OverflowException e) { - throw ADP.InvalidConnectionOptionValue(KEY.Encrypt, e); + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.Encrypt, e); } } From 5bdf9a1e90419ee8dc1e083cff935dc92f0a6235 Mon Sep 17 00:00:00 2001 From: Ben Russell Date: Thu, 5 Jun 2025 15:39:33 -0500 Subject: [PATCH 05/10] Rename DbConnectionStringKeywords to match naming conventions, remove dead OLEDB and ODBC keywords --- .../Microsoft/Data/SqlClient/SqlConnection.cs | 4 +- .../Microsoft/Data/SqlClient/SqlConnection.cs | 4 +- .../SqlClient/SqlInternalConnectionTds.cs | 2 +- .../ConnectionString/DbConnectionOptions.cs | 6 +- .../DbConnectionStringKeywords.cs | 26 ++----- .../Data/SqlClient/SqlConnectionString.cs | 72 +++++++++---------- .../SqlClient/SqlConnectionStringBuilder.cs | 58 +++++++-------- 7 files changed, 80 insertions(+), 92 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnection.cs b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnection.cs index 93d9868eb0..11e7bd71ad 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnection.cs +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnection.cs @@ -2272,7 +2272,7 @@ public static void ChangePassword(string connectionString, string newPassword) } if (!string.IsNullOrEmpty(connectionOptions.AttachDBFilename)) { - throw SQL.ChangePasswordUseOfUnallowedKey(DbConnectionStringKeywords.AttachDBFilename); + throw SQL.ChangePasswordUseOfUnallowedKey(DbConnectionStringKeywords.AttachDbFilename); } ChangePassword(connectionString, connectionOptions, null, newPassword, null); @@ -2329,7 +2329,7 @@ public static void ChangePassword(string connectionString, SqlCredential credent if (!string.IsNullOrEmpty(connectionOptions.AttachDBFilename)) { - throw SQL.ChangePasswordUseOfUnallowedKey(DbConnectionStringKeywords.AttachDBFilename); + throw SQL.ChangePasswordUseOfUnallowedKey(DbConnectionStringKeywords.AttachDbFilename); } ChangePassword(connectionString, connectionOptions, credential, null, newSecurePassword); diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnection.cs b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnection.cs index 02f4484401..eb5cd8442b 100644 --- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnection.cs +++ b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnection.cs @@ -2195,7 +2195,7 @@ public static void ChangePassword(string connectionString, string newPassword) } if (!string.IsNullOrEmpty(connectionOptions.AttachDBFilename)) { - throw SQL.ChangePasswordUseOfUnallowedKey(DbConnectionStringKeywords.AttachDBFilename); + throw SQL.ChangePasswordUseOfUnallowedKey(DbConnectionStringKeywords.AttachDbFilename); } PermissionSet permissionSet = connectionOptions.CreatePermissionSet(); @@ -2255,7 +2255,7 @@ public static void ChangePassword(string connectionString, SqlCredential credent if (!string.IsNullOrEmpty(connectionOptions.AttachDBFilename)) { - throw SQL.ChangePasswordUseOfUnallowedKey(DbConnectionStringKeywords.AttachDBFilename); + throw SQL.ChangePasswordUseOfUnallowedKey(DbConnectionStringKeywords.AttachDbFilename); } PermissionSet permissionSet = connectionOptions.CreatePermissionSet(); diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs index 9546e5142a..c021239191 100644 --- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs +++ b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs @@ -1795,7 +1795,7 @@ private bool ShouldDisableTnir(SqlConnectionString connectionOptions) // Check if the user had explicitly specified the TNIR option in the connection string or the connection string builder. // If the user has specified the option in the connection string explicitly, then we shouldn't disable TNIR. - bool isTnirExplicitlySpecifiedInConnectionOptions = connectionOptions.Parsetable.ContainsKey(DbConnectionStringKeywords.TransparentNetworkIPResolution); + bool isTnirExplicitlySpecifiedInConnectionOptions = connectionOptions.Parsetable.ContainsKey(DbConnectionStringKeywords.TransparentNetworkIpResolution); return isTnirExplicitlySpecifiedInConnectionOptions ? false : (isAzureEndPoint || isFedAuthEnabled); } diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionOptions.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionOptions.cs index f0a40c9786..cbe6bc2ac1 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionOptions.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionOptions.cs @@ -56,7 +56,7 @@ public DbConnectionOptions(string connectionString, Dictionary s _keyChain = ParseInternal(_parsetable, _usersConnectionString, true, synonyms, false); _hasPasswordKeyword = _parsetable.ContainsKey(DbConnectionStringKeywords.Password) || _parsetable.ContainsKey(DbConnectionStringSynonyms.Pwd); - _hasUserIdKeyword = _parsetable.ContainsKey(DbConnectionStringKeywords.UserID) || + _hasUserIdKeyword = _parsetable.ContainsKey(DbConnectionStringKeywords.UserId) || _parsetable.ContainsKey(DbConnectionStringSynonyms.UID); } } @@ -628,7 +628,7 @@ internal string ExpandAttachDbFileName(string replacementValue) StringBuilder builder = new(_usersConnectionString.Length); for (NameValuePair current = _keyChain; current != null; current = current.Next) { - if (string.Equals(current.Name, DbConnectionStringKeywords.AttachDBFilename, StringComparison.InvariantCultureIgnoreCase)) + if (string.Equals(current.Name, DbConnectionStringKeywords.AttachDbFilename, StringComparison.InvariantCultureIgnoreCase)) { builder.Append($"{current.Name}={replacementValue};"); } @@ -679,7 +679,7 @@ internal bool HasBlankPassword return string.IsNullOrEmpty(value); // MDAC 83097 } - return (_parsetable.TryGetValue(DbConnectionStringKeywords.UserID, out value) && !string.IsNullOrEmpty(value)) || + return (_parsetable.TryGetValue(DbConnectionStringKeywords.UserId, out value) && !string.IsNullOrEmpty(value)) || (_parsetable.TryGetValue(DbConnectionStringSynonyms.UID, out value) && !string.IsNullOrEmpty(value)); } return false; diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionStringKeywords.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionStringKeywords.cs index 65cb781fa1..5c902de2a8 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionStringKeywords.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionStringKeywords.cs @@ -9,7 +9,7 @@ internal static class DbConnectionStringKeywords // SqlClient internal const string ApplicationIntent = "Application Intent"; internal const string ApplicationName = "Application Name"; - internal const string AttachDBFilename = "AttachDbFilename"; + internal const string AttachDbFilename = "AttachDbFilename"; internal const string AttestationProtocol = "Attestation Protocol"; internal const string Authentication = "Authentication"; internal const string ColumnEncryptionSetting = "Column Encryption Setting"; @@ -25,11 +25,11 @@ internal static class DbConnectionStringKeywords internal const string Encrypt = "Encrypt"; internal const string Enlist = "Enlist"; internal const string FailoverPartner = "Failover Partner"; - internal const string FailoverPartnerSPN = "Failover Partner SPN"; + internal const string FailoverPartnerSpn = "Failover Partner SPN"; internal const string HostNameInCertificate = "Host Name In Certificate"; internal const string InitialCatalog = "Initial Catalog"; internal const string IntegratedSecurity = "Integrated Security"; - internal const string IPAddressPreference = "IP Address Preference"; + internal const string IpAddressPreference = "IP Address Preference"; internal const string LoadBalanceTimeout = "Load Balance Timeout"; internal const string MaxPoolSize = "Max Pool Size"; internal const string MinPoolSize = "Min Pool Size"; @@ -43,30 +43,18 @@ internal static class DbConnectionStringKeywords internal const string Pooling = "Pooling"; internal const string Replication = "Replication"; internal const string ServerCertificate = "Server Certificate"; - internal const string ServerSPN = "Server SPN"; + internal const string ServerSpn = "Server SPN"; internal const string TransactionBinding = "Transaction Binding"; - internal const string TransparentNetworkIPResolution = "Transparent Network IP Resolution"; + internal const string TransparentNetworkIpResolution = "Transparent Network IP Resolution"; internal const string TrustServerCertificate = "Trust Server Certificate"; internal const string TypeSystemVersion = "Type System Version"; - internal const string UserID = "User ID"; + internal const string UserId = "User ID"; internal const string UserInstance = "User Instance"; - internal const string WorkstationID = "Workstation ID"; + internal const string WorkstationId = "Workstation ID"; #if NETFRAMEWORK // Odbc internal const string Driver = "Driver"; - internal const string Dsn = "Dsn"; - internal const string FileDsn = "FileDsn"; - internal const string SaveFile = "SaveFile"; - - // OleDb - internal const string FileName = "File Name"; - internal const string OleDbServices = "OLE DB Services"; - internal const string Provider = "Provider"; - - // OracleClient - internal const string Unicode = "Unicode"; - internal const string OmitOracleConnectionName = "Omit Oracle Connection Name"; #endif } } diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs index d55c7fb886..3734aca25b 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs @@ -221,7 +221,7 @@ internal SqlConnectionString(string connectionString): base(connectionString, Ge _applicationIntent = ConvertValueToApplicationIntent(); _applicationName = ConvertValueToString(DbConnectionStringKeywords.ApplicationName, DbConnectionStringDefaults.ApplicationName); - _attachDBFileName = ConvertValueToString(DbConnectionStringKeywords.AttachDBFilename, DbConnectionStringDefaults.AttachDbFilename); + _attachDBFileName = ConvertValueToString(DbConnectionStringKeywords.AttachDbFilename, DbConnectionStringDefaults.AttachDbFilename); _contextConnection = ConvertValueToBoolean(DbConnectionStringKeywords.ContextConnection, DbConnectionStringDefaults.ContextConnection); _currentLanguage = ConvertValueToString(DbConnectionStringKeywords.CurrentLanguage, DbConnectionStringDefaults.CurrentLanguage); _dataSource = ConvertValueToString(DbConnectionStringKeywords.DataSource, DbConnectionStringDefaults.DataSource); @@ -237,15 +237,15 @@ internal SqlConnectionString(string connectionString): base(connectionString, Ge _ipAddressPreference = ConvertValueToIPAddressPreference(); _hostNameInCertificate = ConvertValueToString(DbConnectionStringKeywords.HostNameInCertificate, DbConnectionStringDefaults.HostNameInCertificate); _serverCertificate = ConvertValueToString(DbConnectionStringKeywords.ServerCertificate, DbConnectionStringDefaults.ServerCertificate); - _serverSPN = ConvertValueToString(DbConnectionStringKeywords.ServerSPN, DbConnectionStringDefaults.ServerSpn); - _failoverPartnerSPN = ConvertValueToString(DbConnectionStringKeywords.FailoverPartnerSPN, DbConnectionStringDefaults.FailoverPartnerSpn); + _serverSPN = ConvertValueToString(DbConnectionStringKeywords.ServerSpn, DbConnectionStringDefaults.ServerSpn); + _failoverPartnerSPN = ConvertValueToString(DbConnectionStringKeywords.FailoverPartnerSpn, DbConnectionStringDefaults.FailoverPartnerSpn); // Temporary string - this value is stored internally as an enum. string typeSystemVersionString = ConvertValueToString(DbConnectionStringKeywords.TypeSystemVersion, null); string transactionBindingString = ConvertValueToString(DbConnectionStringKeywords.TransactionBinding, null); - _userID = ConvertValueToString(DbConnectionStringKeywords.UserID, DbConnectionStringDefaults.UserId); - _workstationId = ConvertValueToString(DbConnectionStringKeywords.WorkstationID, null); + _userID = ConvertValueToString(DbConnectionStringKeywords.UserId, DbConnectionStringDefaults.UserId); + _workstationId = ConvertValueToString(DbConnectionStringKeywords.WorkstationId, null); if (_contextConnection) { @@ -289,7 +289,7 @@ internal SqlConnectionString(string connectionString): base(connectionString, Ge #if NETFRAMEWORK // SQLPT 41700: Ignore ResetConnection=False (still validate the keyword/value) _connectionReset = ConvertValueToBoolean(DbConnectionStringKeywords.ConnectionReset, DbConnectionStringDefaults.ConnectionReset); - _transparentNetworkIPResolution = ConvertValueToBoolean(DbConnectionStringKeywords.TransparentNetworkIPResolution, DbConnectionStringDefaults.TransparentNetworkIpResolution); + _transparentNetworkIPResolution = ConvertValueToBoolean(DbConnectionStringKeywords.TransparentNetworkIpResolution, DbConnectionStringDefaults.TransparentNetworkIpResolution); _networkLibrary = ConvertValueToString(DbConnectionStringKeywords.NetworkLibrary, null); if (_networkLibrary != null) @@ -326,10 +326,10 @@ internal SqlConnectionString(string connectionString): base(connectionString, Ge ValidateValueLength(_failoverPartner, TdsEnums.MAXLEN_SERVERNAME, DbConnectionStringKeywords.FailoverPartner); ValidateValueLength(_initialCatalog, TdsEnums.MAXLEN_DATABASE, DbConnectionStringKeywords.InitialCatalog); ValidateValueLength(_password, TdsEnums.MAXLEN_CLIENTSECRET, DbConnectionStringKeywords.Password); - ValidateValueLength(_userID, TdsEnums.MAXLEN_CLIENTID, DbConnectionStringKeywords.UserID); + ValidateValueLength(_userID, TdsEnums.MAXLEN_CLIENTID, DbConnectionStringKeywords.UserId); if (_workstationId != null) { - ValidateValueLength(_workstationId, TdsEnums.MAXLEN_HOSTNAME, DbConnectionStringKeywords.WorkstationID); + ValidateValueLength(_workstationId, TdsEnums.MAXLEN_HOSTNAME, DbConnectionStringKeywords.WorkstationId); } if (!string.Equals(DbConnectionStringDefaults.FailoverPartner, _failoverPartner, StringComparison.OrdinalIgnoreCase)) @@ -348,14 +348,14 @@ internal SqlConnectionString(string connectionString): base(connectionString, Ge } // expand during construction so that CreatePermissionSet and Expand are consistent - _expandedAttachDBFilename = ExpandDataDirectory(DbConnectionStringKeywords.AttachDBFilename, _attachDBFileName); + _expandedAttachDBFilename = ExpandDataDirectory(DbConnectionStringKeywords.AttachDbFilename, _attachDBFileName); if (_expandedAttachDBFilename != null) { if (0 <= _expandedAttachDBFilename.IndexOf('|')) { - throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.AttachDBFilename); + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.AttachDbFilename); } - ValidateValueLength(_expandedAttachDBFilename, TdsEnums.MAXLEN_ATTACHDBFILE, DbConnectionStringKeywords.AttachDBFilename); + ValidateValueLength(_expandedAttachDBFilename, TdsEnums.MAXLEN_ATTACHDBFILE, DbConnectionStringKeywords.AttachDbFilename); if (_localDBInstance == null) { // fail fast to verify LocalHost when using |DataDirectory| @@ -370,11 +370,11 @@ internal SqlConnectionString(string connectionString): base(connectionString, Ge } else if (0 <= _attachDBFileName.IndexOf('|')) { - throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.AttachDBFilename); + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.AttachDbFilename); } else { - ValidateValueLength(_attachDBFileName, TdsEnums.MAXLEN_ATTACHDBFILE, DbConnectionStringKeywords.AttachDBFilename); + ValidateValueLength(_attachDBFileName, TdsEnums.MAXLEN_ATTACHDBFILE, DbConnectionStringKeywords.AttachDbFilename); } _typeSystemAssemblyVersion = s_constTypeSystemAsmVersion10; @@ -619,7 +619,7 @@ protected internal override string Expand() if (_expandedAttachDBFilename != null) { #if NETFRAMEWORK - return ExpandKeyword(DbConnectionStringKeywords.AttachDBFilename, _expandedAttachDBFilename); + return ExpandKeyword(DbConnectionStringKeywords.AttachDbFilename, _expandedAttachDBFilename); #else return ExpandAttachDbFileName(_expandedAttachDBFilename); #endif @@ -667,7 +667,7 @@ internal static Dictionary GetParseSynonyms() { { DbConnectionStringKeywords.ApplicationIntent, DbConnectionStringKeywords.ApplicationIntent }, { DbConnectionStringKeywords.ApplicationName, DbConnectionStringKeywords.ApplicationName }, - { DbConnectionStringKeywords.AttachDBFilename, DbConnectionStringKeywords.AttachDBFilename }, + { DbConnectionStringKeywords.AttachDbFilename, DbConnectionStringKeywords.AttachDbFilename }, { DbConnectionStringKeywords.AttestationProtocol, DbConnectionStringKeywords.AttestationProtocol}, { DbConnectionStringKeywords.Authentication, DbConnectionStringKeywords.Authentication }, { DbConnectionStringKeywords.ColumnEncryptionSetting, DbConnectionStringKeywords.ColumnEncryptionSetting }, @@ -682,12 +682,12 @@ internal static Dictionary GetParseSynonyms() { DbConnectionStringKeywords.Encrypt, DbConnectionStringKeywords.Encrypt }, { DbConnectionStringKeywords.Enlist, DbConnectionStringKeywords.Enlist }, { DbConnectionStringKeywords.FailoverPartner, DbConnectionStringKeywords.FailoverPartner }, - { DbConnectionStringKeywords.FailoverPartnerSPN, DbConnectionStringKeywords.FailoverPartnerSPN }, + { DbConnectionStringKeywords.FailoverPartnerSpn, DbConnectionStringKeywords.FailoverPartnerSpn }, { DbConnectionStringKeywords.HostNameInCertificate, DbConnectionStringKeywords.HostNameInCertificate }, { DbConnectionStringKeywords.ServerCertificate, DbConnectionStringKeywords.ServerCertificate}, { DbConnectionStringKeywords.InitialCatalog, DbConnectionStringKeywords.InitialCatalog }, { DbConnectionStringKeywords.IntegratedSecurity, DbConnectionStringKeywords.IntegratedSecurity }, - { DbConnectionStringKeywords.IPAddressPreference, DbConnectionStringKeywords.IPAddressPreference }, + { DbConnectionStringKeywords.IpAddressPreference, DbConnectionStringKeywords.IpAddressPreference }, { DbConnectionStringKeywords.LoadBalanceTimeout, DbConnectionStringKeywords.LoadBalanceTimeout }, { DbConnectionStringKeywords.MultipleActiveResultSets, DbConnectionStringKeywords.MultipleActiveResultSets }, { DbConnectionStringKeywords.MaxPoolSize, DbConnectionStringKeywords.MaxPoolSize }, @@ -699,21 +699,21 @@ internal static Dictionary GetParseSynonyms() { DbConnectionStringKeywords.Pooling, DbConnectionStringKeywords.Pooling }, { DbConnectionStringKeywords.PoolBlockingPeriod, DbConnectionStringKeywords.PoolBlockingPeriod }, { DbConnectionStringKeywords.Replication, DbConnectionStringKeywords.Replication }, - { DbConnectionStringKeywords.ServerSPN, DbConnectionStringKeywords.ServerSPN }, + { DbConnectionStringKeywords.ServerSpn, DbConnectionStringKeywords.ServerSpn }, { DbConnectionStringKeywords.TrustServerCertificate, DbConnectionStringKeywords.TrustServerCertificate }, { DbConnectionStringKeywords.TransactionBinding, DbConnectionStringKeywords.TransactionBinding }, { DbConnectionStringKeywords.TypeSystemVersion, DbConnectionStringKeywords.TypeSystemVersion }, - { DbConnectionStringKeywords.UserID, DbConnectionStringKeywords.UserID }, + { DbConnectionStringKeywords.UserId, DbConnectionStringKeywords.UserId }, { DbConnectionStringKeywords.UserInstance, DbConnectionStringKeywords.UserInstance }, - { DbConnectionStringKeywords.WorkstationID, DbConnectionStringKeywords.WorkstationID }, + { DbConnectionStringKeywords.WorkstationId, DbConnectionStringKeywords.WorkstationId }, - { SYNONYM.IPADDRESSPREFERENCE, DbConnectionStringKeywords.IPAddressPreference }, + { SYNONYM.IPADDRESSPREFERENCE, DbConnectionStringKeywords.IpAddressPreference }, { SYNONYM.APP, DbConnectionStringKeywords.ApplicationName }, { SYNONYM.APPLICATIONINTENT, DbConnectionStringKeywords.ApplicationIntent }, - { SYNONYM.EXTENDED_PROPERTIES, DbConnectionStringKeywords.AttachDBFilename }, + { SYNONYM.EXTENDED_PROPERTIES, DbConnectionStringKeywords.AttachDbFilename }, { SYNONYM.HOSTNAMEINCERTIFICATE, DbConnectionStringKeywords.HostNameInCertificate }, { SYNONYM.SERVERCERTIFICATE, DbConnectionStringKeywords.ServerCertificate}, - { SYNONYM.INITIAL_FILE_NAME, DbConnectionStringKeywords.AttachDBFilename }, + { SYNONYM.INITIAL_FILE_NAME, DbConnectionStringKeywords.AttachDbFilename }, { SYNONYM.CONNECTRETRYCOUNT, DbConnectionStringKeywords.ConnectRetryCount }, { SYNONYM.CONNECTRETRYINTERVAL, DbConnectionStringKeywords.ConnectRetryInterval }, { SYNONYM.CONNECTION_TIMEOUT, DbConnectionStringKeywords.ConnectTimeout }, @@ -732,18 +732,18 @@ internal static Dictionary GetParseSynonyms() { SYNONYM.Connection_Lifetime, DbConnectionStringKeywords.LoadBalanceTimeout }, { SYNONYM.Pwd, DbConnectionStringKeywords.Password }, { SYNONYM.PERSISTSECURITYINFO, DbConnectionStringKeywords.PersistSecurityInfo }, - { SYNONYM.UID, DbConnectionStringKeywords.UserID }, - { SYNONYM.User, DbConnectionStringKeywords.UserID }, - { SYNONYM.WSID, DbConnectionStringKeywords.WorkstationID }, - { SYNONYM.ServerSPN, DbConnectionStringKeywords.ServerSPN }, - { SYNONYM.FailoverPartnerSPN, DbConnectionStringKeywords.FailoverPartnerSPN }, + { SYNONYM.UID, DbConnectionStringKeywords.UserId }, + { SYNONYM.User, DbConnectionStringKeywords.UserId }, + { SYNONYM.WSID, DbConnectionStringKeywords.WorkstationId }, + { SYNONYM.ServerSPN, DbConnectionStringKeywords.ServerSpn }, + { SYNONYM.FailoverPartnerSPN, DbConnectionStringKeywords.FailoverPartnerSpn }, #if NETFRAMEWORK { DbConnectionStringKeywords.ConnectionReset, DbConnectionStringKeywords.ConnectionReset }, { DbConnectionStringKeywords.NetworkLibrary, DbConnectionStringKeywords.NetworkLibrary }, - { DbConnectionStringKeywords.TransparentNetworkIPResolution, DbConnectionStringKeywords.TransparentNetworkIPResolution }, + { DbConnectionStringKeywords.TransparentNetworkIpResolution, DbConnectionStringKeywords.TransparentNetworkIpResolution }, { SYNONYM.NET, DbConnectionStringKeywords.NetworkLibrary }, { SYNONYM.NETWORK, DbConnectionStringKeywords.NetworkLibrary }, - { SYNONYM.TRANSPARENTNETWORKIPRESOLUTION, DbConnectionStringKeywords.TransparentNetworkIPResolution }, + { SYNONYM.TRANSPARENTNETWORKIPRESOLUTION, DbConnectionStringKeywords.TransparentNetworkIpResolution }, #endif // NETFRAMEWORK }; Debug.Assert(synonyms.Count == count, $"incorrect initial ParseSynonyms size {count} v/s {synonyms.Count}"); @@ -764,7 +764,7 @@ internal string ObtainWorkstationId() // since permission to open the connection has been granted // the information is shared with the server, but not directly with the user result = ADP.MachineName(); - ValidateValueLength(result, TdsEnums.MAXLEN_HOSTNAME, DbConnectionStringKeywords.WorkstationID); + ValidateValueLength(result, TdsEnums.MAXLEN_HOSTNAME, DbConnectionStringKeywords.WorkstationId); } return result; } @@ -798,7 +798,7 @@ internal static void VerifyLocalHostAndFixup(ref string host, bool enforceLocalH { if (enforceLocalHost) { - throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.AttachDBFilename); + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.AttachDbFilename); } } } @@ -932,22 +932,22 @@ internal SqlConnectionAttestationProtocol ConvertValueToAttestationProtocol() /// internal SqlConnectionIPAddressPreference ConvertValueToIPAddressPreference() { - if (!TryGetParsetableValue(DbConnectionStringKeywords.IPAddressPreference, out string value)) + if (!TryGetParsetableValue(DbConnectionStringKeywords.IpAddressPreference, out string value)) { return DbConnectionStringDefaults.IpAddressPreference; } try { - return IpAddressPreferenceUtilities.ConvertToIPAddressPreference(DbConnectionStringKeywords.IPAddressPreference, value); + return IpAddressPreferenceUtilities.ConvertToIPAddressPreference(DbConnectionStringKeywords.IpAddressPreference, value); } catch (FormatException e) { - throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.IPAddressPreference, e); + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.IpAddressPreference, e); } catch (OverflowException e) { - throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.IPAddressPreference, e); + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.IpAddressPreference, e); } } 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 dd829e9f28..cbd196ca53 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs @@ -141,7 +141,7 @@ 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.AttachDBFilename] = DbConnectionStringKeywords.AttachDbFilename; validKeywords[(int)Keywords.PoolBlockingPeriod] = DbConnectionStringKeywords.PoolBlockingPeriod; validKeywords[(int)Keywords.CommandTimeout] = DbConnectionStringKeywords.CommandTimeout; validKeywords[(int)Keywords.ConnectTimeout] = DbConnectionStringKeywords.ConnectTimeout; @@ -167,23 +167,23 @@ private static string[] CreateValidKeywords() 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.UserID] = DbConnectionStringKeywords.UserId; validKeywords[(int)Keywords.UserInstance] = DbConnectionStringKeywords.UserInstance; - validKeywords[(int)Keywords.WorkstationID] = DbConnectionStringKeywords.WorkstationID; + 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; - validKeywords[(int)Keywords.ServerSPN] = DbConnectionStringKeywords.ServerSPN; - validKeywords[(int)Keywords.FailoverPartnerSPN] = DbConnectionStringKeywords.FailoverPartnerSPN; + validKeywords[(int)Keywords.IPAddressPreference] = DbConnectionStringKeywords.IpAddressPreference; + validKeywords[(int)Keywords.ServerSPN] = DbConnectionStringKeywords.ServerSpn; + validKeywords[(int)Keywords.FailoverPartnerSPN] = DbConnectionStringKeywords.FailoverPartnerSpn; validKeywords[(int)Keywords.ContextConnection] = DbConnectionStringKeywords.ContextConnection; #if NETFRAMEWORK validKeywords[(int)Keywords.ConnectionReset] = DbConnectionStringKeywords.ConnectionReset; validKeywords[(int)Keywords.NetworkLibrary] = DbConnectionStringKeywords.NetworkLibrary; - validKeywords[(int)Keywords.TransparentNetworkIPResolution] = DbConnectionStringKeywords.TransparentNetworkIPResolution; + validKeywords[(int)Keywords.TransparentNetworkIPResolution] = DbConnectionStringKeywords.TransparentNetworkIpResolution; #endif return validKeywords; } @@ -194,7 +194,7 @@ private static Dictionary CreateKeywordsDictionary() { { DbConnectionStringKeywords.ApplicationIntent, Keywords.ApplicationIntent }, { DbConnectionStringKeywords.ApplicationName, Keywords.ApplicationName }, - { DbConnectionStringKeywords.AttachDBFilename, Keywords.AttachDBFilename }, + { DbConnectionStringKeywords.AttachDbFilename, Keywords.AttachDBFilename }, { DbConnectionStringKeywords.PoolBlockingPeriod, Keywords.PoolBlockingPeriod }, { DbConnectionStringKeywords.CommandTimeout, Keywords.CommandTimeout }, { DbConnectionStringKeywords.ConnectTimeout, Keywords.ConnectTimeout }, @@ -220,22 +220,22 @@ private static Dictionary CreateKeywordsDictionary() { DbConnectionStringKeywords.TransactionBinding, Keywords.TransactionBinding }, { DbConnectionStringKeywords.TrustServerCertificate, Keywords.TrustServerCertificate }, { DbConnectionStringKeywords.TypeSystemVersion, Keywords.TypeSystemVersion }, - { DbConnectionStringKeywords.UserID, Keywords.UserID }, + { DbConnectionStringKeywords.UserId, Keywords.UserID }, { DbConnectionStringKeywords.UserInstance, Keywords.UserInstance }, - { DbConnectionStringKeywords.WorkstationID, Keywords.WorkstationID }, + { 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 }, - { DbConnectionStringKeywords.ServerSPN, Keywords.ServerSPN }, - { DbConnectionStringKeywords.FailoverPartnerSPN, Keywords.FailoverPartnerSPN }, + { DbConnectionStringKeywords.IpAddressPreference, Keywords.IPAddressPreference }, + { DbConnectionStringKeywords.ServerSpn, Keywords.ServerSPN }, + { DbConnectionStringKeywords.FailoverPartnerSpn, Keywords.FailoverPartnerSPN }, { DbConnectionStringKeywords.ContextConnection, Keywords.ContextConnection }, #if NETFRAMEWORK { DbConnectionStringKeywords.ConnectionReset, Keywords.ConnectionReset }, - { DbConnectionStringKeywords.TransparentNetworkIPResolution, Keywords.TransparentNetworkIPResolution }, + { DbConnectionStringKeywords.TransparentNetworkIpResolution, Keywords.TransparentNetworkIPResolution }, { DbConnectionStringKeywords.NetworkLibrary, Keywords.NetworkLibrary }, { DbConnectionStringSynonyms.NET, Keywords.NetworkLibrary }, { DbConnectionStringSynonyms.NETWORK, Keywords.NetworkLibrary }, @@ -599,7 +599,7 @@ private void SetSqlConnectionEncryptionValue(SqlConnectionEncryptOption value) private void SetIPAddressPreferenceValue(SqlConnectionIPAddressPreference value) { Debug.Assert(IpAddressPreferenceUtilities.IsValidIPAddressPreference(value), "Invalid value for SqlConnectionIPAddressPreference"); - base[DbConnectionStringKeywords.IPAddressPreference] = IpAddressPreferenceUtilities.IPAddressPreferenceToString(value); + base[DbConnectionStringKeywords.IpAddressPreference] = IpAddressPreferenceUtilities.IPAddressPreferenceToString(value); } private void SetAuthenticationValue(SqlAuthenticationMethod value) @@ -890,7 +890,7 @@ public override StandardValuesCollection GetStandardValues(ITypeDescriptorContex private static readonly string[] s_notSupportedKeywords = { DbConnectionStringKeywords.ConnectionReset, DbConnectionStringKeywords.TransactionBinding, - DbConnectionStringKeywords.TransparentNetworkIPResolution, + DbConnectionStringKeywords.TransparentNetworkIpResolution, DbConnectionStringSynonyms.TRANSPARENTNETWORKIPRESOLUTION, }; @@ -1118,7 +1118,7 @@ public string ApplicationName } /// - [DisplayName(DbConnectionStringKeywords.AttachDBFilename)] + [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")] @@ -1128,7 +1128,7 @@ public string AttachDBFilename get => _attachDBFilename; set { - SetValue(DbConnectionStringKeywords.AttachDBFilename, value); + SetValue(DbConnectionStringKeywords.AttachDbFilename, value); _attachDBFilename = value; } } @@ -1203,7 +1203,7 @@ public string DataSource } /// - [DisplayName(DbConnectionStringKeywords.ServerSPN)] + [DisplayName(DbConnectionStringKeywords.ServerSpn)] [ResCategory(StringsHelper.ResourceNames.DataCategory_Source)] [ResDescription(StringsHelper.ResourceNames.DbConnectionString_ServerSPN)] [RefreshProperties(RefreshProperties.All)] @@ -1212,7 +1212,7 @@ public string ServerSPN get => _serverSPN; set { - SetValue(DbConnectionStringKeywords.ServerSPN, value); + SetValue(DbConnectionStringKeywords.ServerSpn, value); _serverSPN = value; } } @@ -1319,7 +1319,7 @@ public SqlConnectionAttestationProtocol AttestationProtocol } /// - [DisplayName(DbConnectionStringKeywords.IPAddressPreference)] + [DisplayName(DbConnectionStringKeywords.IpAddressPreference)] [ResCategory(StringsHelper.ResourceNames.DataCategory_Security)] [ResDescription(StringsHelper.ResourceNames.TCE_DbConnectionString_IPAddressPreference)] [RefreshProperties(RefreshProperties.All)] @@ -1385,7 +1385,7 @@ public string FailoverPartner } /// - [DisplayName(DbConnectionStringKeywords.FailoverPartnerSPN)] + [DisplayName(DbConnectionStringKeywords.FailoverPartnerSpn)] [ResCategory(StringsHelper.ResourceNames.DataCategory_Source)] [ResDescription(StringsHelper.ResourceNames.DbConnectionString_FailoverPartnerSPN)] [RefreshProperties(RefreshProperties.All)] @@ -1394,7 +1394,7 @@ public string FailoverPartnerSPN get => _failoverPartnerSPN; set { - SetValue(DbConnectionStringKeywords.FailoverPartnerSPN, value); + SetValue(DbConnectionStringKeywords.FailoverPartnerSpn, value); _failoverPartnerSPN = value; } } @@ -1708,7 +1708,7 @@ public string TypeSystemVersion } /// - [DisplayName(DbConnectionStringKeywords.UserID)] + [DisplayName(DbConnectionStringKeywords.UserId)] [ResCategory(StringsHelper.ResourceNames.DataCategory_Security)] [ResDescription(StringsHelper.ResourceNames.DbConnectionString_UserID)] [RefreshProperties(RefreshProperties.All)] @@ -1717,7 +1717,7 @@ public string UserID get => _userID; set { - SetValue(DbConnectionStringKeywords.UserID, value); + SetValue(DbConnectionStringKeywords.UserId, value); _userID = value; } } @@ -1738,7 +1738,7 @@ public bool UserInstance } /// - [DisplayName(DbConnectionStringKeywords.WorkstationID)] + [DisplayName(DbConnectionStringKeywords.WorkstationId)] [ResCategory(StringsHelper.ResourceNames.DataCategory_Context)] [ResDescription(StringsHelper.ResourceNames.DbConnectionString_WorkstationID)] [RefreshProperties(RefreshProperties.All)] @@ -1747,7 +1747,7 @@ public string WorkstationID get => _workstationID; set { - SetValue(DbConnectionStringKeywords.WorkstationID, value); + SetValue(DbConnectionStringKeywords.WorkstationId, value); _workstationID = value; } } @@ -1844,7 +1844,7 @@ public bool ConnectionReset } /// - [DisplayName(DbConnectionStringKeywords.TransparentNetworkIPResolution)] + [DisplayName(DbConnectionStringKeywords.TransparentNetworkIpResolution)] [ResCategory(StringsHelper.ResourceNames.DataCategory_Source)] [ResDescription(StringsHelper.ResourceNames.DbConnectionString_TransparentNetworkIPResolution)] [RefreshProperties(RefreshProperties.All)] @@ -1853,7 +1853,7 @@ public bool TransparentNetworkIPResolution get => _transparentNetworkIPResolution; set { - SetValue(DbConnectionStringKeywords.TransparentNetworkIPResolution, value); + SetValue(DbConnectionStringKeywords.TransparentNetworkIpResolution, value); _transparentNetworkIPResolution = value; } } From 890c18cb520bdb09d9ed9dfe7c111f5bed3c38d1 Mon Sep 17 00:00:00 2001 From: Ben Russell Date: Thu, 5 Jun 2025 15:50:57 -0500 Subject: [PATCH 06/10] Remove SqlConnectionString.SYNONYMS and replace with DbConnectionStringSynonyms --- .../Data/SqlClient/SqlConnectionString.cs | 134 +++++------------- 1 file changed, 33 insertions(+), 101 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs index 3734aca25b..adc796bcd9 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs @@ -24,74 +24,6 @@ internal sealed class SqlConnectionString : DbConnectionOptions // used by pooling classes so it is much easier to verify correctness // when not worried about the class being modified during execution - // @TODO: Remove in favor DbConnectionStringSynonyms - // Constant for the number of duplicate options in the connection string - private static class SYNONYM - { - // ip address preference - internal const string IPADDRESSPREFERENCE = DbConnectionStringSynonyms.IPADDRESSPREFERENCE; - //application intent - internal const string APPLICATIONINTENT = DbConnectionStringSynonyms.APPLICATIONINTENT; - // application name - internal const string APP = DbConnectionStringSynonyms.APP; - // attachDBFilename - internal const string EXTENDED_PROPERTIES = DbConnectionStringSynonyms.EXTENDEDPROPERTIES; - internal const string INITIAL_FILE_NAME = DbConnectionStringSynonyms.INITIALFILENAME; - // connect timeout - internal const string CONNECTION_TIMEOUT = DbConnectionStringSynonyms.CONNECTIONTIMEOUT; - internal const string TIMEOUT = DbConnectionStringSynonyms.TIMEOUT; - // current language - internal const string LANGUAGE = DbConnectionStringSynonyms.LANGUAGE; - // data source - internal const string ADDR = DbConnectionStringSynonyms.ADDR; - internal const string ADDRESS = DbConnectionStringSynonyms.ADDRESS; - internal const string SERVER = DbConnectionStringSynonyms.SERVER; - internal const string NETWORK_ADDRESS = DbConnectionStringSynonyms.NETWORKADDRESS; - // host name in certificate - internal const string HOSTNAMEINCERTIFICATE = DbConnectionStringSynonyms.HOSTNAMEINCERTIFICATE; - // server certificate - internal const string SERVERCERTIFICATE = DbConnectionStringSynonyms.SERVERCERTIFICATE; - // initial catalog - internal const string DATABASE = DbConnectionStringSynonyms.DATABASE; - // integrated security - internal const string TRUSTED_CONNECTION = DbConnectionStringSynonyms.TRUSTEDCONNECTION; - //connect retry count - internal const string CONNECTRETRYCOUNT = DbConnectionStringSynonyms.CONNECTRETRYCOUNT; - //connect retry interval - internal const string CONNECTRETRYINTERVAL = DbConnectionStringSynonyms.CONNECTRETRYINTERVAL; - // load balance timeout - internal const string Connection_Lifetime = DbConnectionStringSynonyms.ConnectionLifetime; - // multiple active result sets - internal const string MULTIPLEACTIVERESULTSETS = DbConnectionStringSynonyms.MULTIPLEACTIVERESULTSETS; - // multi subnet failover - internal const string MULTISUBNETFAILOVER = DbConnectionStringSynonyms.MULTISUBNETFAILOVER; - // network library - internal const string NET = DbConnectionStringSynonyms.NET; - internal const string NETWORK = DbConnectionStringSynonyms.NETWORK; - // pool blocking period - internal const string POOLBLOCKINGPERIOD = DbConnectionStringSynonyms.POOLBLOCKINGPERIOD; - // password - internal const string Pwd = DbConnectionStringSynonyms.Pwd; - // persist security info - internal const string PERSISTSECURITYINFO = DbConnectionStringSynonyms.PERSISTSECURITYINFO; - // trust server certificate - internal const string TRUSTSERVERCERTIFICATE = DbConnectionStringSynonyms.TRUSTSERVERCERTIFICATE; - // user id - internal const string UID = DbConnectionStringSynonyms.UID; - internal const string User = DbConnectionStringSynonyms.User; - // workstation id - internal const string WSID = DbConnectionStringSynonyms.WSID; - // server SPNs - internal const string ServerSPN = DbConnectionStringSynonyms.ServerSPN; - internal const string FailoverPartnerSPN = DbConnectionStringSynonyms.FailoverPartnerSPN; - -#if NETFRAMEWORK - internal const string TRANSPARENTNETWORKIPRESOLUTION = DbConnectionStringSynonyms.TRANSPARENTNETWORKIPRESOLUTION; -#endif - - // make sure to update SynonymCount value below when adding or removing synonyms - } - internal enum TypeSystem { Latest = 2008, @@ -707,43 +639,43 @@ internal static Dictionary GetParseSynonyms() { DbConnectionStringKeywords.UserInstance, DbConnectionStringKeywords.UserInstance }, { DbConnectionStringKeywords.WorkstationId, DbConnectionStringKeywords.WorkstationId }, - { SYNONYM.IPADDRESSPREFERENCE, DbConnectionStringKeywords.IpAddressPreference }, - { SYNONYM.APP, DbConnectionStringKeywords.ApplicationName }, - { SYNONYM.APPLICATIONINTENT, DbConnectionStringKeywords.ApplicationIntent }, - { SYNONYM.EXTENDED_PROPERTIES, DbConnectionStringKeywords.AttachDbFilename }, - { SYNONYM.HOSTNAMEINCERTIFICATE, DbConnectionStringKeywords.HostNameInCertificate }, - { SYNONYM.SERVERCERTIFICATE, DbConnectionStringKeywords.ServerCertificate}, - { SYNONYM.INITIAL_FILE_NAME, DbConnectionStringKeywords.AttachDbFilename }, - { SYNONYM.CONNECTRETRYCOUNT, DbConnectionStringKeywords.ConnectRetryCount }, - { SYNONYM.CONNECTRETRYINTERVAL, DbConnectionStringKeywords.ConnectRetryInterval }, - { SYNONYM.CONNECTION_TIMEOUT, DbConnectionStringKeywords.ConnectTimeout }, - { SYNONYM.TIMEOUT, DbConnectionStringKeywords.ConnectTimeout }, - { SYNONYM.LANGUAGE, DbConnectionStringKeywords.CurrentLanguage }, - { SYNONYM.ADDR, DbConnectionStringKeywords.DataSource }, - { SYNONYM.ADDRESS, DbConnectionStringKeywords.DataSource }, - { SYNONYM.MULTIPLEACTIVERESULTSETS, DbConnectionStringKeywords.MultipleActiveResultSets }, - { SYNONYM.MULTISUBNETFAILOVER, DbConnectionStringKeywords.MultiSubnetFailover }, - { SYNONYM.NETWORK_ADDRESS, DbConnectionStringKeywords.DataSource }, - { SYNONYM.POOLBLOCKINGPERIOD, DbConnectionStringKeywords.PoolBlockingPeriod}, - { SYNONYM.SERVER, DbConnectionStringKeywords.DataSource }, - { SYNONYM.DATABASE, DbConnectionStringKeywords.InitialCatalog }, - { SYNONYM.TRUSTED_CONNECTION, DbConnectionStringKeywords.IntegratedSecurity }, - { SYNONYM.TRUSTSERVERCERTIFICATE, DbConnectionStringKeywords.TrustServerCertificate }, - { SYNONYM.Connection_Lifetime, DbConnectionStringKeywords.LoadBalanceTimeout }, - { SYNONYM.Pwd, DbConnectionStringKeywords.Password }, - { SYNONYM.PERSISTSECURITYINFO, DbConnectionStringKeywords.PersistSecurityInfo }, - { SYNONYM.UID, DbConnectionStringKeywords.UserId }, - { SYNONYM.User, DbConnectionStringKeywords.UserId }, - { SYNONYM.WSID, DbConnectionStringKeywords.WorkstationId }, - { SYNONYM.ServerSPN, DbConnectionStringKeywords.ServerSpn }, - { SYNONYM.FailoverPartnerSPN, DbConnectionStringKeywords.FailoverPartnerSpn }, + { DbConnectionStringSynonyms.IPADDRESSPREFERENCE, DbConnectionStringKeywords.IpAddressPreference }, + { DbConnectionStringSynonyms.APP, DbConnectionStringKeywords.ApplicationName }, + { DbConnectionStringSynonyms.APPLICATIONINTENT, DbConnectionStringKeywords.ApplicationIntent }, + { DbConnectionStringSynonyms.EXTENDEDPROPERTIES, DbConnectionStringKeywords.AttachDbFilename }, + { DbConnectionStringSynonyms.HOSTNAMEINCERTIFICATE, DbConnectionStringKeywords.HostNameInCertificate }, + { DbConnectionStringSynonyms.SERVERCERTIFICATE, DbConnectionStringKeywords.ServerCertificate}, + { DbConnectionStringSynonyms.INITIALFILENAME, DbConnectionStringKeywords.AttachDbFilename }, + { DbConnectionStringSynonyms.CONNECTRETRYCOUNT, DbConnectionStringKeywords.ConnectRetryCount }, + { DbConnectionStringSynonyms.CONNECTRETRYINTERVAL, DbConnectionStringKeywords.ConnectRetryInterval }, + { DbConnectionStringSynonyms.CONNECTIONTIMEOUT, DbConnectionStringKeywords.ConnectTimeout }, + { DbConnectionStringSynonyms.TIMEOUT, DbConnectionStringKeywords.ConnectTimeout }, + { DbConnectionStringSynonyms.LANGUAGE, DbConnectionStringKeywords.CurrentLanguage }, + { DbConnectionStringSynonyms.ADDR, DbConnectionStringKeywords.DataSource }, + { DbConnectionStringSynonyms.ADDRESS, DbConnectionStringKeywords.DataSource }, + { DbConnectionStringSynonyms.MULTIPLEACTIVERESULTSETS, DbConnectionStringKeywords.MultipleActiveResultSets }, + { DbConnectionStringSynonyms.MULTISUBNETFAILOVER, DbConnectionStringKeywords.MultiSubnetFailover }, + { DbConnectionStringSynonyms.NETWORKADDRESS, DbConnectionStringKeywords.DataSource }, + { DbConnectionStringSynonyms.POOLBLOCKINGPERIOD, DbConnectionStringKeywords.PoolBlockingPeriod}, + { DbConnectionStringSynonyms.SERVER, DbConnectionStringKeywords.DataSource }, + { DbConnectionStringSynonyms.DATABASE, DbConnectionStringKeywords.InitialCatalog }, + { DbConnectionStringSynonyms.TRUSTEDCONNECTION, DbConnectionStringKeywords.IntegratedSecurity }, + { DbConnectionStringSynonyms.TRUSTSERVERCERTIFICATE, DbConnectionStringKeywords.TrustServerCertificate }, + { DbConnectionStringSynonyms.ConnectionLifetime, DbConnectionStringKeywords.LoadBalanceTimeout }, + { DbConnectionStringSynonyms.Pwd, DbConnectionStringKeywords.Password }, + { DbConnectionStringSynonyms.PERSISTSECURITYINFO, DbConnectionStringKeywords.PersistSecurityInfo }, + { DbConnectionStringSynonyms.UID, DbConnectionStringKeywords.UserId }, + { DbConnectionStringSynonyms.User, DbConnectionStringKeywords.UserId }, + { DbConnectionStringSynonyms.WSID, DbConnectionStringKeywords.WorkstationId }, + { DbConnectionStringSynonyms.ServerSPN, DbConnectionStringKeywords.ServerSpn }, + { DbConnectionStringSynonyms.FailoverPartnerSPN, DbConnectionStringKeywords.FailoverPartnerSpn }, #if NETFRAMEWORK { DbConnectionStringKeywords.ConnectionReset, DbConnectionStringKeywords.ConnectionReset }, { DbConnectionStringKeywords.NetworkLibrary, DbConnectionStringKeywords.NetworkLibrary }, { DbConnectionStringKeywords.TransparentNetworkIpResolution, DbConnectionStringKeywords.TransparentNetworkIpResolution }, - { SYNONYM.NET, DbConnectionStringKeywords.NetworkLibrary }, - { SYNONYM.NETWORK, DbConnectionStringKeywords.NetworkLibrary }, - { SYNONYM.TRANSPARENTNETWORKIPRESOLUTION, DbConnectionStringKeywords.TransparentNetworkIpResolution }, + { DbConnectionStringSynonyms.NET, DbConnectionStringKeywords.NetworkLibrary }, + { DbConnectionStringSynonyms.NETWORK, DbConnectionStringKeywords.NetworkLibrary }, + { DbConnectionStringSynonyms.TRANSPARENTNETWORKIPRESOLUTION, DbConnectionStringKeywords.TransparentNetworkIpResolution }, #endif // NETFRAMEWORK }; Debug.Assert(synonyms.Count == count, $"incorrect initial ParseSynonyms size {count} v/s {synonyms.Count}"); From 7c5815ca0005a157bcfd38a9b142576e943468ec Mon Sep 17 00:00:00 2001 From: Ben Russell Date: Thu, 5 Jun 2025 16:03:41 -0500 Subject: [PATCH 07/10] Rename DbConnectionStringSynonyms to match naming conventions --- .../ConnectionString/DbConnectionOptions.cs | 4 +- .../DbConnectionStringSynonyms.cs | 110 +++++------------- .../Data/SqlClient/SqlConnectionString.cs | 60 +++++----- .../SqlClient/SqlConnectionStringBuilder.cs | 66 +++++------ 4 files changed, 95 insertions(+), 145 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionOptions.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionOptions.cs index cbe6bc2ac1..37c2f1e67d 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionOptions.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionOptions.cs @@ -57,7 +57,7 @@ public DbConnectionOptions(string connectionString, Dictionary s _hasPasswordKeyword = _parsetable.ContainsKey(DbConnectionStringKeywords.Password) || _parsetable.ContainsKey(DbConnectionStringSynonyms.Pwd); _hasUserIdKeyword = _parsetable.ContainsKey(DbConnectionStringKeywords.UserId) || - _parsetable.ContainsKey(DbConnectionStringSynonyms.UID); + _parsetable.ContainsKey(DbConnectionStringSynonyms.Uid); } } @@ -680,7 +680,7 @@ internal bool HasBlankPassword } return (_parsetable.TryGetValue(DbConnectionStringKeywords.UserId, out value) && !string.IsNullOrEmpty(value)) || - (_parsetable.TryGetValue(DbConnectionStringSynonyms.UID, out value) && !string.IsNullOrEmpty(value)); + (_parsetable.TryGetValue(DbConnectionStringSynonyms.Uid, out value) && !string.IsNullOrEmpty(value)); } return false; } diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionStringSynonyms.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionStringSynonyms.cs index f7d8881544..8d4060e1b4 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionStringSynonyms.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionStringSynonyms.cs @@ -6,88 +6,38 @@ namespace Microsoft.Data.Common.ConnectionString { internal static class DbConnectionStringSynonyms { - //internal const string TransparentNetworkIPResolution = TRANSPARENTNETWORKIPRESOLUTION; - internal const string TRANSPARENTNETWORKIPRESOLUTION = "transparentnetworkipresolution"; - - //internal const string ApplicationName = APP; - internal const string APP = "app"; - - // internal const string IPAddressPreference = IPADDRESSPREFERENCE; - internal const string IPADDRESSPREFERENCE = "ipaddresspreference"; - - //internal const string ApplicationIntent = APPLICATIONINTENT; - internal const string APPLICATIONINTENT = "applicationintent"; - - //internal const string AttachDBFilename = EXTENDEDPROPERTIES + "," + INITIALFILENAME; - internal const string EXTENDEDPROPERTIES = "extended properties"; - internal const string INITIALFILENAME = "initial file name"; - - // internal const string HostNameInCertificate = HOSTNAMEINCERTIFICATE; - internal const string HOSTNAMEINCERTIFICATE = "hostnameincertificate"; - - // internal const string ServerCertificate = SERVERCERTIFICATE; - internal const string SERVERCERTIFICATE = "servercertificate"; - - //internal const string ConnectTimeout = CONNECTIONTIMEOUT + "," +TIMEOUT; - internal const string CONNECTIONTIMEOUT = "connection timeout"; - internal const string TIMEOUT = "timeout"; - - //internal const string ConnectRetryCount = CONNECTRETRYCOUNT; - internal const string CONNECTRETRYCOUNT = "connectretrycount"; - - //internal const string ConnectRetryInterval = CONNECTRETRYINTERVAL; - internal const string CONNECTRETRYINTERVAL = "connectretryinterval"; - - //internal const string CurrentLanguage = LANGUAGE; - internal const string LANGUAGE = "language"; - - //internal const string OraDataSource = SERVER; - //internal const string SqlDataSource = ADDR + "," + ADDRESS + "," + SERVER + "," + NETWORKADDRESS; - internal const string ADDR = "addr"; - internal const string ADDRESS = "address"; - internal const string SERVER = "server"; - internal const string NETWORKADDRESS = "network address"; - - //internal const string InitialCatalog = DATABASE; - internal const string DATABASE = "database"; - - //internal const string IntegratedSecurity = TRUSTEDCONNECTION; - internal const string TRUSTEDCONNECTION = "trusted_connection"; // underscore introduced in everett - - //internal const string LoadBalanceTimeout = ConnectionLifetime; + internal const string Addr = "addr"; + internal const string Address = "address"; + internal const string App = "app"; + internal const string ApplicationIntent = "applicationintent"; internal const string ConnectionLifetime = "connection lifetime"; - - //internal const string MultipleActiveResultSets = MULTIPLEACTIVERESULTSETS; - internal const string MULTIPLEACTIVERESULTSETS = "multipleactiveresultsets"; - - //internal const string MultiSubnetFailover = MULTISUBNETFAILOVER; - internal const string MULTISUBNETFAILOVER = "multisubnetfailover"; - - //internal const string NetworkLibrary = NET + "," + NETWORK; - internal const string NET = "net"; - internal const string NETWORK = "network"; - - //internal const string PoolBlockingPeriod = POOLBLOCKINGPERIOD; - internal const string POOLBLOCKINGPERIOD = "poolblockingperiod"; - - //internal const string Password = Pwd; + internal const string ConnectionTimeout = "connection timeout"; + internal const string ConnectRetryCount = "connectretrycount"; + internal const string ConnectRetryInterval = "connectretryinterval"; + internal const string Database = "database"; + internal const string ExtendedProperties = "extended properties"; + internal const string FailoverPartnerSpn = "FailoverPartnerSPN"; + internal const string HostNameInCertificate = "hostnameincertificate"; + internal const string InitialFileName = "initial file name"; + internal const string IpAddressPreference = "ipaddresspreference"; + internal const string Language = "language"; + internal const string MultipleActiveResultSets = "multipleactiveresultsets"; + internal const string MultiSubnetFailover = "multisubnetfailover"; + internal const string Net = "net"; + internal const string Network = "network"; + internal const string NetworkAddress = "network address"; + internal const string PersistSecurityInfo = "persistsecurityinfo"; + internal const string PoolBlockingPeriod = "poolblockingperiod"; internal const string Pwd = "pwd"; - - //internal const string PersistSecurityInfo = PERSISTSECURITYINFO; - internal const string PERSISTSECURITYINFO = "persistsecurityinfo"; - - //internal const string TrustServerCertificate = TRUSTSERVERCERTIFICATE; - internal const string TRUSTSERVERCERTIFICATE = "trustservercertificate"; - - //internal const string UserID = UID + "," + User; - internal const string UID = "uid"; + internal const string Server = "server"; + internal const string ServerCertificate = "servercertificate"; + internal const string ServerSpn = "ServerSPN"; + internal const string Timeout = "timeout"; + internal const string TransparentNetworkIpResolution = "transparentnetworkipresolution"; + internal const string TrustedConnection = "trusted_connection"; // underscore introduced in everett + internal const string TrustServerCertificate = "trustservercertificate"; + internal const string Uid = "uid"; internal const string User = "user"; - - //internal const string WorkstationID = WSID; - internal const string WSID = "wsid"; - - //internal const string server SPNs - internal const string ServerSPN = "ServerSPN"; - internal const string FailoverPartnerSPN = "FailoverPartnerSPN"; + internal const string WsId = "wsid"; } } diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs index adc796bcd9..ba5b8f3121 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs @@ -639,43 +639,43 @@ internal static Dictionary GetParseSynonyms() { DbConnectionStringKeywords.UserInstance, DbConnectionStringKeywords.UserInstance }, { DbConnectionStringKeywords.WorkstationId, DbConnectionStringKeywords.WorkstationId }, - { DbConnectionStringSynonyms.IPADDRESSPREFERENCE, DbConnectionStringKeywords.IpAddressPreference }, - { DbConnectionStringSynonyms.APP, DbConnectionStringKeywords.ApplicationName }, - { DbConnectionStringSynonyms.APPLICATIONINTENT, DbConnectionStringKeywords.ApplicationIntent }, - { DbConnectionStringSynonyms.EXTENDEDPROPERTIES, DbConnectionStringKeywords.AttachDbFilename }, - { DbConnectionStringSynonyms.HOSTNAMEINCERTIFICATE, DbConnectionStringKeywords.HostNameInCertificate }, - { DbConnectionStringSynonyms.SERVERCERTIFICATE, DbConnectionStringKeywords.ServerCertificate}, - { DbConnectionStringSynonyms.INITIALFILENAME, DbConnectionStringKeywords.AttachDbFilename }, - { DbConnectionStringSynonyms.CONNECTRETRYCOUNT, DbConnectionStringKeywords.ConnectRetryCount }, - { DbConnectionStringSynonyms.CONNECTRETRYINTERVAL, DbConnectionStringKeywords.ConnectRetryInterval }, - { DbConnectionStringSynonyms.CONNECTIONTIMEOUT, DbConnectionStringKeywords.ConnectTimeout }, - { DbConnectionStringSynonyms.TIMEOUT, DbConnectionStringKeywords.ConnectTimeout }, - { DbConnectionStringSynonyms.LANGUAGE, DbConnectionStringKeywords.CurrentLanguage }, - { DbConnectionStringSynonyms.ADDR, DbConnectionStringKeywords.DataSource }, - { DbConnectionStringSynonyms.ADDRESS, DbConnectionStringKeywords.DataSource }, - { DbConnectionStringSynonyms.MULTIPLEACTIVERESULTSETS, DbConnectionStringKeywords.MultipleActiveResultSets }, - { DbConnectionStringSynonyms.MULTISUBNETFAILOVER, DbConnectionStringKeywords.MultiSubnetFailover }, - { DbConnectionStringSynonyms.NETWORKADDRESS, DbConnectionStringKeywords.DataSource }, - { DbConnectionStringSynonyms.POOLBLOCKINGPERIOD, DbConnectionStringKeywords.PoolBlockingPeriod}, - { DbConnectionStringSynonyms.SERVER, DbConnectionStringKeywords.DataSource }, - { DbConnectionStringSynonyms.DATABASE, DbConnectionStringKeywords.InitialCatalog }, - { DbConnectionStringSynonyms.TRUSTEDCONNECTION, DbConnectionStringKeywords.IntegratedSecurity }, - { DbConnectionStringSynonyms.TRUSTSERVERCERTIFICATE, DbConnectionStringKeywords.TrustServerCertificate }, + { DbConnectionStringSynonyms.IpAddressPreference, DbConnectionStringKeywords.IpAddressPreference }, + { DbConnectionStringSynonyms.App, DbConnectionStringKeywords.ApplicationName }, + { DbConnectionStringSynonyms.ApplicationIntent, DbConnectionStringKeywords.ApplicationIntent }, + { DbConnectionStringSynonyms.ExtendedProperties, DbConnectionStringKeywords.AttachDbFilename }, + { DbConnectionStringSynonyms.HostNameInCertificate, DbConnectionStringKeywords.HostNameInCertificate }, + { DbConnectionStringSynonyms.ServerCertificate, DbConnectionStringKeywords.ServerCertificate}, + { DbConnectionStringSynonyms.InitialFileName, DbConnectionStringKeywords.AttachDbFilename }, + { DbConnectionStringSynonyms.ConnectRetryCount, DbConnectionStringKeywords.ConnectRetryCount }, + { DbConnectionStringSynonyms.ConnectRetryInterval, DbConnectionStringKeywords.ConnectRetryInterval }, + { DbConnectionStringSynonyms.ConnectionTimeout, DbConnectionStringKeywords.ConnectTimeout }, + { DbConnectionStringSynonyms.Timeout, DbConnectionStringKeywords.ConnectTimeout }, + { DbConnectionStringSynonyms.Language, DbConnectionStringKeywords.CurrentLanguage }, + { DbConnectionStringSynonyms.Addr, DbConnectionStringKeywords.DataSource }, + { DbConnectionStringSynonyms.Address, DbConnectionStringKeywords.DataSource }, + { DbConnectionStringSynonyms.MultipleActiveResultSets, DbConnectionStringKeywords.MultipleActiveResultSets }, + { DbConnectionStringSynonyms.MultiSubnetFailover, DbConnectionStringKeywords.MultiSubnetFailover }, + { DbConnectionStringSynonyms.NetworkAddress, DbConnectionStringKeywords.DataSource }, + { DbConnectionStringSynonyms.PoolBlockingPeriod, DbConnectionStringKeywords.PoolBlockingPeriod}, + { DbConnectionStringSynonyms.Server, DbConnectionStringKeywords.DataSource }, + { DbConnectionStringSynonyms.Database, DbConnectionStringKeywords.InitialCatalog }, + { DbConnectionStringSynonyms.TrustedConnection, DbConnectionStringKeywords.IntegratedSecurity }, + { DbConnectionStringSynonyms.TrustServerCertificate, DbConnectionStringKeywords.TrustServerCertificate }, { DbConnectionStringSynonyms.ConnectionLifetime, DbConnectionStringKeywords.LoadBalanceTimeout }, { DbConnectionStringSynonyms.Pwd, DbConnectionStringKeywords.Password }, - { DbConnectionStringSynonyms.PERSISTSECURITYINFO, DbConnectionStringKeywords.PersistSecurityInfo }, - { DbConnectionStringSynonyms.UID, DbConnectionStringKeywords.UserId }, + { DbConnectionStringSynonyms.PersistSecurityInfo, DbConnectionStringKeywords.PersistSecurityInfo }, + { DbConnectionStringSynonyms.Uid, DbConnectionStringKeywords.UserId }, { DbConnectionStringSynonyms.User, DbConnectionStringKeywords.UserId }, - { DbConnectionStringSynonyms.WSID, DbConnectionStringKeywords.WorkstationId }, - { DbConnectionStringSynonyms.ServerSPN, DbConnectionStringKeywords.ServerSpn }, - { DbConnectionStringSynonyms.FailoverPartnerSPN, DbConnectionStringKeywords.FailoverPartnerSpn }, + { DbConnectionStringSynonyms.WsId, DbConnectionStringKeywords.WorkstationId }, + { DbConnectionStringSynonyms.ServerSpn, DbConnectionStringKeywords.ServerSpn }, + { DbConnectionStringSynonyms.FailoverPartnerSpn, DbConnectionStringKeywords.FailoverPartnerSpn }, #if NETFRAMEWORK { DbConnectionStringKeywords.ConnectionReset, DbConnectionStringKeywords.ConnectionReset }, { DbConnectionStringKeywords.NetworkLibrary, DbConnectionStringKeywords.NetworkLibrary }, { DbConnectionStringKeywords.TransparentNetworkIpResolution, DbConnectionStringKeywords.TransparentNetworkIpResolution }, - { DbConnectionStringSynonyms.NET, DbConnectionStringKeywords.NetworkLibrary }, - { DbConnectionStringSynonyms.NETWORK, DbConnectionStringKeywords.NetworkLibrary }, - { DbConnectionStringSynonyms.TRANSPARENTNETWORKIPRESOLUTION, DbConnectionStringKeywords.TransparentNetworkIpResolution }, + { DbConnectionStringSynonyms.Net, DbConnectionStringKeywords.NetworkLibrary }, + { DbConnectionStringSynonyms.Network, DbConnectionStringKeywords.NetworkLibrary }, + { DbConnectionStringSynonyms.TransparentNetworkIpResolution, DbConnectionStringKeywords.TransparentNetworkIpResolution }, #endif // NETFRAMEWORK }; Debug.Assert(synonyms.Count == count, $"incorrect initial ParseSynonyms size {count} v/s {synonyms.Count}"); 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 cbd196ca53..140ac81e4f 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs @@ -237,40 +237,40 @@ private static Dictionary CreateKeywordsDictionary() { DbConnectionStringKeywords.ConnectionReset, Keywords.ConnectionReset }, { DbConnectionStringKeywords.TransparentNetworkIpResolution, Keywords.TransparentNetworkIPResolution }, { DbConnectionStringKeywords.NetworkLibrary, Keywords.NetworkLibrary }, - { DbConnectionStringSynonyms.NET, Keywords.NetworkLibrary }, - { DbConnectionStringSynonyms.NETWORK, Keywords.NetworkLibrary }, - { DbConnectionStringSynonyms.TRANSPARENTNETWORKIPRESOLUTION, Keywords.TransparentNetworkIPResolution }, + { DbConnectionStringSynonyms.Net, Keywords.NetworkLibrary }, + { DbConnectionStringSynonyms.Network, Keywords.NetworkLibrary }, + { DbConnectionStringSynonyms.TransparentNetworkIpResolution, Keywords.TransparentNetworkIPResolution }, #endif - { DbConnectionStringSynonyms.IPADDRESSPREFERENCE, Keywords.IPAddressPreference }, - { DbConnectionStringSynonyms.APP, Keywords.ApplicationName }, - { DbConnectionStringSynonyms.APPLICATIONINTENT, Keywords.ApplicationIntent }, - { DbConnectionStringSynonyms.EXTENDEDPROPERTIES, Keywords.AttachDBFilename }, - { DbConnectionStringSynonyms.HOSTNAMEINCERTIFICATE, Keywords.HostNameInCertificate }, - { DbConnectionStringSynonyms.SERVERCERTIFICATE, Keywords.ServerCertificate }, - { 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.IpAddressPreference, Keywords.IPAddressPreference }, + { DbConnectionStringSynonyms.App, Keywords.ApplicationName }, + { DbConnectionStringSynonyms.ApplicationIntent, Keywords.ApplicationIntent }, + { DbConnectionStringSynonyms.ExtendedProperties, Keywords.AttachDBFilename }, + { DbConnectionStringSynonyms.HostNameInCertificate, Keywords.HostNameInCertificate }, + { DbConnectionStringSynonyms.ServerCertificate, Keywords.ServerCertificate }, + { 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.PersistSecurityInfo, Keywords.PersistSecurityInfo }, + { DbConnectionStringSynonyms.Uid, Keywords.UserID }, { DbConnectionStringSynonyms.User, Keywords.UserID }, - { DbConnectionStringSynonyms.WSID, Keywords.WorkstationID }, - { DbConnectionStringSynonyms.ServerSPN, Keywords.ServerSPN }, - { DbConnectionStringSynonyms.FailoverPartnerSPN, Keywords.FailoverPartnerSPN }, + { DbConnectionStringSynonyms.WsId, Keywords.WorkstationID }, + { DbConnectionStringSynonyms.ServerSpn, Keywords.ServerSPN }, + { DbConnectionStringSynonyms.FailoverPartnerSpn, Keywords.FailoverPartnerSPN }, }; Debug.Assert((KeywordsCount + SqlConnectionString.SynonymCount) == pairs.Count, "initial expected size is incorrect"); return pairs; @@ -891,14 +891,14 @@ public override StandardValuesCollection GetStandardValues(ITypeDescriptorContex DbConnectionStringKeywords.ConnectionReset, DbConnectionStringKeywords.TransactionBinding, DbConnectionStringKeywords.TransparentNetworkIpResolution, - DbConnectionStringSynonyms.TRANSPARENTNETWORKIPRESOLUTION, + DbConnectionStringSynonyms.TransparentNetworkIpResolution, }; private static readonly string[] s_notSupportedNetworkLibraryKeywords = { DbConnectionStringKeywords.NetworkLibrary, - DbConnectionStringSynonyms.NET, - DbConnectionStringSynonyms.NETWORK, + DbConnectionStringSynonyms.Net, + DbConnectionStringSynonyms.Network, }; #endif #endregion //Private Methods From 9c7b8f76aad79f88fc2ebc128db6b79119d72052 Mon Sep 17 00:00:00 2001 From: Ben Russell Date: Thu, 5 Jun 2025 18:08:25 -0500 Subject: [PATCH 08/10] Statically build dictionary of keyword mappings. This should be cleaner than the old version. --- .../DbConnectionOptions.Debug.cs | 6 +- .../ConnectionString/DbConnectionOptions.cs | 9 +- .../DbConnectionString.netfx.cs | 22 +- .../SqlClient/SqlClientPermission.netfx.cs | 2 +- .../Data/SqlClient/SqlConnectionString.cs | 227 +++++++++--------- .../SqlClient/SqlConnectionStringBuilder.cs | 7 +- 6 files changed, 153 insertions(+), 120 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionOptions.Debug.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionOptions.Debug.cs index 867deb1ac3..368c351152 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionOptions.Debug.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionOptions.Debug.cs @@ -50,7 +50,7 @@ internal partial class DbConnectionOptions #endif [Conditional("DEBUG")] - private static void DebugTraceKeyValuePair(string keyname, string keyvalue, Dictionary synonyms) + private static void DebugTraceKeyValuePair(string keyname, string keyvalue, IReadOnlyDictionary synonyms) { if (SqlClientEventSource.Log.IsAdvancedTraceOn()) { @@ -77,7 +77,7 @@ private static void DebugTraceKeyValuePair(string keyname, string keyvalue, Dict private static void ParseComparison( Dictionary parseTable, string connectionString, - Dictionary synonyms, + IReadOnlyDictionary synonyms, bool firstKey, Exception e) { @@ -138,7 +138,7 @@ private static void ParseComparison( #if DEBUG private static Dictionary SplitConnectionString( string connectionString, - Dictionary synonyms, + IReadOnlyDictionary synonyms, bool firstKey) { var parseTable = new Dictionary(); diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionOptions.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionOptions.cs index 37c2f1e67d..127e8b29e6 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionOptions.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionOptions.cs @@ -45,7 +45,7 @@ internal partial class DbConnectionOptions internal Dictionary Parsetable => _parsetable; public bool IsEmpty => _keyChain == null; - public DbConnectionOptions(string connectionString, Dictionary synonyms) + public DbConnectionOptions(string connectionString, IReadOnlyDictionary synonyms) { _parsetable = new Dictionary(StringComparer.InvariantCultureIgnoreCase); _usersConnectionString = connectionString ?? ""; @@ -462,7 +462,12 @@ private static bool IsKeyNameValid(string keyname) return false; } - private static NameValuePair ParseInternal(Dictionary parsetable, string connectionString, bool buildChain, Dictionary synonyms, bool firstKey) + private static NameValuePair ParseInternal( + Dictionary parsetable, + string connectionString, + bool buildChain, + IReadOnlyDictionary synonyms, + bool firstKey) { Debug.Assert(connectionString != null, "null connectionstring"); StringBuilder buffer = new StringBuilder(); diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionString.netfx.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionString.netfx.cs index b302a58176..a0e0d0f6a7 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionString.netfx.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionString.netfx.cs @@ -47,7 +47,12 @@ internal sealed class DbConnectionString readonly private string _encryptedActualConnectionString; #pragma warning restore 169 - internal DbConnectionString(string value, string restrictions, KeyRestrictionBehavior behavior, Dictionary synonyms, bool useOdbcRules) + internal DbConnectionString( + string value, + string restrictions, + KeyRestrictionBehavior behavior, + IReadOnlyDictionary synonyms, + bool useOdbcRules) : this(new DbConnectionOptions(value, synonyms), restrictions, behavior, synonyms, false) { // useOdbcRules is only used to parse the connection string, not to parse restrictions because values don't apply there @@ -61,8 +66,14 @@ internal DbConnectionString(DbConnectionOptions connectionOptions) // since backward compatibility requires Everett level classes } - private DbConnectionString(DbConnectionOptions connectionOptions, string restrictions, KeyRestrictionBehavior behavior, Dictionary synonyms, bool mustCloneDictionary) - { // used by DBDataPermission + private DbConnectionString( + DbConnectionOptions connectionOptions, + string restrictions, + KeyRestrictionBehavior behavior, + IReadOnlyDictionary synonyms, + bool mustCloneDictionary) + { + // used by DBDataPermission Debug.Assert(connectionOptions != null, "null connectionOptions"); switch (behavior) { @@ -117,7 +128,10 @@ private DbConnectionString(DbConnectionOptions connectionOptions, string restric } } - private DbConnectionString(DbConnectionString connectionString, string[] restrictionValues, KeyRestrictionBehavior behavior) + private DbConnectionString( + DbConnectionString connectionString, + string[] restrictionValues, + KeyRestrictionBehavior behavior) { // used by intersect for two equal connection strings with different restrictions _encryptedUsersConnectionString = connectionString._encryptedUsersConnectionString; diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlClientPermission.netfx.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlClientPermission.netfx.cs index 5c72383b8f..0b8da2a31c 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlClientPermission.netfx.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlClientPermission.netfx.cs @@ -106,7 +106,7 @@ private bool _IsUnrestricted /// public override void Add(string connectionString, string restrictions, KeyRestrictionBehavior behavior) { - DbConnectionString constr = new DbConnectionString(connectionString, restrictions, behavior, SqlConnectionString.GetParseSynonyms(), false); + DbConnectionString constr = new DbConnectionString(connectionString, restrictions, behavior, SqlConnectionString.KeywordMap, false); AddPermissionEntry(constr); } diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs index ba5b8f3121..6a8a1ea20d 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs @@ -53,14 +53,8 @@ internal static class TRANSACTIONBINDING internal const string ImplicitUnbind = "Implicit Unbind"; internal const string ExplicitUnbind = "Explicit Unbind"; } - -#if NETFRAMEWORK - internal const int SynonymCount = 33; -#else - internal const int SynonymCount = 30; -#endif // NETFRAMEWORK - - private static Dictionary s_sqlClientSynonyms; + + private static readonly Dictionary s_keywordMap = new Dictionary(); private readonly bool _integratedSecurity; @@ -115,11 +109,105 @@ internal static class TRANSACTIONBINDING private static readonly Version s_constTypeSystemAsmVersion11 = new("11.0.0.0"); private readonly string _expandedAttachDBFilename; // expanded during construction so that CreatePermissionSet & Expand are consistent - + + #region Constructors + + /// + /// Static constructor to do things that we can't do in a single line initialization. + /// + static SqlConnectionString() + { + // Add keywords and synonyms to the keyword map. + // @TODO: About half of these synonyms are just the same as the keyword but with spaces + // removed. However, not all multiword keywords are supported without spaced. We + // should just add support for all keywords w/ or w/o spaces, then remove them from + // synonyms. + AddKeywordToMap(DbConnectionStringKeywords.ApplicationIntent, + DbConnectionStringSynonyms.ApplicationIntent); + AddKeywordToMap(DbConnectionStringKeywords.ApplicationName, + DbConnectionStringSynonyms.App); + AddKeywordToMap(DbConnectionStringKeywords.AttachDbFilename, + DbConnectionStringSynonyms.ExtendedProperties, + DbConnectionStringSynonyms.InitialFileName); + AddKeywordToMap(DbConnectionStringKeywords.AttestationProtocol); + AddKeywordToMap(DbConnectionStringKeywords.Authentication); + AddKeywordToMap(DbConnectionStringKeywords.ColumnEncryptionSetting); + AddKeywordToMap(DbConnectionStringKeywords.CommandTimeout); + AddKeywordToMap(DbConnectionStringKeywords.ConnectRetryCount, + DbConnectionStringSynonyms.ConnectRetryCount); + AddKeywordToMap(DbConnectionStringKeywords.ConnectRetryInterval, + DbConnectionStringSynonyms.ConnectRetryInterval); + AddKeywordToMap(DbConnectionStringKeywords.ConnectTimeout, + DbConnectionStringSynonyms.ConnectionTimeout, + DbConnectionStringSynonyms.Timeout); + AddKeywordToMap(DbConnectionStringKeywords.ContextConnection); + AddKeywordToMap(DbConnectionStringKeywords.CurrentLanguage, + DbConnectionStringSynonyms.Language); + AddKeywordToMap(DbConnectionStringKeywords.DataSource, + DbConnectionStringSynonyms.Addr, + DbConnectionStringSynonyms.Address, + DbConnectionStringSynonyms.NetworkAddress, + DbConnectionStringSynonyms.Server); + AddKeywordToMap(DbConnectionStringKeywords.EnclaveAttestationUrl); + AddKeywordToMap(DbConnectionStringKeywords.Encrypt); + AddKeywordToMap(DbConnectionStringKeywords.Enlist); + AddKeywordToMap(DbConnectionStringKeywords.FailoverPartner); + AddKeywordToMap(DbConnectionStringKeywords.FailoverPartnerSpn, + DbConnectionStringSynonyms.FailoverPartnerSpn); + AddKeywordToMap(DbConnectionStringKeywords.HostNameInCertificate, + DbConnectionStringSynonyms.HostNameInCertificate); + AddKeywordToMap(DbConnectionStringKeywords.InitialCatalog, + DbConnectionStringSynonyms.Database); + AddKeywordToMap(DbConnectionStringKeywords.IntegratedSecurity, + DbConnectionStringSynonyms.TrustedConnection); + AddKeywordToMap(DbConnectionStringKeywords.IpAddressPreference, + DbConnectionStringSynonyms.IpAddressPreference); + AddKeywordToMap(DbConnectionStringKeywords.LoadBalanceTimeout, + DbConnectionStringSynonyms.ConnectionLifetime); + AddKeywordToMap(DbConnectionStringKeywords.MultipleActiveResultSets, + DbConnectionStringSynonyms.MultipleActiveResultSets); + AddKeywordToMap(DbConnectionStringKeywords.MaxPoolSize); + AddKeywordToMap(DbConnectionStringKeywords.MinPoolSize); + AddKeywordToMap(DbConnectionStringKeywords.MultiSubnetFailover, + DbConnectionStringSynonyms.MultiSubnetFailover); + AddKeywordToMap(DbConnectionStringKeywords.PacketSize); + AddKeywordToMap(DbConnectionStringKeywords.Password, + DbConnectionStringSynonyms.Pwd); + AddKeywordToMap(DbConnectionStringKeywords.PersistSecurityInfo, + DbConnectionStringSynonyms.PersistSecurityInfo); + AddKeywordToMap(DbConnectionStringKeywords.Pooling); + AddKeywordToMap(DbConnectionStringKeywords.PoolBlockingPeriod, + DbConnectionStringSynonyms.PoolBlockingPeriod); + AddKeywordToMap(DbConnectionStringKeywords.Replication); + AddKeywordToMap(DbConnectionStringKeywords.ServerCertificate, + DbConnectionStringSynonyms.ServerCertificate); + AddKeywordToMap(DbConnectionStringKeywords.ServerSpn, + DbConnectionStringSynonyms.ServerSpn); + AddKeywordToMap(DbConnectionStringKeywords.TrustServerCertificate, + DbConnectionStringSynonyms.TrustServerCertificate); + AddKeywordToMap(DbConnectionStringKeywords.TransactionBinding); + AddKeywordToMap(DbConnectionStringKeywords.TypeSystemVersion); + AddKeywordToMap(DbConnectionStringKeywords.UserId, + DbConnectionStringSynonyms.Uid, + DbConnectionStringSynonyms.User); + AddKeywordToMap(DbConnectionStringKeywords.UserInstance); + AddKeywordToMap(DbConnectionStringKeywords.WorkstationId, + DbConnectionStringSynonyms.WsId); + + #if NETFRAMEWORK + AddKeywordToMap(DbConnectionStringKeywords.ConnectionReset); + AddKeywordToMap(DbConnectionStringKeywords.NetworkLibrary, + DbConnectionStringSynonyms.Net, + DbConnectionStringSynonyms.Network); + AddKeywordToMap(DbConnectionStringKeywords.TransparentNetworkIpResolution, + DbConnectionStringSynonyms.TransparentNetworkIpResolution); + #endif + } + // SxS: reading Software\\Microsoft\\MSSQLServer\\Client\\SuperSocketNetLib\Encrypt value from registry [ResourceExposure(ResourceScope.None)] [ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)] - internal SqlConnectionString(string connectionString): base(connectionString, GetParseSynonyms()) + internal SqlConnectionString(string connectionString): base(connectionString, s_keywordMap) { #if !NETFRAMEWORK ThrowUnsupportedIfKeywordSet(DbConnectionStringKeywords.ConnectionReset); @@ -482,8 +570,13 @@ internal SqlConnectionString(SqlConnectionString connectionOptions, string dataS ValidateValueLength(_dataSource, TdsEnums.MAXLEN_SERVERNAME, DbConnectionStringKeywords.DataSource); } + #endregion + internal bool IntegratedSecurity => _integratedSecurity; + // @TODO: This is temporary until we can remove DbConnectionString (see SqlClientPermission) + internal static IReadOnlyDictionary KeywordMap => s_keywordMap; + // We always initialize in Async mode so that both synchronous and asynchronous methods // will work. In the future we can deprecate the keyword entirely. internal bool Asynchronous => true; @@ -586,104 +679,6 @@ private static bool CompareHostName(ref string host, string name, bool fixup) return equal; } - // This dictionary is meant to be read-only translation of parsed string - // keywords/synonyms to a known keyword string. - internal static Dictionary GetParseSynonyms() - { - Dictionary synonyms = s_sqlClientSynonyms; - if (synonyms == null) - { - - int count = SqlConnectionStringBuilder.KeywordsCount + SynonymCount; - synonyms = new Dictionary(count, StringComparer.OrdinalIgnoreCase) - { - { DbConnectionStringKeywords.ApplicationIntent, DbConnectionStringKeywords.ApplicationIntent }, - { DbConnectionStringKeywords.ApplicationName, DbConnectionStringKeywords.ApplicationName }, - { DbConnectionStringKeywords.AttachDbFilename, DbConnectionStringKeywords.AttachDbFilename }, - { DbConnectionStringKeywords.AttestationProtocol, DbConnectionStringKeywords.AttestationProtocol}, - { DbConnectionStringKeywords.Authentication, DbConnectionStringKeywords.Authentication }, - { DbConnectionStringKeywords.ColumnEncryptionSetting, DbConnectionStringKeywords.ColumnEncryptionSetting }, - { DbConnectionStringKeywords.CommandTimeout, DbConnectionStringKeywords.CommandTimeout }, - { DbConnectionStringKeywords.ConnectRetryCount, DbConnectionStringKeywords.ConnectRetryCount }, - { DbConnectionStringKeywords.ConnectRetryInterval, DbConnectionStringKeywords.ConnectRetryInterval }, - { DbConnectionStringKeywords.ConnectTimeout, DbConnectionStringKeywords.ConnectTimeout }, - { DbConnectionStringKeywords.ContextConnection, DbConnectionStringKeywords.ContextConnection }, - { DbConnectionStringKeywords.CurrentLanguage, DbConnectionStringKeywords.CurrentLanguage }, - { DbConnectionStringKeywords.DataSource, DbConnectionStringKeywords.DataSource }, - { DbConnectionStringKeywords.EnclaveAttestationUrl, DbConnectionStringKeywords.EnclaveAttestationUrl }, - { DbConnectionStringKeywords.Encrypt, DbConnectionStringKeywords.Encrypt }, - { DbConnectionStringKeywords.Enlist, DbConnectionStringKeywords.Enlist }, - { DbConnectionStringKeywords.FailoverPartner, DbConnectionStringKeywords.FailoverPartner }, - { DbConnectionStringKeywords.FailoverPartnerSpn, DbConnectionStringKeywords.FailoverPartnerSpn }, - { DbConnectionStringKeywords.HostNameInCertificate, DbConnectionStringKeywords.HostNameInCertificate }, - { DbConnectionStringKeywords.ServerCertificate, DbConnectionStringKeywords.ServerCertificate}, - { DbConnectionStringKeywords.InitialCatalog, DbConnectionStringKeywords.InitialCatalog }, - { DbConnectionStringKeywords.IntegratedSecurity, DbConnectionStringKeywords.IntegratedSecurity }, - { DbConnectionStringKeywords.IpAddressPreference, DbConnectionStringKeywords.IpAddressPreference }, - { DbConnectionStringKeywords.LoadBalanceTimeout, DbConnectionStringKeywords.LoadBalanceTimeout }, - { DbConnectionStringKeywords.MultipleActiveResultSets, DbConnectionStringKeywords.MultipleActiveResultSets }, - { DbConnectionStringKeywords.MaxPoolSize, DbConnectionStringKeywords.MaxPoolSize }, - { DbConnectionStringKeywords.MinPoolSize, DbConnectionStringKeywords.MinPoolSize }, - { DbConnectionStringKeywords.MultiSubnetFailover, DbConnectionStringKeywords.MultiSubnetFailover }, - { DbConnectionStringKeywords.PacketSize, DbConnectionStringKeywords.PacketSize }, - { DbConnectionStringKeywords.Password, DbConnectionStringKeywords.Password }, - { DbConnectionStringKeywords.PersistSecurityInfo, DbConnectionStringKeywords.PersistSecurityInfo }, - { DbConnectionStringKeywords.Pooling, DbConnectionStringKeywords.Pooling }, - { DbConnectionStringKeywords.PoolBlockingPeriod, DbConnectionStringKeywords.PoolBlockingPeriod }, - { DbConnectionStringKeywords.Replication, DbConnectionStringKeywords.Replication }, - { DbConnectionStringKeywords.ServerSpn, DbConnectionStringKeywords.ServerSpn }, - { DbConnectionStringKeywords.TrustServerCertificate, DbConnectionStringKeywords.TrustServerCertificate }, - { DbConnectionStringKeywords.TransactionBinding, DbConnectionStringKeywords.TransactionBinding }, - { DbConnectionStringKeywords.TypeSystemVersion, DbConnectionStringKeywords.TypeSystemVersion }, - { DbConnectionStringKeywords.UserId, DbConnectionStringKeywords.UserId }, - { DbConnectionStringKeywords.UserInstance, DbConnectionStringKeywords.UserInstance }, - { DbConnectionStringKeywords.WorkstationId, DbConnectionStringKeywords.WorkstationId }, - - { DbConnectionStringSynonyms.IpAddressPreference, DbConnectionStringKeywords.IpAddressPreference }, - { DbConnectionStringSynonyms.App, DbConnectionStringKeywords.ApplicationName }, - { DbConnectionStringSynonyms.ApplicationIntent, DbConnectionStringKeywords.ApplicationIntent }, - { DbConnectionStringSynonyms.ExtendedProperties, DbConnectionStringKeywords.AttachDbFilename }, - { DbConnectionStringSynonyms.HostNameInCertificate, DbConnectionStringKeywords.HostNameInCertificate }, - { DbConnectionStringSynonyms.ServerCertificate, DbConnectionStringKeywords.ServerCertificate}, - { DbConnectionStringSynonyms.InitialFileName, DbConnectionStringKeywords.AttachDbFilename }, - { DbConnectionStringSynonyms.ConnectRetryCount, DbConnectionStringKeywords.ConnectRetryCount }, - { DbConnectionStringSynonyms.ConnectRetryInterval, DbConnectionStringKeywords.ConnectRetryInterval }, - { DbConnectionStringSynonyms.ConnectionTimeout, DbConnectionStringKeywords.ConnectTimeout }, - { DbConnectionStringSynonyms.Timeout, DbConnectionStringKeywords.ConnectTimeout }, - { DbConnectionStringSynonyms.Language, DbConnectionStringKeywords.CurrentLanguage }, - { DbConnectionStringSynonyms.Addr, DbConnectionStringKeywords.DataSource }, - { DbConnectionStringSynonyms.Address, DbConnectionStringKeywords.DataSource }, - { DbConnectionStringSynonyms.MultipleActiveResultSets, DbConnectionStringKeywords.MultipleActiveResultSets }, - { DbConnectionStringSynonyms.MultiSubnetFailover, DbConnectionStringKeywords.MultiSubnetFailover }, - { DbConnectionStringSynonyms.NetworkAddress, DbConnectionStringKeywords.DataSource }, - { DbConnectionStringSynonyms.PoolBlockingPeriod, DbConnectionStringKeywords.PoolBlockingPeriod}, - { DbConnectionStringSynonyms.Server, DbConnectionStringKeywords.DataSource }, - { DbConnectionStringSynonyms.Database, DbConnectionStringKeywords.InitialCatalog }, - { DbConnectionStringSynonyms.TrustedConnection, DbConnectionStringKeywords.IntegratedSecurity }, - { DbConnectionStringSynonyms.TrustServerCertificate, DbConnectionStringKeywords.TrustServerCertificate }, - { DbConnectionStringSynonyms.ConnectionLifetime, DbConnectionStringKeywords.LoadBalanceTimeout }, - { DbConnectionStringSynonyms.Pwd, DbConnectionStringKeywords.Password }, - { DbConnectionStringSynonyms.PersistSecurityInfo, DbConnectionStringKeywords.PersistSecurityInfo }, - { DbConnectionStringSynonyms.Uid, DbConnectionStringKeywords.UserId }, - { DbConnectionStringSynonyms.User, DbConnectionStringKeywords.UserId }, - { DbConnectionStringSynonyms.WsId, DbConnectionStringKeywords.WorkstationId }, - { DbConnectionStringSynonyms.ServerSpn, DbConnectionStringKeywords.ServerSpn }, - { DbConnectionStringSynonyms.FailoverPartnerSpn, DbConnectionStringKeywords.FailoverPartnerSpn }, -#if NETFRAMEWORK - { DbConnectionStringKeywords.ConnectionReset, DbConnectionStringKeywords.ConnectionReset }, - { DbConnectionStringKeywords.NetworkLibrary, DbConnectionStringKeywords.NetworkLibrary }, - { DbConnectionStringKeywords.TransparentNetworkIpResolution, DbConnectionStringKeywords.TransparentNetworkIpResolution }, - { DbConnectionStringSynonyms.Net, DbConnectionStringKeywords.NetworkLibrary }, - { DbConnectionStringSynonyms.Network, DbConnectionStringKeywords.NetworkLibrary }, - { DbConnectionStringSynonyms.TransparentNetworkIpResolution, DbConnectionStringKeywords.TransparentNetworkIpResolution }, -#endif // NETFRAMEWORK - }; - Debug.Assert(synonyms.Count == count, $"incorrect initial ParseSynonyms size {count} v/s {synonyms.Count}"); - Interlocked.CompareExchange(ref s_sqlClientSynonyms, synonyms, null); - } - return synonyms; - } - internal string ObtainWorkstationId() { // If not supplied by the user, the default value is the MachineName @@ -988,5 +983,21 @@ protected internal override PermissionSet CreatePermissionSet() internal string NetworkLibrary => _networkLibrary; #endif // NETFRAMEWORK + + #region Private Methods + + private static void AddKeywordToMap(string keyword, params string[] synonyms) + { + // Add mapping of keyword to keyword + s_keywordMap.Add(keyword, keyword); + + // Add mapping of synonyms to keyword + foreach (string synonym in synonyms) + { + s_keywordMap.Add(synonym, keyword); + } + } + + #endregion } } 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 140ac81e4f..177075e48c 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs @@ -190,7 +190,11 @@ private static string[] CreateValidKeywords() private static Dictionary CreateKeywordsDictionary() { - Dictionary pairs = new(KeywordsCount + SqlConnectionString.SynonymCount, StringComparer.OrdinalIgnoreCase) + // @TODO: Ok, I think we should consider centralizing all these keywords into a single + // place. We have DbConnectionString*, Keywords, etc. + // Can we consider something DbConnectionOptions as backing store for the values + // and both SqlConnectionStringBuilder and SqlConnectionString use it to store? + Dictionary pairs = new(StringComparer.OrdinalIgnoreCase) { { DbConnectionStringKeywords.ApplicationIntent, Keywords.ApplicationIntent }, { DbConnectionStringKeywords.ApplicationName, Keywords.ApplicationName }, @@ -272,7 +276,6 @@ private static Dictionary CreateKeywordsDictionary() { DbConnectionStringSynonyms.ServerSpn, Keywords.ServerSPN }, { DbConnectionStringSynonyms.FailoverPartnerSpn, Keywords.FailoverPartnerSPN }, }; - Debug.Assert((KeywordsCount + SqlConnectionString.SynonymCount) == pairs.Count, "initial expected size is incorrect"); return pairs; } From daafebe41753a5b91837cd6da080231a3e7169f6 Mon Sep 17 00:00:00 2001 From: Ben Russell Date: Wed, 25 Jun 2025 13:23:19 -0500 Subject: [PATCH 09/10] Synonym comparison is supposed to be case-insensitive --- .../src/Microsoft/Data/SqlClient/SqlConnectionString.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs index 6a8a1ea20d..462777d18f 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs @@ -54,7 +54,8 @@ internal static class TRANSACTIONBINDING internal const string ExplicitUnbind = "Explicit Unbind"; } - private static readonly Dictionary s_keywordMap = new Dictionary(); + private static readonly Dictionary s_keywordMap = + new Dictionary(StringComparer.InvariantCultureIgnoreCase); private readonly bool _integratedSecurity; From ec39ad56b305478088da5f2a9b4c031803c79aca Mon Sep 17 00:00:00 2001 From: Ben Russell Date: Thu, 26 Jun 2025 17:25:01 -0500 Subject: [PATCH 10/10] Fixing typos as per @paulmedynski's comments --- .../netfx/src/Microsoft/Data/SqlClient/SqlConnection.cs | 2 +- .../src/Microsoft/Data/SqlClient/SqlConnectionString.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnection.cs b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnection.cs index eb5cd8442b..c2ea5c3981 100644 --- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnection.cs +++ b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnection.cs @@ -685,7 +685,7 @@ public string AccessToken // When a connection is connecting or is ever opened, make AccessToken available only if "Persist Security Info" is set to true // otherwise, return null SqlConnectionString connectionOptions = (SqlConnectionString)UserConnectionOptions; - return InnerConnection.ShouldHidePassword&& connectionOptions != null && !connectionOptions.PersistSecurityInfo ? null : _accessToken; + return InnerConnection.ShouldHidePassword && connectionOptions != null && !connectionOptions.PersistSecurityInfo ? null : _accessToken; } set { diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs index 462777d18f..4637a2708a 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs @@ -120,7 +120,7 @@ static SqlConnectionString() { // Add keywords and synonyms to the keyword map. // @TODO: About half of these synonyms are just the same as the keyword but with spaces - // removed. However, not all multiword keywords are supported without spaced. We + // removed. However, not all multiword keywords are supported without spaces. We // should just add support for all keywords w/ or w/o spaces, then remove them from // synonyms. AddKeywordToMap(DbConnectionStringKeywords.ApplicationIntent,