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/netcore/src/Microsoft/Data/SqlClient/SqlConnection.cs b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnection.cs index 45df50badb..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 @@ -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; } @@ -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 46800b4140..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 @@ -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; } } @@ -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; @@ -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..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(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/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 39d66a41e0..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 ?? ""; @@ -56,8 +56,8 @@ 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) || - _parsetable.ContainsKey(DbConnectionStringSynonyms.UID); + _hasUserIdKeyword = _parsetable.ContainsKey(DbConnectionStringKeywords.UserId) || + _parsetable.ContainsKey(DbConnectionStringSynonyms.Uid); } } @@ -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(); @@ -573,7 +578,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". @@ -628,7 +633,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};"); } @@ -644,7 +649,7 @@ internal string ExpandAttachDbFileName(string replacementValue) #endif #endregion - + #region NetFx Methods #if NETFRAMEWORK @@ -679,8 +684,8 @@ internal bool HasBlankPassword return string.IsNullOrEmpty(value); // MDAC 83097 } - return (_parsetable.TryGetValue(DbConnectionStringKeywords.UserID, out value) && !string.IsNullOrEmpty(value)) || - (_parsetable.TryGetValue(DbConnectionStringSynonyms.UID, 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; } @@ -770,6 +775,5 @@ internal static void AppendKeyValuePairBuilder(StringBuilder builder, string key } #endif #endregion - } } 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/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/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/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/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/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/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/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 3816e74e49..4637a2708a 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionString.cs @@ -24,179 +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 - { - 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 - { - // 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, @@ -226,14 +53,9 @@ 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(StringComparer.InvariantCultureIgnoreCase); private readonly bool _integratedSecurity; @@ -288,17 +110,111 @@ 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 spaces. 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(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(); } @@ -307,50 +223,50 @@ 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(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, 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(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, DEFAULT.FailoverPartner); - _initialCatalog = ConvertValueToString(KEY.Initial_Catalog, DEFAULT.Initial_Catalog); - _password = ConvertValueToString(KEY.Password, DEFAULT.Password); - _trustServerCertificate = ConvertValueToBoolean(KEY.TrustServerCertificate, DEFAULT.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, DEFAULT.EnclaveAttestationUrl); + _enclaveAttestationUrl = ConvertValueToString(DbConnectionStringKeywords.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(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, DEFAULT.User_ID); - _workstationId = ConvertValueToString(KEY.Workstation_Id, null); + _userID = ConvertValueToString(DbConnectionStringKeywords.UserId, DbConnectionStringDefaults.UserId); + _workstationId = ConvertValueToString(DbConnectionStringKeywords.WorkstationId, null); if (_contextConnection) { @@ -359,27 +275,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) { @@ -393,9 +309,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, DEFAULT.Connection_Reset); - _transparentNetworkIPResolution = ConvertValueToBoolean(KEY.TransparentNetworkIPResolution, DEFAULT.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 @@ -403,13 +319,13 @@ 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]; } else { - _networkLibrary = DEFAULT.Network_Library; + _networkLibrary = DbConnectionStringDefaults.NetworkLibrary; } #endif // NETFRAMEWORK @@ -425,19 +341,19 @@ 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(DEFAULT.FailoverPartner, _failoverPartner, StringComparison.OrdinalIgnoreCase)) + if (!string.Equals(DbConnectionStringDefaults.FailoverPartner, _failoverPartner, StringComparison.OrdinalIgnoreCase)) { // fail-over partner is set @@ -446,21 +362,21 @@ 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); + 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| @@ -475,11 +391,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; @@ -516,7 +432,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)) @@ -534,7 +450,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)) @@ -652,11 +568,16 @@ 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); } + #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; @@ -724,7 +645,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 @@ -759,104 +680,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) - { - { 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 }, -#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 }, -#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 @@ -869,7 +692,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; } @@ -903,7 +726,7 @@ internal static void VerifyLocalHostAndFixup(ref string host, bool enforceLocalH { if (enforceLocalHost) { - throw ADP.InvalidConnectionOptionValue(KEY.AttachDBFilename); + throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.AttachDbFilename); } } } @@ -928,24 +751,24 @@ private static string GetComputerNameDnsFullyQualified() internal ApplicationIntent ConvertValueToApplicationIntent() { - if (!TryGetParsetableValue(KEY.ApplicationIntent, out string value)) + if (!TryGetParsetableValue(DbConnectionStringKeywords.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, // 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) } @@ -962,22 +785,22 @@ internal void ThrowUnsupportedIfKeywordSet(string keyword) internal SqlAuthenticationMethod ConvertValueToAuthenticationType() { - if (!TryGetParsetableValue(KEY.Authentication, out string value)) + if (!TryGetParsetableValue(DbConnectionStringKeywords.Authentication, out string value)) { - return DEFAULT.Authentication; + 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); } } @@ -987,22 +810,22 @@ internal SqlAuthenticationMethod ConvertValueToAuthenticationType() /// internal SqlConnectionColumnEncryptionSetting ConvertValueToColumnEncryptionSetting() { - if (!TryGetParsetableValue(KEY.ColumnEncryptionSetting, out string value)) + if (!TryGetParsetableValue(DbConnectionStringKeywords.ColumnEncryptionSetting, out string value)) { - return DEFAULT.ColumnEncryptionSetting; + 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); } } @@ -1012,22 +835,22 @@ internal SqlConnectionColumnEncryptionSetting ConvertValueToColumnEncryptionSett /// internal SqlConnectionAttestationProtocol ConvertValueToAttestationProtocol() { - if (!TryGetParsetableValue(KEY.AttestationProtocol, out string value)) + if (!TryGetParsetableValue(DbConnectionStringKeywords.AttestationProtocol, out string value)) { - return DEFAULT.AttestationProtocol; + 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); } } @@ -1037,60 +860,60 @@ internal SqlConnectionAttestationProtocol ConvertValueToAttestationProtocol() /// internal SqlConnectionIPAddressPreference ConvertValueToIPAddressPreference() { - if (!TryGetParsetableValue(KEY.IPAddressPreference, out string value)) + if (!TryGetParsetableValue(DbConnectionStringKeywords.IpAddressPreference, out string value)) { - return DEFAULT.IpAddressPreference; + 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 DEFAULT.PoolBlockingPeriod; + 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 DEFAULT.Encrypt; + 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); } } @@ -1161,5 +984,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 6c3e5989f4..177075e48c 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 @@ -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,34 +167,38 @@ 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; } 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 }, - { DbConnectionStringKeywords.AttachDBFilename, Keywords.AttachDBFilename }, + { DbConnectionStringKeywords.AttachDbFilename, Keywords.AttachDBFilename }, { DbConnectionStringKeywords.PoolBlockingPeriod, Keywords.PoolBlockingPeriod }, { DbConnectionStringKeywords.CommandTimeout, Keywords.CommandTimeout }, { DbConnectionStringKeywords.ConnectTimeout, Keywords.ConnectTimeout }, @@ -220,59 +224,58 @@ 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 }, - { 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; } @@ -429,7 +432,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 +519,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 +537,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 +552,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; @@ -599,7 +602,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,15 +893,15 @@ public override StandardValuesCollection GetStandardValues(ITypeDescriptorContex private static readonly string[] s_notSupportedKeywords = { DbConnectionStringKeywords.ConnectionReset, DbConnectionStringKeywords.TransactionBinding, - DbConnectionStringKeywords.TransparentNetworkIPResolution, - DbConnectionStringSynonyms.TRANSPARENTNETWORKIPRESOLUTION, + DbConnectionStringKeywords.TransparentNetworkIpResolution, + DbConnectionStringSynonyms.TransparentNetworkIpResolution, }; private static readonly string[] s_notSupportedNetworkLibraryKeywords = { DbConnectionStringKeywords.NetworkLibrary, - DbConnectionStringSynonyms.NET, - DbConnectionStringSynonyms.NETWORK, + DbConnectionStringSynonyms.Net, + DbConnectionStringSynonyms.Network, }; #endif #endregion //Private Methods @@ -1118,7 +1121,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 +1131,7 @@ public string AttachDBFilename get => _attachDBFilename; set { - SetValue(DbConnectionStringKeywords.AttachDBFilename, value); + SetValue(DbConnectionStringKeywords.AttachDbFilename, value); _attachDBFilename = value; } } @@ -1203,7 +1206,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 +1215,7 @@ public string ServerSPN get => _serverSPN; set { - SetValue(DbConnectionStringKeywords.ServerSPN, value); + SetValue(DbConnectionStringKeywords.ServerSpn, value); _serverSPN = value; } } @@ -1319,7 +1322,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 +1388,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 +1397,7 @@ public string FailoverPartnerSPN get => _failoverPartnerSPN; set { - SetValue(DbConnectionStringKeywords.FailoverPartnerSPN, value); + SetValue(DbConnectionStringKeywords.FailoverPartnerSpn, value); _failoverPartnerSPN = value; } } @@ -1708,7 +1711,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 +1720,7 @@ public string UserID get => _userID; set { - SetValue(DbConnectionStringKeywords.UserID, value); + SetValue(DbConnectionStringKeywords.UserId, value); _userID = value; } } @@ -1738,7 +1741,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 +1750,7 @@ public string WorkstationID get => _workstationID; set { - SetValue(DbConnectionStringKeywords.WorkstationID, value); + SetValue(DbConnectionStringKeywords.WorkstationId, value); _workstationID = value; } } @@ -1844,7 +1847,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 +1856,7 @@ public bool TransparentNetworkIPResolution get => _transparentNetworkIPResolution; set { - SetValue(DbConnectionStringKeywords.TransparentNetworkIPResolution, value); + SetValue(DbConnectionStringKeywords.TransparentNetworkIpResolution, value); _transparentNetworkIPResolution = value; } } 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; }