| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891 |
- //------------------------------------------------------------------------------
- // <copyright file="DbConnectionStringBuilder.cs" company="Microsoft">
- // Copyright (c) Microsoft Corporation. All rights reserved.
- // </copyright>
- // <owner current="true" primary="true">[....]</owner>
- // <owner current="true" primary="false">[....]</owner>
- //------------------------------------------------------------------------------
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Data.Common;
- using System.Diagnostics;
- using System.Globalization;
- using System.Runtime.Serialization;
- using System.Security.Permissions;
- using System.Text;
- using System.Text.RegularExpressions;
- using System.Data.SqlClient;
- namespace System.Data.Common {
- /*
- internal sealed class NamedConnectionStringConverter : StringConverter {
- public NamedConnectionStringConverter() {
- }
- public override bool GetStandardValuesSupported(ITypeDescriptorContext context) {
- return true;
- }
- public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) {
- // Although theoretically this could be true, some people may want to just type in a name
- return false;
- }
- public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) {
- StandardValuesCollection standardValues = null;
- if (null != context) {
- DbConnectionStringBuilder instance = (context.Instance as DbConnectionStringBuilder);
- if (null != instance) {
- string myProviderName = instance.GetType().Namespace;
- List<string> myConnectionNames = new List<string>();
- foreach(System.Configuration.ConnectionStringSetting setting in System.Configuration.ConfigurationManager.ConnectionStrings) {
- if (myProviderName.EndsWith(setting.ProviderName)) {
- myConnectionNames.Add(setting.ConnectionName);
- }
- }
- standardValues = new StandardValuesCollection(myConnectionNames);
- }
- }
- return standardValues;
- }
- }
- */
- internal class DbConnectionStringBuilderDescriptor : PropertyDescriptor {
- private Type _componentType;
- private Type _propertyType;
- private bool _isReadOnly;
- private bool _refreshOnChange;
- internal DbConnectionStringBuilderDescriptor(string propertyName, Type componentType, Type propertyType, bool isReadOnly, Attribute[] attributes) : base(propertyName, attributes) {
- //Bid.Trace("<comm.DbConnectionStringBuilderDescriptor|INFO> propertyName='%ls', propertyType='%ls'\n", propertyName, propertyType.Name);
- _componentType = componentType;
- _propertyType = propertyType;
- _isReadOnly = isReadOnly;
- }
- internal bool RefreshOnChange {
- get {
- return _refreshOnChange;
- }
- set {
- _refreshOnChange = value;
- }
- }
- public override Type ComponentType {
- get {
- return _componentType;
- }
- }
- public override bool IsReadOnly {
- get {
- return _isReadOnly;
- }
- }
- public override Type PropertyType {
- get {
- return _propertyType;
- }
- }
- public override bool CanResetValue(object component) {
- DbConnectionStringBuilder builder = (component as DbConnectionStringBuilder);
- return ((null != builder) && builder.ShouldSerialize(DisplayName));
- }
- public override object GetValue(object component) {
- DbConnectionStringBuilder builder = (component as DbConnectionStringBuilder);
- if (null != builder) {
- object value;
- if (builder.TryGetValue(DisplayName, out value)) {
- return value;
- }
- }
- return null;
- }
- public override void ResetValue(object component) {
- DbConnectionStringBuilder builder = (component as DbConnectionStringBuilder);
- if (null != builder) {
- builder.Remove(DisplayName);
- if (RefreshOnChange) {
- builder.ClearPropertyDescriptors();
- }
- }
- }
- public override void SetValue(object component, object value) {
- DbConnectionStringBuilder builder = (component as DbConnectionStringBuilder);
- if (null != builder) {
- // via the editor, empty string does a defacto Reset
- if ((typeof(string) == PropertyType) && String.Empty.Equals(value)) {
- value = null;
- }
- builder[DisplayName] = value;
- if (RefreshOnChange) {
- builder.ClearPropertyDescriptors();
- }
- }
- }
- public override bool ShouldSerializeValue(object component) {
- DbConnectionStringBuilder builder = (component as DbConnectionStringBuilder);
- return ((null != builder) && builder.ShouldSerialize(DisplayName));
- }
- }
- [Serializable()]
- internal sealed class ReadOnlyCollection<T> : System.Collections.ICollection, ICollection<T> {
- private T[] _items;
- internal ReadOnlyCollection(T[] items) {
- _items = items;
- #if DEBUG
- for(int i = 0; i < items.Length; ++i) {
- Debug.Assert(null != items[i], "null item");
- }
- #endif
- }
- public void CopyTo(T[] array, int arrayIndex) {
- Array.Copy(_items, 0, array, arrayIndex, _items.Length);
- }
- void System.Collections.ICollection.CopyTo(Array array, int arrayIndex) {
- Array.Copy(_items, 0, array, arrayIndex, _items.Length);
- }
- IEnumerator<T> IEnumerable<T>.GetEnumerator() {
- return new Enumerator<T>(_items);
- }
- public System.Collections.IEnumerator GetEnumerator() {
- return new Enumerator<T>(_items);
- }
- bool System.Collections.ICollection.IsSynchronized {
- get { return false; }
- }
- Object System.Collections.ICollection.SyncRoot {
- get { return _items; }
- }
- bool ICollection<T>.IsReadOnly {
- get { return true;}
- }
- void ICollection<T>.Add(T value) {
- throw new NotSupportedException();
- }
- void ICollection<T>.Clear() {
- throw new NotSupportedException();
- }
- bool ICollection<T>.Contains(T value) {
- return Array.IndexOf(_items, value) >= 0;
- }
- bool ICollection<T>.Remove(T value) {
- throw new NotSupportedException();
- }
- public int Count {
- get { return _items.Length; }
- }
- [Serializable()]
- internal struct Enumerator<K> : IEnumerator<K>, System.Collections.IEnumerator { // based on List<T>.Enumerator
- private K[] _items;
- private int _index;
- internal Enumerator(K[] items) {
- _items = items;
- _index = -1;
- }
- public void Dispose() {
- }
- public bool MoveNext() {
- return (++_index < _items.Length);
- }
- public K Current {
- get {
- return _items[_index];
- }
- }
- Object System.Collections.IEnumerator.Current {
- get {
- return _items[_index];
- }
- }
- void System.Collections.IEnumerator.Reset() {
- _index = -1;
- }
- }
- }
- internal static class DbConnectionStringBuilderUtil
- {
- internal static bool ConvertToBoolean(object value)
- {
- Debug.Assert(null != value, "ConvertToBoolean(null)");
- string svalue = (value as string);
- if (null != svalue)
- {
- if (StringComparer.OrdinalIgnoreCase.Equals(svalue, "true") || StringComparer.OrdinalIgnoreCase.Equals(svalue, "yes"))
- return true;
- else if (StringComparer.OrdinalIgnoreCase.Equals(svalue, "false") || StringComparer.OrdinalIgnoreCase.Equals(svalue, "no"))
- return false;
- else
- {
- string tmp = svalue.Trim(); // Remove leading & trailing white space.
- if (StringComparer.OrdinalIgnoreCase.Equals(tmp, "true") || StringComparer.OrdinalIgnoreCase.Equals(tmp, "yes"))
- return true;
- else if (StringComparer.OrdinalIgnoreCase.Equals(tmp, "false") || StringComparer.OrdinalIgnoreCase.Equals(tmp, "no"))
- return false;
- }
- return Boolean.Parse(svalue);
- }
- try
- {
- return ((IConvertible)value).ToBoolean(CultureInfo.InvariantCulture);
- }
- catch (InvalidCastException e)
- {
- throw ADP.ConvertFailed(value.GetType(), typeof(Boolean), e);
- }
- }
- internal static bool ConvertToIntegratedSecurity(object value)
- {
- Debug.Assert(null != value, "ConvertToIntegratedSecurity(null)");
- string svalue = (value as string);
- if (null != svalue)
- {
- if (StringComparer.OrdinalIgnoreCase.Equals(svalue, "sspi") || StringComparer.OrdinalIgnoreCase.Equals(svalue, "true") || StringComparer.OrdinalIgnoreCase.Equals(svalue, "yes"))
- return true;
- else if (StringComparer.OrdinalIgnoreCase.Equals(svalue, "false") || StringComparer.OrdinalIgnoreCase.Equals(svalue, "no"))
- return false;
- else
- {
- string tmp = svalue.Trim(); // Remove leading & trailing white space.
- if (StringComparer.OrdinalIgnoreCase.Equals(tmp, "sspi") || StringComparer.OrdinalIgnoreCase.Equals(tmp, "true") || StringComparer.OrdinalIgnoreCase.Equals(tmp, "yes"))
- return true;
- else if (StringComparer.OrdinalIgnoreCase.Equals(tmp, "false") || StringComparer.OrdinalIgnoreCase.Equals(tmp, "no"))
- return false;
- }
- return Boolean.Parse(svalue);
- }
- try
- {
- return ((IConvertible)value).ToBoolean(CultureInfo.InvariantCulture);
- }
- catch (InvalidCastException e)
- {
- throw ADP.ConvertFailed(value.GetType(), typeof(Boolean), e);
- }
- }
- internal static int ConvertToInt32(object value)
- {
- try
- {
- return ((IConvertible)value).ToInt32(CultureInfo.InvariantCulture);
- }
- catch (InvalidCastException e)
- {
- throw ADP.ConvertFailed(value.GetType(), typeof(Int32), e);
- }
- }
- internal static string ConvertToString(object value)
- {
- try
- {
- return ((IConvertible)value).ToString(CultureInfo.InvariantCulture);
- }
- catch (InvalidCastException e)
- {
- throw ADP.ConvertFailed(value.GetType(), typeof(String), e);
- }
- }
- const string ApplicationIntentReadWriteString = "ReadWrite";
- const string ApplicationIntentReadOnlyString = "ReadOnly";
- internal static bool TryConvertToApplicationIntent(string value, out ApplicationIntent result)
- {
- Debug.Assert(Enum.GetNames(typeof(ApplicationIntent)).Length == 2, "ApplicationIntent enum has changed, update needed");
- Debug.Assert(null != value, "TryConvertToApplicationIntent(null,...)");
- if (StringComparer.OrdinalIgnoreCase.Equals(value, ApplicationIntentReadOnlyString))
- {
- result = ApplicationIntent.ReadOnly;
- return true;
- }
- else if (StringComparer.OrdinalIgnoreCase.Equals(value, ApplicationIntentReadWriteString))
- {
- result = ApplicationIntent.ReadWrite;
- return true;
- }
- else
- {
- result = DbConnectionStringDefaults.ApplicationIntent;
- return false;
- }
- }
- internal static bool IsValidApplicationIntentValue(ApplicationIntent value)
- {
- Debug.Assert(Enum.GetNames(typeof(ApplicationIntent)).Length == 2, "ApplicationIntent enum has changed, update needed");
- return value == ApplicationIntent.ReadOnly || value == ApplicationIntent.ReadWrite;
- }
- internal static string ApplicationIntentToString(ApplicationIntent value)
- {
- Debug.Assert(IsValidApplicationIntentValue(value));
- if (value == ApplicationIntent.ReadOnly)
- {
- return ApplicationIntentReadOnlyString;
- }
- else
- {
- return ApplicationIntentReadWriteString;
- }
- }
- /// <summary>
- /// This method attempts to convert the given value tp ApplicationIntent enum. The algorithm is:
- /// * if the value is from type string, it will be matched against ApplicationIntent enum names only, using ordinal, case-insensitive comparer
- /// * if the value is from type ApplicationIntent, it will be used as is
- /// * if the value is from integral type (SByte, Int16, Int32, Int64, Byte, UInt16, UInt32, or UInt64), it will be converted to enum
- /// * if the value is another enum or any other type, it will be blocked with an appropriate ArgumentException
- ///
- /// in any case above, if the conerted value is out of valid range, the method raises ArgumentOutOfRangeException.
- /// </summary>
- /// <returns>applicaiton intent value in the valid range</returns>
- internal static ApplicationIntent ConvertToApplicationIntent(string keyword, object value)
- {
- Debug.Assert(null != value, "ConvertToApplicationIntent(null)");
- string sValue = (value as string);
- ApplicationIntent result;
- if (null != sValue)
- {
- // We could use Enum.TryParse<ApplicationIntent> here, but it accepts value combinations like
- // "ReadOnly, ReadWrite" which are unwelcome here
- // Also, Enum.TryParse is 100x slower than plain StringComparer.OrdinalIgnoreCase.Equals method.
- if (TryConvertToApplicationIntent(sValue, out result))
- {
- return result;
- }
- // try again after remove leading & trailing whitespaces.
- sValue = sValue.Trim();
- if (TryConvertToApplicationIntent(sValue, out result))
- {
- return result;
- }
- // string values must be valid
- throw ADP.InvalidConnectionOptionValue(keyword);
- }
- else
- {
- // the value is not string, try other options
- ApplicationIntent eValue;
- if (value is ApplicationIntent)
- {
- // quick path for the most common case
- eValue = (ApplicationIntent)value;
- }
- else if (value.GetType().IsEnum)
- {
- // explicitly block scenarios in which user tries to use wrong enum types, like:
- // builder["ApplicationIntent"] = EnvironmentVariableTarget.Process;
- // workaround: explicitly cast non-ApplicationIntent enums to int
- throw ADP.ConvertFailed(value.GetType(), typeof(ApplicationIntent), null);
- }
- else
- {
- try
- {
- // Enum.ToObject allows only integral and enum values (enums are blocked above), rasing ArgumentException for the rest
- eValue = (ApplicationIntent)Enum.ToObject(typeof(ApplicationIntent), value);
- }
- catch (ArgumentException e)
- {
- // to be consistent with the messages we send in case of wrong type usage, replace
- // the error with our exception, and keep the original one as inner one for troubleshooting
- throw ADP.ConvertFailed(value.GetType(), typeof(ApplicationIntent), e);
- }
- }
- // ensure value is in valid range
- if (IsValidApplicationIntentValue(eValue))
- {
- return eValue;
- }
- else
- {
- throw ADP.InvalidEnumerationValue(typeof(ApplicationIntent), (int)eValue);
- }
- }
- }
- const string SqlPasswordString = "Sql Password";
- const string ActiveDirectoryPasswordString = "Active Directory Password";
- const string ActiveDirectoryIntegratedString = "Active Directory Integrated";
- internal static bool TryConvertToAuthenticationType(string value, out SqlAuthenticationMethod result)
- {
- Debug.Assert(Enum.GetNames(typeof(SqlAuthenticationMethod)).Length == 4, "SqlAuthenticationMethod enum has changed, update needed");
- bool isSuccess = false;
- if (StringComparer.InvariantCultureIgnoreCase.Equals(value, SqlPasswordString))
- {
- result = SqlAuthenticationMethod.SqlPassword;
- isSuccess = true;
- }
- else if (StringComparer.InvariantCultureIgnoreCase.Equals(value, ActiveDirectoryPasswordString))
- {
- result = SqlAuthenticationMethod.ActiveDirectoryPassword;
- isSuccess = true;
- }
- else if (StringComparer.InvariantCultureIgnoreCase.Equals(value, ActiveDirectoryIntegratedString))
- {
- result = SqlAuthenticationMethod.ActiveDirectoryIntegrated;
- isSuccess = true;
- }
- else
- {
- result = DbConnectionStringDefaults.Authentication;
- }
- return isSuccess;
- }
- /// <summary>
- /// Column Encryption Setting.
- /// </summary>
- const string ColumnEncryptionSettingEnabledString = "Enabled";
- const string ColumnEncryptionSettingDisabledString = "Disabled";
- /// <summary>
- /// Convert a string value to the corresponding SqlConnectionColumnEncryptionSetting.
- /// </summary>
- /// <param name="value"></param>
- /// <param name="result"></param>
- /// <returns></returns>
- internal static bool TryConvertToColumnEncryptionSetting(string value, out SqlConnectionColumnEncryptionSetting result) {
- bool isSuccess = false;
- if (StringComparer.InvariantCultureIgnoreCase.Equals(value, ColumnEncryptionSettingEnabledString)) {
- result = SqlConnectionColumnEncryptionSetting.Enabled;
- isSuccess = true;
- }
- else if (StringComparer.InvariantCultureIgnoreCase.Equals(value, ColumnEncryptionSettingDisabledString)) {
- result = SqlConnectionColumnEncryptionSetting.Disabled;
- isSuccess = true;
- }
- else {
- result = DbConnectionStringDefaults.ColumnEncryptionSetting;
- }
- return isSuccess;
- }
- /// <summary>
- /// Is it a valid connection level column encryption setting ?
- /// </summary>
- /// <param name="value"></param>
- /// <returns></returns>
- internal static bool IsValidColumnEncryptionSetting(SqlConnectionColumnEncryptionSetting value) {
- Debug.Assert(Enum.GetNames(typeof(SqlConnectionColumnEncryptionSetting)).Length == 2, "SqlConnectionColumnEncryptionSetting enum has changed, update needed");
- return value == SqlConnectionColumnEncryptionSetting.Enabled || value == SqlConnectionColumnEncryptionSetting.Disabled;
- }
- /// <summary>
- /// Convert connection level column encryption setting value to string.
- /// </summary>
- /// <param name="value"></param>
- /// <returns></returns>
- internal static string ColumnEncryptionSettingToString(SqlConnectionColumnEncryptionSetting value) {
- Debug.Assert(IsValidColumnEncryptionSetting(value), "value is not a valid connection level column encryption setting.");
- switch (value) {
- case SqlConnectionColumnEncryptionSetting.Enabled:
- return ColumnEncryptionSettingEnabledString;
- case SqlConnectionColumnEncryptionSetting.Disabled:
- return ColumnEncryptionSettingDisabledString;
- default:
- return null;
- }
- }
- internal static bool IsValidAuthenticationTypeValue(SqlAuthenticationMethod value) {
- Debug.Assert(Enum.GetNames(typeof(SqlAuthenticationMethod)).Length == 4, "SqlAuthenticationMethod enum has changed, update needed");
- return value == SqlAuthenticationMethod.SqlPassword
- || value == SqlAuthenticationMethod.ActiveDirectoryPassword
- || value == SqlAuthenticationMethod.ActiveDirectoryIntegrated
- || value == SqlAuthenticationMethod.NotSpecified;
- }
- internal static string AuthenticationTypeToString(SqlAuthenticationMethod value)
- {
- Debug.Assert(IsValidAuthenticationTypeValue(value));
- switch (value)
- {
- case SqlAuthenticationMethod.SqlPassword:
- return SqlPasswordString;
- case SqlAuthenticationMethod.ActiveDirectoryPassword:
- return ActiveDirectoryPasswordString;
- case SqlAuthenticationMethod.ActiveDirectoryIntegrated:
- return ActiveDirectoryIntegratedString;
- default:
- return null;
- }
- }
- internal static SqlAuthenticationMethod ConvertToAuthenticationType(string keyword, object value)
- {
- if (null == value)
- {
- return DbConnectionStringDefaults.Authentication;
- }
- string sValue = (value as string);
- SqlAuthenticationMethod result;
- if (null != sValue)
- {
- if (TryConvertToAuthenticationType(sValue, out result))
- {
- return result;
- }
- // try again after remove leading & trailing whitespaces.
- sValue = sValue.Trim();
- if (TryConvertToAuthenticationType(sValue, out result))
- {
- return result;
- }
- // string values must be valid
- throw ADP.InvalidConnectionOptionValue(keyword);
- }
- else
- {
- // the value is not string, try other options
- SqlAuthenticationMethod eValue;
- if (value is SqlAuthenticationMethod)
- {
- // quick path for the most common case
- eValue = (SqlAuthenticationMethod)value;
- }
- else if (value.GetType().IsEnum)
- {
- // explicitly block scenarios in which user tries to use wrong enum types, like:
- // builder["ApplicationIntent"] = EnvironmentVariableTarget.Process;
- // workaround: explicitly cast non-ApplicationIntent enums to int
- throw ADP.ConvertFailed(value.GetType(), typeof(SqlAuthenticationMethod), null);
- }
- else
- {
- try
- {
- // Enum.ToObject allows only integral and enum values (enums are blocked above), rasing ArgumentException for the rest
- eValue = (SqlAuthenticationMethod)Enum.ToObject(typeof(SqlAuthenticationMethod), value);
- }
- catch (ArgumentException e)
- {
- // to be consistent with the messages we send in case of wrong type usage, replace
- // the error with our exception, and keep the original one as inner one for troubleshooting
- throw ADP.ConvertFailed(value.GetType(), typeof(SqlAuthenticationMethod), e);
- }
- }
- // ensure value is in valid range
- if (IsValidAuthenticationTypeValue(eValue))
- {
- return eValue;
- }
- else
- {
- throw ADP.InvalidEnumerationValue(typeof(SqlAuthenticationMethod), (int)eValue);
- }
- }
- }
- /// <summary>
- /// Convert the provided value to a SqlConnectionColumnEncryptionSetting.
- /// </summary>
- /// <param name="keyword"></param>
- /// <param name="value"></param>
- /// <returns></returns>
- internal static SqlConnectionColumnEncryptionSetting ConvertToColumnEncryptionSetting(string keyword, object value) {
- if (null == value) {
- return DbConnectionStringDefaults.ColumnEncryptionSetting;
- }
- string sValue = (value as string);
- SqlConnectionColumnEncryptionSetting result;
- if (null != sValue) {
- if (TryConvertToColumnEncryptionSetting(sValue, out result)) {
- return result;
- }
- // try again after remove leading & trailing whitespaces.
- sValue = sValue.Trim();
- if (TryConvertToColumnEncryptionSetting(sValue, out result)) {
- return result;
- }
- // string values must be valid
- throw ADP.InvalidConnectionOptionValue(keyword);
- }
- else {
- // the value is not string, try other options
- SqlConnectionColumnEncryptionSetting eValue;
- if (value is SqlConnectionColumnEncryptionSetting) {
- // quick path for the most common case
- eValue = (SqlConnectionColumnEncryptionSetting)value;
- }
- else if (value.GetType().IsEnum) {
- // explicitly block scenarios in which user tries to use wrong enum types, like:
- // builder["SqlConnectionColumnEncryptionSetting"] = EnvironmentVariableTarget.Process;
- // workaround: explicitly cast non-SqlConnectionColumnEncryptionSetting enums to int
- throw ADP.ConvertFailed(value.GetType(), typeof(SqlConnectionColumnEncryptionSetting), null);
- }
- else {
- try {
- // Enum.ToObject allows only integral and enum values (enums are blocked above), rasing ArgumentException for the rest
- eValue = (SqlConnectionColumnEncryptionSetting)Enum.ToObject(typeof(SqlConnectionColumnEncryptionSetting), value);
- }
- catch (ArgumentException e) {
- // to be consistent with the messages we send in case of wrong type usage, replace
- // the error with our exception, and keep the original one as inner one for troubleshooting
- throw ADP.ConvertFailed(value.GetType(), typeof(SqlConnectionColumnEncryptionSetting), e);
- }
- }
- // ensure value is in valid range
- if (IsValidColumnEncryptionSetting(eValue)) {
- return eValue;
- }
- else {
- throw ADP.InvalidEnumerationValue(typeof(SqlConnectionColumnEncryptionSetting), (int)eValue);
- }
- }
- }
- }
- internal static class DbConnectionStringDefaults {
- // all
- // internal const string NamedConnection = "";
- // Odbc
- internal const string Driver = "";
- internal const string Dsn = "";
- // OleDb
- internal const bool AdoNetPooler = false;
- internal const string FileName = "";
- internal const int OleDbServices = ~(/*DBPROPVAL_OS_AGR_AFTERSESSION*/0x00000008 | /*DBPROPVAL_OS_CLIENTCURSOR*/0x00000004); // -13
- internal const string Provider = "";
- // OracleClient
- internal const bool Unicode = false;
- internal const bool OmitOracleConnectionName = false;
- // SqlClient
- internal const ApplicationIntent ApplicationIntent = System.Data.SqlClient.ApplicationIntent.ReadWrite;
- internal const string ApplicationName = ".Net SqlClient Data Provider";
- internal const bool AsynchronousProcessing = false;
- internal const string AttachDBFilename = "";
- internal const int ConnectTimeout = 15;
- internal const bool ConnectionReset = true;
- internal const bool ContextConnection = false;
- internal const string CurrentLanguage = "";
- internal const string DataSource = "";
- internal const bool Encrypt = false;
- internal const bool Enlist = true;
- internal const string FailoverPartner = "";
- internal const string InitialCatalog = "";
- internal const bool IntegratedSecurity = false;
- internal const int LoadBalanceTimeout = 0; // default of 0 means don't use
- internal const bool MultipleActiveResultSets = false;
- internal const bool MultiSubnetFailover = false;
- internal const bool TransparentNetworkIPResolution = true;
- internal const int MaxPoolSize = 100;
- internal const int MinPoolSize = 0;
- internal const string NetworkLibrary = "";
- internal const int PacketSize = 8000;
- internal const string Password = "";
- internal const bool PersistSecurityInfo = false;
- internal const bool Pooling = true;
- internal const bool TrustServerCertificate = false;
- internal const string TypeSystemVersion = "Latest";
- internal const string UserID = "";
- internal const bool UserInstance = false;
- internal const bool Replication = false;
- internal const string WorkstationID = "";
- internal const string TransactionBinding = "Implicit Unbind";
- internal const int ConnectRetryCount = 1;
- internal const int ConnectRetryInterval = 10;
- internal static readonly SqlAuthenticationMethod Authentication = SqlAuthenticationMethod.NotSpecified;
- internal static readonly SqlConnectionColumnEncryptionSetting ColumnEncryptionSetting = SqlConnectionColumnEncryptionSetting.Disabled;
- }
- internal static class DbConnectionOptionKeywords {
- // Odbc
- internal const string Driver = "driver";
- internal const string Pwd = "pwd";
- internal const string UID = "uid";
- // OleDb
- internal const string DataProvider = "data provider";
- internal const string ExtendedProperties = "extended properties";
- internal const string FileName = "file name";
- internal const string Provider = "provider";
- internal const string RemoteProvider = "remote provider";
- // common keywords (OleDb, OracleClient, SqlClient)
- internal const string Password = "password";
- internal const string UserID = "user id";
- }
- internal static class DbConnectionStringKeywords {
- // all
- // internal const string NamedConnection = "Named Connection";
- // 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";
- // SqlClient
- internal const string ApplicationIntent = "ApplicationIntent";
- internal const string ApplicationName = "Application Name";
- internal const string AsynchronousProcessing = "Asynchronous Processing";
- internal const string AttachDBFilename = "AttachDbFilename";
- internal const string ConnectTimeout = "Connect Timeout";
- internal const string ConnectionReset = "Connection Reset";
- internal const string ContextConnection = "Context Connection";
- internal const string CurrentLanguage = "Current Language";
- internal const string Encrypt = "Encrypt";
- internal const string FailoverPartner = "Failover Partner";
- internal const string InitialCatalog = "Initial Catalog";
- internal const string MultipleActiveResultSets = "MultipleActiveResultSets";
- internal const string MultiSubnetFailover = "MultiSubnetFailover";
- internal const string TransparentNetworkIPResolution = "TransparentNetworkIPResolution";
- internal const string NetworkLibrary = "Network Library";
- internal const string PacketSize = "Packet Size";
- internal const string Replication = "Replication";
- internal const string TransactionBinding = "Transaction Binding";
- internal const string TrustServerCertificate = "TrustServerCertificate";
- internal const string TypeSystemVersion = "Type System Version";
- internal const string UserInstance = "User Instance";
- internal const string WorkstationID = "Workstation ID";
- internal const string ConnectRetryCount = "ConnectRetryCount";
- internal const string ConnectRetryInterval = "ConnectRetryInterval";
- internal const string Authentication = "Authentication";
- internal const string Certificate = "Certificate";
- internal const string ColumnEncryptionSetting = "Column Encryption Setting";
-
- // common keywords (OleDb, OracleClient, SqlClient)
- internal const string DataSource = "Data Source";
- internal const string IntegratedSecurity = "Integrated Security";
- internal const string Password = "Password";
- internal const string PersistSecurityInfo = "Persist Security Info";
- internal const string UserID = "User ID";
- // managed pooling (OracleClient, SqlClient)
- internal const string Enlist = "Enlist";
- internal const string LoadBalanceTimeout = "Load Balance Timeout";
- internal const string MaxPoolSize = "Max Pool Size";
- internal const string Pooling = "Pooling";
- internal const string MinPoolSize = "Min Pool Size";
- }
- internal static class DbConnectionStringSynonyms {
- //internal const string AsynchronousProcessing = Async;
- internal const string Async = "async";
- //internal const string ApplicationName = APP;
- internal const string APP = "app";
- //internal const string AttachDBFilename = EXTENDEDPROPERTIES+","+INITIALFILENAME;
- internal const string EXTENDEDPROPERTIES = "extended properties";
- internal const string INITIALFILENAME = "initial file name";
- //internal const string ConnectTimeout = CONNECTIONTIMEOUT+","+TIMEOUT;
- internal const string CONNECTIONTIMEOUT = "connection timeout";
- internal const string TIMEOUT = "timeout";
- //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 ConnectionLifetime = "connection lifetime";
- //internal const string NetworkLibrary = NET+","+NETWORK;
- internal const string NET = "net";
- internal const string NETWORK = "network";
- internal const string WorkaroundOracleBug914652 = "Workaround Oracle Bug 914652";
- //internal const string Password = Pwd;
- internal const string Pwd = "pwd";
- //internal const string PersistSecurityInfo = PERSISTSECURITYINFO;
- internal const string PERSISTSECURITYINFO = "persistsecurityinfo";
- //internal const string UserID = UID+","+User;
- internal const string UID = "uid";
- internal const string User = "user";
- //internal const string WorkstationID = WSID;
- internal const string WSID = "wsid";
- }
- }
|