1407 lines
70 KiB
C#
1407 lines
70 KiB
C#
|
//------------------------------------------------------------------------------
|
||
|
// <copyright file="SqlConnectionStringBuilder.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.Diagnostics.CodeAnalysis;
|
||
|
|
||
|
namespace System.Data.SqlClient {
|
||
|
|
||
|
[DefaultProperty("DataSource")]
|
||
|
[System.ComponentModel.TypeConverterAttribute(typeof(SqlConnectionStringBuilder.SqlConnectionStringBuilderConverter))]
|
||
|
public sealed class SqlConnectionStringBuilder : DbConnectionStringBuilder {
|
||
|
|
||
|
private enum Keywords { // specific ordering for ConnectionString output construction
|
||
|
// NamedConnection,
|
||
|
|
||
|
DataSource,
|
||
|
FailoverPartner,
|
||
|
AttachDBFilename,
|
||
|
InitialCatalog,
|
||
|
IntegratedSecurity,
|
||
|
PersistSecurityInfo,
|
||
|
UserID,
|
||
|
Password,
|
||
|
|
||
|
Enlist,
|
||
|
Pooling,
|
||
|
MinPoolSize,
|
||
|
MaxPoolSize,
|
||
|
|
||
|
AsynchronousProcessing,
|
||
|
ConnectionReset,
|
||
|
MultipleActiveResultSets,
|
||
|
Replication,
|
||
|
|
||
|
ConnectTimeout,
|
||
|
Encrypt,
|
||
|
TrustServerCertificate,
|
||
|
LoadBalanceTimeout,
|
||
|
NetworkLibrary,
|
||
|
PacketSize,
|
||
|
TypeSystemVersion,
|
||
|
|
||
|
Authentication,
|
||
|
|
||
|
ApplicationName,
|
||
|
CurrentLanguage,
|
||
|
WorkstationID,
|
||
|
|
||
|
UserInstance,
|
||
|
|
||
|
ContextConnection,
|
||
|
|
||
|
TransactionBinding,
|
||
|
|
||
|
ApplicationIntent,
|
||
|
|
||
|
MultiSubnetFailover,
|
||
|
|
||
|
TransparentNetworkIPResolution,
|
||
|
|
||
|
ConnectRetryCount,
|
||
|
|
||
|
ConnectRetryInterval,
|
||
|
|
||
|
ColumnEncryptionSetting,
|
||
|
|
||
|
// keep the count value last
|
||
|
KeywordsCount
|
||
|
}
|
||
|
|
||
|
internal const int KeywordsCount = (int)Keywords.KeywordsCount;
|
||
|
|
||
|
private static readonly string[] _validKeywords;
|
||
|
private static readonly Dictionary<string,Keywords> _keywords;
|
||
|
|
||
|
private ApplicationIntent _applicationIntent = DbConnectionStringDefaults.ApplicationIntent;
|
||
|
private string _applicationName = DbConnectionStringDefaults.ApplicationName;
|
||
|
private string _attachDBFilename = DbConnectionStringDefaults.AttachDBFilename;
|
||
|
private string _currentLanguage = DbConnectionStringDefaults.CurrentLanguage;
|
||
|
private string _dataSource = DbConnectionStringDefaults.DataSource;
|
||
|
private string _failoverPartner = DbConnectionStringDefaults.FailoverPartner;
|
||
|
private string _initialCatalog = DbConnectionStringDefaults.InitialCatalog;
|
||
|
// private string _namedConnection = DbConnectionStringDefaults.NamedConnection;
|
||
|
private string _networkLibrary = DbConnectionStringDefaults.NetworkLibrary;
|
||
|
private string _password = DbConnectionStringDefaults.Password;
|
||
|
private string _transactionBinding = DbConnectionStringDefaults.TransactionBinding;
|
||
|
private string _typeSystemVersion = DbConnectionStringDefaults.TypeSystemVersion;
|
||
|
private string _userID = DbConnectionStringDefaults.UserID;
|
||
|
private string _workstationID = DbConnectionStringDefaults.WorkstationID;
|
||
|
|
||
|
private int _connectTimeout = DbConnectionStringDefaults.ConnectTimeout;
|
||
|
private int _loadBalanceTimeout = DbConnectionStringDefaults.LoadBalanceTimeout;
|
||
|
private int _maxPoolSize = DbConnectionStringDefaults.MaxPoolSize;
|
||
|
private int _minPoolSize = DbConnectionStringDefaults.MinPoolSize;
|
||
|
private int _packetSize = DbConnectionStringDefaults.PacketSize;
|
||
|
private int _connectRetryCount = DbConnectionStringDefaults.ConnectRetryCount;
|
||
|
private int _connectRetryInterval = DbConnectionStringDefaults.ConnectRetryInterval;
|
||
|
|
||
|
private bool _asynchronousProcessing = DbConnectionStringDefaults.AsynchronousProcessing;
|
||
|
private bool _connectionReset = DbConnectionStringDefaults.ConnectionReset;
|
||
|
private bool _contextConnection = DbConnectionStringDefaults.ContextConnection;
|
||
|
private bool _encrypt = DbConnectionStringDefaults.Encrypt;
|
||
|
private bool _trustServerCertificate = DbConnectionStringDefaults.TrustServerCertificate;
|
||
|
private bool _enlist = DbConnectionStringDefaults.Enlist;
|
||
|
private bool _integratedSecurity = DbConnectionStringDefaults.IntegratedSecurity;
|
||
|
private bool _multipleActiveResultSets = DbConnectionStringDefaults.MultipleActiveResultSets;
|
||
|
private bool _multiSubnetFailover = DbConnectionStringDefaults.MultiSubnetFailover;
|
||
|
private bool _transparentNetworkIPResolution= DbConnectionStringDefaults.TransparentNetworkIPResolution;
|
||
|
private bool _persistSecurityInfo = DbConnectionStringDefaults.PersistSecurityInfo;
|
||
|
private bool _pooling = DbConnectionStringDefaults.Pooling;
|
||
|
private bool _replication = DbConnectionStringDefaults.Replication;
|
||
|
private bool _userInstance = DbConnectionStringDefaults.UserInstance;
|
||
|
private SqlAuthenticationMethod _authentication = DbConnectionStringDefaults.Authentication;
|
||
|
private SqlConnectionColumnEncryptionSetting _columnEncryptionSetting = DbConnectionStringDefaults.ColumnEncryptionSetting;
|
||
|
|
||
|
static SqlConnectionStringBuilder() {
|
||
|
string[] validKeywords = new string[KeywordsCount];
|
||
|
validKeywords[(int)Keywords.ApplicationIntent] = DbConnectionStringKeywords.ApplicationIntent;
|
||
|
validKeywords[(int)Keywords.ApplicationName] = DbConnectionStringKeywords.ApplicationName;
|
||
|
validKeywords[(int)Keywords.AsynchronousProcessing] = DbConnectionStringKeywords.AsynchronousProcessing;
|
||
|
validKeywords[(int)Keywords.AttachDBFilename] = DbConnectionStringKeywords.AttachDBFilename;
|
||
|
validKeywords[(int)Keywords.ConnectionReset] = DbConnectionStringKeywords.ConnectionReset;
|
||
|
validKeywords[(int)Keywords.ContextConnection] = DbConnectionStringKeywords.ContextConnection;
|
||
|
validKeywords[(int)Keywords.ConnectTimeout] = DbConnectionStringKeywords.ConnectTimeout;
|
||
|
validKeywords[(int)Keywords.CurrentLanguage] = DbConnectionStringKeywords.CurrentLanguage;
|
||
|
validKeywords[(int)Keywords.DataSource] = DbConnectionStringKeywords.DataSource;
|
||
|
validKeywords[(int)Keywords.Encrypt] = DbConnectionStringKeywords.Encrypt;
|
||
|
validKeywords[(int)Keywords.Enlist] = DbConnectionStringKeywords.Enlist;
|
||
|
validKeywords[(int)Keywords.FailoverPartner] = DbConnectionStringKeywords.FailoverPartner;
|
||
|
validKeywords[(int)Keywords.InitialCatalog] = DbConnectionStringKeywords.InitialCatalog;
|
||
|
validKeywords[(int)Keywords.IntegratedSecurity] = DbConnectionStringKeywords.IntegratedSecurity;
|
||
|
validKeywords[(int)Keywords.LoadBalanceTimeout] = DbConnectionStringKeywords.LoadBalanceTimeout;
|
||
|
validKeywords[(int)Keywords.MaxPoolSize] = DbConnectionStringKeywords.MaxPoolSize;
|
||
|
validKeywords[(int)Keywords.MinPoolSize] = DbConnectionStringKeywords.MinPoolSize;
|
||
|
validKeywords[(int)Keywords.MultipleActiveResultSets] = DbConnectionStringKeywords.MultipleActiveResultSets;
|
||
|
validKeywords[(int)Keywords.MultiSubnetFailover] = DbConnectionStringKeywords.MultiSubnetFailover;
|
||
|
validKeywords[(int)Keywords.TransparentNetworkIPResolution] = DbConnectionStringKeywords.TransparentNetworkIPResolution;
|
||
|
// validKeywords[(int)Keywords.NamedConnection] = DbConnectionStringKeywords.NamedConnection;
|
||
|
validKeywords[(int)Keywords.NetworkLibrary] = DbConnectionStringKeywords.NetworkLibrary;
|
||
|
validKeywords[(int)Keywords.PacketSize] = DbConnectionStringKeywords.PacketSize;
|
||
|
validKeywords[(int)Keywords.Password] = DbConnectionStringKeywords.Password;
|
||
|
validKeywords[(int)Keywords.PersistSecurityInfo] = DbConnectionStringKeywords.PersistSecurityInfo;
|
||
|
validKeywords[(int)Keywords.Pooling] = DbConnectionStringKeywords.Pooling;
|
||
|
validKeywords[(int)Keywords.Replication] = DbConnectionStringKeywords.Replication;
|
||
|
validKeywords[(int)Keywords.TransactionBinding] = DbConnectionStringKeywords.TransactionBinding;
|
||
|
validKeywords[(int)Keywords.TrustServerCertificate] = DbConnectionStringKeywords.TrustServerCertificate;
|
||
|
validKeywords[(int)Keywords.TypeSystemVersion] = DbConnectionStringKeywords.TypeSystemVersion;
|
||
|
validKeywords[(int)Keywords.UserID] = DbConnectionStringKeywords.UserID;
|
||
|
validKeywords[(int)Keywords.UserInstance] = DbConnectionStringKeywords.UserInstance;
|
||
|
validKeywords[(int)Keywords.WorkstationID] = DbConnectionStringKeywords.WorkstationID;
|
||
|
validKeywords[(int)Keywords.ConnectRetryCount] = DbConnectionStringKeywords.ConnectRetryCount;
|
||
|
validKeywords[(int)Keywords.ConnectRetryInterval] = DbConnectionStringKeywords.ConnectRetryInterval;
|
||
|
validKeywords[(int)Keywords.Authentication] = DbConnectionStringKeywords.Authentication;
|
||
|
validKeywords[(int)Keywords.ColumnEncryptionSetting] = DbConnectionStringKeywords.ColumnEncryptionSetting;
|
||
|
_validKeywords = validKeywords;
|
||
|
|
||
|
Dictionary<string, Keywords> hash = new Dictionary<string, Keywords>(KeywordsCount + SqlConnectionString.SynonymCount, StringComparer.OrdinalIgnoreCase);
|
||
|
hash.Add(DbConnectionStringKeywords.ApplicationIntent, Keywords.ApplicationIntent);
|
||
|
hash.Add(DbConnectionStringKeywords.ApplicationName, Keywords.ApplicationName);
|
||
|
hash.Add(DbConnectionStringKeywords.AsynchronousProcessing, Keywords.AsynchronousProcessing);
|
||
|
hash.Add(DbConnectionStringKeywords.AttachDBFilename, Keywords.AttachDBFilename);
|
||
|
hash.Add(DbConnectionStringKeywords.ConnectTimeout, Keywords.ConnectTimeout);
|
||
|
hash.Add(DbConnectionStringKeywords.ConnectionReset, Keywords.ConnectionReset);
|
||
|
hash.Add(DbConnectionStringKeywords.ContextConnection, Keywords.ContextConnection);
|
||
|
hash.Add(DbConnectionStringKeywords.CurrentLanguage, Keywords.CurrentLanguage);
|
||
|
hash.Add(DbConnectionStringKeywords.DataSource, Keywords.DataSource);
|
||
|
hash.Add(DbConnectionStringKeywords.Encrypt, Keywords.Encrypt);
|
||
|
hash.Add(DbConnectionStringKeywords.Enlist, Keywords.Enlist);
|
||
|
hash.Add(DbConnectionStringKeywords.FailoverPartner, Keywords.FailoverPartner);
|
||
|
hash.Add(DbConnectionStringKeywords.InitialCatalog, Keywords.InitialCatalog);
|
||
|
hash.Add(DbConnectionStringKeywords.IntegratedSecurity, Keywords.IntegratedSecurity);
|
||
|
hash.Add(DbConnectionStringKeywords.LoadBalanceTimeout, Keywords.LoadBalanceTimeout);
|
||
|
hash.Add(DbConnectionStringKeywords.MultipleActiveResultSets, Keywords.MultipleActiveResultSets);
|
||
|
hash.Add(DbConnectionStringKeywords.MaxPoolSize, Keywords.MaxPoolSize);
|
||
|
hash.Add(DbConnectionStringKeywords.MinPoolSize, Keywords.MinPoolSize);
|
||
|
hash.Add(DbConnectionStringKeywords.MultiSubnetFailover, Keywords.MultiSubnetFailover);
|
||
|
hash.Add(DbConnectionStringKeywords.TransparentNetworkIPResolution, Keywords.TransparentNetworkIPResolution);
|
||
|
// hash.Add(DbConnectionStringKeywords.NamedConnection, Keywords.NamedConnection);
|
||
|
hash.Add(DbConnectionStringKeywords.NetworkLibrary, Keywords.NetworkLibrary);
|
||
|
hash.Add(DbConnectionStringKeywords.PacketSize, Keywords.PacketSize);
|
||
|
hash.Add(DbConnectionStringKeywords.Password, Keywords.Password);
|
||
|
hash.Add(DbConnectionStringKeywords.PersistSecurityInfo, Keywords.PersistSecurityInfo);
|
||
|
hash.Add(DbConnectionStringKeywords.Pooling, Keywords.Pooling);
|
||
|
hash.Add(DbConnectionStringKeywords.Replication, Keywords.Replication);
|
||
|
hash.Add(DbConnectionStringKeywords.TransactionBinding, Keywords.TransactionBinding);
|
||
|
hash.Add(DbConnectionStringKeywords.TrustServerCertificate, Keywords.TrustServerCertificate);
|
||
|
hash.Add(DbConnectionStringKeywords.TypeSystemVersion, Keywords.TypeSystemVersion);
|
||
|
hash.Add(DbConnectionStringKeywords.UserID, Keywords.UserID);
|
||
|
hash.Add(DbConnectionStringKeywords.UserInstance, Keywords.UserInstance);
|
||
|
hash.Add(DbConnectionStringKeywords.WorkstationID, Keywords.WorkstationID);
|
||
|
hash.Add(DbConnectionStringKeywords.ConnectRetryCount, Keywords.ConnectRetryCount);
|
||
|
hash.Add(DbConnectionStringKeywords.ConnectRetryInterval, Keywords.ConnectRetryInterval);
|
||
|
hash.Add(DbConnectionStringKeywords.Authentication, Keywords.Authentication);
|
||
|
hash.Add(DbConnectionStringKeywords.ColumnEncryptionSetting, Keywords.ColumnEncryptionSetting);
|
||
|
|
||
|
hash.Add(DbConnectionStringSynonyms.APP, Keywords.ApplicationName);
|
||
|
hash.Add(DbConnectionStringSynonyms.Async, Keywords.AsynchronousProcessing);
|
||
|
hash.Add(DbConnectionStringSynonyms.EXTENDEDPROPERTIES, Keywords.AttachDBFilename);
|
||
|
hash.Add(DbConnectionStringSynonyms.INITIALFILENAME, Keywords.AttachDBFilename);
|
||
|
hash.Add(DbConnectionStringSynonyms.CONNECTIONTIMEOUT, Keywords.ConnectTimeout);
|
||
|
hash.Add(DbConnectionStringSynonyms.TIMEOUT, Keywords.ConnectTimeout);
|
||
|
hash.Add(DbConnectionStringSynonyms.LANGUAGE, Keywords.CurrentLanguage);
|
||
|
hash.Add(DbConnectionStringSynonyms.ADDR, Keywords.DataSource);
|
||
|
hash.Add(DbConnectionStringSynonyms.ADDRESS, Keywords.DataSource);
|
||
|
hash.Add(DbConnectionStringSynonyms.NETWORKADDRESS, Keywords.DataSource);
|
||
|
hash.Add(DbConnectionStringSynonyms.SERVER, Keywords.DataSource);
|
||
|
hash.Add(DbConnectionStringSynonyms.DATABASE, Keywords.InitialCatalog);
|
||
|
hash.Add(DbConnectionStringSynonyms.TRUSTEDCONNECTION, Keywords.IntegratedSecurity);
|
||
|
hash.Add(DbConnectionStringSynonyms.ConnectionLifetime, Keywords.LoadBalanceTimeout);
|
||
|
hash.Add(DbConnectionStringSynonyms.NET, Keywords.NetworkLibrary);
|
||
|
hash.Add(DbConnectionStringSynonyms.NETWORK, Keywords.NetworkLibrary);
|
||
|
hash.Add(DbConnectionStringSynonyms.Pwd, Keywords.Password);
|
||
|
hash.Add(DbConnectionStringSynonyms.PERSISTSECURITYINFO, Keywords.PersistSecurityInfo);
|
||
|
hash.Add(DbConnectionStringSynonyms.UID, Keywords.UserID);
|
||
|
hash.Add(DbConnectionStringSynonyms.User, Keywords.UserID);
|
||
|
hash.Add(DbConnectionStringSynonyms.WSID, Keywords.WorkstationID);
|
||
|
Debug.Assert((KeywordsCount + SqlConnectionString.SynonymCount) == hash.Count, "initial expected size is incorrect");
|
||
|
_keywords = hash;
|
||
|
|
||
|
}
|
||
|
|
||
|
public SqlConnectionStringBuilder() : this((string)null) {
|
||
|
}
|
||
|
|
||
|
public SqlConnectionStringBuilder(string connectionString) : base() {
|
||
|
if (!ADP.IsEmpty(connectionString)) {
|
||
|
ConnectionString = connectionString;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public override object this[string keyword] {
|
||
|
get {
|
||
|
Keywords index = GetIndex(keyword);
|
||
|
return GetAt(index);
|
||
|
}
|
||
|
set {
|
||
|
if (null != value) {
|
||
|
Keywords index = GetIndex(keyword);
|
||
|
switch(index) {
|
||
|
case Keywords.ApplicationIntent: this.ApplicationIntent = ConvertToApplicationIntent(keyword, value); break;
|
||
|
case Keywords.ApplicationName: ApplicationName = ConvertToString(value); break;
|
||
|
case Keywords.AttachDBFilename: AttachDBFilename = ConvertToString(value); break;
|
||
|
case Keywords.CurrentLanguage: CurrentLanguage = ConvertToString(value); break;
|
||
|
case Keywords.DataSource: DataSource = ConvertToString(value); break;
|
||
|
case Keywords.FailoverPartner: FailoverPartner = ConvertToString(value); break;
|
||
|
case Keywords.InitialCatalog: InitialCatalog = ConvertToString(value); break;
|
||
|
// case Keywords.NamedConnection: NamedConnection = ConvertToString(value); break;
|
||
|
case Keywords.NetworkLibrary: NetworkLibrary = ConvertToString(value); break;
|
||
|
case Keywords.Password: Password = ConvertToString(value); break;
|
||
|
case Keywords.UserID: UserID = ConvertToString(value); break;
|
||
|
case Keywords.TransactionBinding: TransactionBinding = ConvertToString(value); break;
|
||
|
case Keywords.TypeSystemVersion: TypeSystemVersion = ConvertToString(value); break;
|
||
|
case Keywords.WorkstationID: WorkstationID = ConvertToString(value); break;
|
||
|
|
||
|
case Keywords.ConnectTimeout: ConnectTimeout = ConvertToInt32(value); break;
|
||
|
case Keywords.LoadBalanceTimeout: LoadBalanceTimeout = ConvertToInt32(value); break;
|
||
|
case Keywords.MaxPoolSize: MaxPoolSize = ConvertToInt32(value); break;
|
||
|
case Keywords.MinPoolSize: MinPoolSize = ConvertToInt32(value); break;
|
||
|
case Keywords.PacketSize: PacketSize = ConvertToInt32(value); break;
|
||
|
|
||
|
case Keywords.IntegratedSecurity: IntegratedSecurity = ConvertToIntegratedSecurity(value); break;
|
||
|
|
||
|
case Keywords.Authentication: Authentication = ConvertToAuthenticationType(keyword, value); break;
|
||
|
case Keywords.ColumnEncryptionSetting: ColumnEncryptionSetting = ConvertToColumnEncryptionSetting(keyword, value); break;
|
||
|
case Keywords.AsynchronousProcessing: AsynchronousProcessing = ConvertToBoolean(value); break;
|
||
|
#pragma warning disable 618 // Obsolete ConnectionReset
|
||
|
case Keywords.ConnectionReset: ConnectionReset = ConvertToBoolean(value); break;
|
||
|
#pragma warning restore 618
|
||
|
case Keywords.ContextConnection: ContextConnection = ConvertToBoolean(value); break;
|
||
|
case Keywords.Encrypt: Encrypt = ConvertToBoolean(value); break;
|
||
|
case Keywords.TrustServerCertificate: TrustServerCertificate = ConvertToBoolean(value); break;
|
||
|
case Keywords.Enlist: Enlist = ConvertToBoolean(value); break;
|
||
|
case Keywords.MultipleActiveResultSets: MultipleActiveResultSets = ConvertToBoolean(value); break;
|
||
|
case Keywords.MultiSubnetFailover: MultiSubnetFailover = ConvertToBoolean(value); break;
|
||
|
case Keywords.TransparentNetworkIPResolution: TransparentNetworkIPResolution = ConvertToBoolean(value); break;
|
||
|
case Keywords.PersistSecurityInfo: PersistSecurityInfo = ConvertToBoolean(value); break;
|
||
|
case Keywords.Pooling: Pooling = ConvertToBoolean(value); break;
|
||
|
case Keywords.Replication: Replication = ConvertToBoolean(value); break;
|
||
|
case Keywords.UserInstance: UserInstance = ConvertToBoolean(value); break;
|
||
|
case Keywords.ConnectRetryCount: ConnectRetryCount = ConvertToInt32(value); break;
|
||
|
case Keywords.ConnectRetryInterval: ConnectRetryInterval = ConvertToInt32(value); break;
|
||
|
|
||
|
default:
|
||
|
Debug.Assert(false, "unexpected keyword");
|
||
|
throw ADP.KeywordNotSupported(keyword);
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
Remove(keyword);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[DisplayName(DbConnectionStringKeywords.ApplicationIntent)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_Initialization)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_ApplicationIntent)]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
public ApplicationIntent ApplicationIntent {
|
||
|
get { return _applicationIntent; }
|
||
|
set {
|
||
|
if (!DbConnectionStringBuilderUtil.IsValidApplicationIntentValue(value)) {
|
||
|
throw ADP.InvalidEnumerationValue(typeof(ApplicationIntent), (int)value);
|
||
|
}
|
||
|
|
||
|
SetApplicationIntentValue(value);
|
||
|
_applicationIntent = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[DisplayName(DbConnectionStringKeywords.ApplicationName)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_Context)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_ApplicationName)]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
public string ApplicationName {
|
||
|
get { return _applicationName; }
|
||
|
set {
|
||
|
SetValue(DbConnectionStringKeywords.ApplicationName, value);
|
||
|
_applicationName = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[DisplayName(DbConnectionStringKeywords.AsynchronousProcessing)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_Initialization)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_AsynchronousProcessing)]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
public bool AsynchronousProcessing {
|
||
|
get { return _asynchronousProcessing; }
|
||
|
set {
|
||
|
SetValue(DbConnectionStringKeywords.AsynchronousProcessing, value);
|
||
|
_asynchronousProcessing = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[DisplayName(DbConnectionStringKeywords.AttachDBFilename)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_Source)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_AttachDBFilename)]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
//
|
||
|
[Editor("System.Windows.Forms.Design.FileNameEditor, " + AssemblyRef.SystemDesign, "System.Drawing.Design.UITypeEditor, " + AssemblyRef.SystemDrawing)]
|
||
|
public string AttachDBFilename {
|
||
|
get { return _attachDBFilename; }
|
||
|
set {
|
||
|
SetValue(DbConnectionStringKeywords.AttachDBFilename, value);
|
||
|
_attachDBFilename = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[Browsable(false)]
|
||
|
[DisplayName(DbConnectionStringKeywords.ConnectionReset)]
|
||
|
[Obsolete("ConnectionReset has been deprecated. SqlConnection will ignore the 'connection reset' keyword and always reset the connection")] // SQLPT 41700
|
||
|
[ResCategoryAttribute(Res.DataCategory_Pooling)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_ConnectionReset)]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
public bool ConnectionReset {
|
||
|
get { return _connectionReset; }
|
||
|
set {
|
||
|
SetValue(DbConnectionStringKeywords.ConnectionReset, value);
|
||
|
_connectionReset = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[DisplayName(DbConnectionStringKeywords.ContextConnection)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_Source)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_ContextConnection)]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
public bool ContextConnection {
|
||
|
get { return _contextConnection; }
|
||
|
set {
|
||
|
SetValue(DbConnectionStringKeywords.ContextConnection, value);
|
||
|
_contextConnection = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[DisplayName(DbConnectionStringKeywords.ConnectTimeout)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_Initialization)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_ConnectTimeout)]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
public int ConnectTimeout {
|
||
|
get { return _connectTimeout; }
|
||
|
set {
|
||
|
if (value < 0) {
|
||
|
throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.ConnectTimeout);
|
||
|
}
|
||
|
SetValue(DbConnectionStringKeywords.ConnectTimeout, value);
|
||
|
_connectTimeout = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[DisplayName(DbConnectionStringKeywords.CurrentLanguage)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_Initialization)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_CurrentLanguage)]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
public string CurrentLanguage {
|
||
|
get { return _currentLanguage; }
|
||
|
set {
|
||
|
SetValue(DbConnectionStringKeywords.CurrentLanguage, value);
|
||
|
_currentLanguage = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[DisplayName(DbConnectionStringKeywords.DataSource)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_Source)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_DataSource)]
|
||
|
[RefreshProperties(RefreshProperties.All)]
|
||
|
[TypeConverter(typeof(SqlDataSourceConverter))]
|
||
|
public string DataSource {
|
||
|
get { return _dataSource; }
|
||
|
set {
|
||
|
SetValue(DbConnectionStringKeywords.DataSource, value);
|
||
|
_dataSource = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[DisplayName(DbConnectionStringKeywords.Encrypt)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_Security)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_Encrypt)]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
public bool Encrypt {
|
||
|
get { return _encrypt; }
|
||
|
set {
|
||
|
SetValue(DbConnectionStringKeywords.Encrypt, value);
|
||
|
_encrypt = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[DisplayName(DbConnectionStringKeywords.ColumnEncryptionSetting)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_Security)]
|
||
|
[ResDescriptionAttribute(Res.TCE_DbConnectionString_ColumnEncryptionSetting)]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
public SqlConnectionColumnEncryptionSetting ColumnEncryptionSetting {
|
||
|
get { return _columnEncryptionSetting; }
|
||
|
set {
|
||
|
if (!DbConnectionStringBuilderUtil.IsValidColumnEncryptionSetting(value)) {
|
||
|
throw ADP.InvalidEnumerationValue(typeof(SqlConnectionColumnEncryptionSetting), (int)value);
|
||
|
}
|
||
|
|
||
|
SetColumnEncryptionSettingValue(value);
|
||
|
_columnEncryptionSetting = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[DisplayName(DbConnectionStringKeywords.TrustServerCertificate)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_Security)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_TrustServerCertificate)]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
public bool TrustServerCertificate {
|
||
|
get { return _trustServerCertificate; }
|
||
|
set {
|
||
|
SetValue(DbConnectionStringKeywords.TrustServerCertificate, value);
|
||
|
_trustServerCertificate = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[DisplayName(DbConnectionStringKeywords.Enlist)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_Pooling)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_Enlist)]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
public bool Enlist {
|
||
|
get { return _enlist; }
|
||
|
set {
|
||
|
SetValue(DbConnectionStringKeywords.Enlist, value);
|
||
|
_enlist = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[DisplayName(DbConnectionStringKeywords.FailoverPartner)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_Source)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_FailoverPartner)]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
[TypeConverter(typeof(SqlDataSourceConverter))]
|
||
|
public string FailoverPartner {
|
||
|
get { return _failoverPartner; }
|
||
|
set {
|
||
|
SetValue(DbConnectionStringKeywords.FailoverPartner, value);
|
||
|
_failoverPartner= value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[DisplayName(DbConnectionStringKeywords.InitialCatalog)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_Source)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_InitialCatalog)]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
[TypeConverter(typeof(SqlInitialCatalogConverter))]
|
||
|
public string InitialCatalog {
|
||
|
get { return _initialCatalog; }
|
||
|
set {
|
||
|
SetValue(DbConnectionStringKeywords.InitialCatalog, value);
|
||
|
_initialCatalog = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[DisplayName(DbConnectionStringKeywords.IntegratedSecurity)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_Security)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_IntegratedSecurity)]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
public bool IntegratedSecurity {
|
||
|
get { return _integratedSecurity; }
|
||
|
set {
|
||
|
SetValue(DbConnectionStringKeywords.IntegratedSecurity, value);
|
||
|
_integratedSecurity = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[DisplayName(DbConnectionStringKeywords.Authentication)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_Security)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_Authentication)]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
public SqlAuthenticationMethod Authentication {
|
||
|
get { return _authentication; }
|
||
|
set {
|
||
|
if (!DbConnectionStringBuilderUtil.IsValidAuthenticationTypeValue(value)) {
|
||
|
throw ADP.InvalidEnumerationValue(typeof(SqlAuthenticationMethod), (int)value);
|
||
|
}
|
||
|
|
||
|
SetAuthenticationValue(value);
|
||
|
_authentication = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[DisplayName(DbConnectionStringKeywords.LoadBalanceTimeout)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_Pooling)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_LoadBalanceTimeout)]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
public int LoadBalanceTimeout {
|
||
|
get { return _loadBalanceTimeout; }
|
||
|
set {
|
||
|
if (value < 0) {
|
||
|
throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.LoadBalanceTimeout);
|
||
|
}
|
||
|
SetValue(DbConnectionStringKeywords.LoadBalanceTimeout, value);
|
||
|
_loadBalanceTimeout = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[DisplayName(DbConnectionStringKeywords.MaxPoolSize)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_Pooling)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_MaxPoolSize)]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
public int MaxPoolSize {
|
||
|
get { return _maxPoolSize; }
|
||
|
set {
|
||
|
if (value < 1) {
|
||
|
throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.MaxPoolSize);
|
||
|
}
|
||
|
SetValue(DbConnectionStringKeywords.MaxPoolSize, value);
|
||
|
_maxPoolSize = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[DisplayName(DbConnectionStringKeywords.ConnectRetryCount)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_ConnectionResilency)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_ConnectRetryCount)]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
public int ConnectRetryCount {
|
||
|
get { return _connectRetryCount; }
|
||
|
set {
|
||
|
if ((value < 0) || (value>255)) {
|
||
|
throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.ConnectRetryCount);
|
||
|
}
|
||
|
SetValue(DbConnectionStringKeywords.ConnectRetryCount, value);
|
||
|
_connectRetryCount = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[DisplayName(DbConnectionStringKeywords.ConnectRetryInterval)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_ConnectionResilency)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_ConnectRetryInterval)]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
public int ConnectRetryInterval {
|
||
|
get { return _connectRetryInterval; }
|
||
|
set {
|
||
|
if ((value < 1) || (value > 60)) {
|
||
|
throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.ConnectRetryInterval);
|
||
|
}
|
||
|
SetValue(DbConnectionStringKeywords.ConnectRetryInterval, value);
|
||
|
_connectRetryInterval = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
[DisplayName(DbConnectionStringKeywords.MinPoolSize)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_Pooling)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_MinPoolSize)]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
public int MinPoolSize {
|
||
|
get { return _minPoolSize; }
|
||
|
set {
|
||
|
if (value < 0) {
|
||
|
throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.MinPoolSize);
|
||
|
}
|
||
|
SetValue(DbConnectionStringKeywords.MinPoolSize, value);
|
||
|
_minPoolSize = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[DisplayName(DbConnectionStringKeywords.MultipleActiveResultSets)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_Advanced)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_MultipleActiveResultSets)]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
public bool MultipleActiveResultSets {
|
||
|
get { return _multipleActiveResultSets; }
|
||
|
set {
|
||
|
SetValue(DbConnectionStringKeywords.MultipleActiveResultSets, value);
|
||
|
_multipleActiveResultSets = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", Justification = "Reviewed and Approved by UE")]
|
||
|
[DisplayName(DbConnectionStringKeywords.MultiSubnetFailover)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_Source)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_MultiSubnetFailover)]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
public bool MultiSubnetFailover {
|
||
|
get { return _multiSubnetFailover; }
|
||
|
set {
|
||
|
SetValue(DbConnectionStringKeywords.MultiSubnetFailover, value);
|
||
|
_multiSubnetFailover = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[DisplayName(DbConnectionStringKeywords.TransparentNetworkIPResolution)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_Source)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_TransparentNetworkIPResolution)]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
public bool TransparentNetworkIPResolution
|
||
|
{
|
||
|
get { return _transparentNetworkIPResolution; }
|
||
|
set {
|
||
|
SetValue(DbConnectionStringKeywords.TransparentNetworkIPResolution, value);
|
||
|
_transparentNetworkIPResolution = value;
|
||
|
}
|
||
|
}
|
||
|
/*
|
||
|
[DisplayName(DbConnectionStringKeywords.NamedConnection)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_NamedConnectionString)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_NamedConnection)]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
[TypeConverter(typeof(NamedConnectionStringConverter))]
|
||
|
public string NamedConnection {
|
||
|
get { return _namedConnection; }
|
||
|
set {
|
||
|
SetValue(DbConnectionStringKeywords.NamedConnection, value);
|
||
|
_namedConnection = value;
|
||
|
}
|
||
|
}
|
||
|
*/
|
||
|
[DisplayName(DbConnectionStringKeywords.NetworkLibrary)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_Advanced)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_NetworkLibrary)]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
[TypeConverter(typeof(NetworkLibraryConverter))]
|
||
|
public string NetworkLibrary {
|
||
|
get { return _networkLibrary; }
|
||
|
set {
|
||
|
if (null != value) {
|
||
|
switch(value.Trim().ToLower(CultureInfo.InvariantCulture)) {
|
||
|
case SqlConnectionString.NETLIB.AppleTalk:
|
||
|
value = SqlConnectionString.NETLIB.AppleTalk;
|
||
|
break;
|
||
|
case SqlConnectionString.NETLIB.BanyanVines:
|
||
|
value = SqlConnectionString.NETLIB.BanyanVines;
|
||
|
break;
|
||
|
case SqlConnectionString.NETLIB.IPXSPX:
|
||
|
value = SqlConnectionString.NETLIB.IPXSPX;
|
||
|
break;
|
||
|
case SqlConnectionString.NETLIB.Multiprotocol:
|
||
|
value = SqlConnectionString.NETLIB.Multiprotocol;
|
||
|
break;
|
||
|
case SqlConnectionString.NETLIB.NamedPipes:
|
||
|
value = SqlConnectionString.NETLIB.NamedPipes;
|
||
|
break;
|
||
|
case SqlConnectionString.NETLIB.SharedMemory:
|
||
|
value = SqlConnectionString.NETLIB.SharedMemory;
|
||
|
break;
|
||
|
case SqlConnectionString.NETLIB.TCPIP:
|
||
|
value = SqlConnectionString.NETLIB.TCPIP;
|
||
|
break;
|
||
|
case SqlConnectionString.NETLIB.VIA:
|
||
|
value = SqlConnectionString.NETLIB.VIA;
|
||
|
break;
|
||
|
default:
|
||
|
throw ADP.InvalidConnectionOptionValue(DbConnectionStringKeywords.NetworkLibrary);
|
||
|
}
|
||
|
}
|
||
|
SetValue(DbConnectionStringKeywords.NetworkLibrary, value);
|
||
|
_networkLibrary = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[DisplayName(DbConnectionStringKeywords.PacketSize)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_Advanced)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_PacketSize)]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
public int PacketSize {
|
||
|
get { return _packetSize; }
|
||
|
set {
|
||
|
if ((value < TdsEnums.MIN_PACKET_SIZE) || (TdsEnums.MAX_PACKET_SIZE < value)) {
|
||
|
throw SQL.InvalidPacketSizeValue();
|
||
|
}
|
||
|
SetValue(DbConnectionStringKeywords.PacketSize, value);
|
||
|
_packetSize = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[DisplayName(DbConnectionStringKeywords.Password)]
|
||
|
[PasswordPropertyTextAttribute(true)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_Security)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_Password)]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
public string Password {
|
||
|
get { return _password; }
|
||
|
set {
|
||
|
SetValue(DbConnectionStringKeywords.Password, value);
|
||
|
_password = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[DisplayName(DbConnectionStringKeywords.PersistSecurityInfo)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_Security)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_PersistSecurityInfo)]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
public bool PersistSecurityInfo {
|
||
|
get { return _persistSecurityInfo; }
|
||
|
set {
|
||
|
SetValue(DbConnectionStringKeywords.PersistSecurityInfo, value);
|
||
|
_persistSecurityInfo = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[DisplayName(DbConnectionStringKeywords.Pooling)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_Pooling)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_Pooling)]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
public bool Pooling {
|
||
|
get { return _pooling; }
|
||
|
set {
|
||
|
SetValue(DbConnectionStringKeywords.Pooling, value);
|
||
|
_pooling = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[DisplayName(DbConnectionStringKeywords.Replication)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_Replication)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_Replication )]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
public bool Replication {
|
||
|
get { return _replication; }
|
||
|
set {
|
||
|
SetValue(DbConnectionStringKeywords.Replication, value);
|
||
|
_replication = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[DisplayName(DbConnectionStringKeywords.TransactionBinding)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_Advanced)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_TransactionBinding)]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
public string TransactionBinding {
|
||
|
get { return _transactionBinding; }
|
||
|
set {
|
||
|
SetValue(DbConnectionStringKeywords.TransactionBinding, value);
|
||
|
_transactionBinding = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[DisplayName(DbConnectionStringKeywords.TypeSystemVersion)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_Advanced)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_TypeSystemVersion)]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
public string TypeSystemVersion {
|
||
|
get { return _typeSystemVersion; }
|
||
|
set {
|
||
|
SetValue(DbConnectionStringKeywords.TypeSystemVersion, value);
|
||
|
_typeSystemVersion = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[DisplayName(DbConnectionStringKeywords.UserID)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_Security)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_UserID)]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
public string UserID {
|
||
|
get { return _userID; }
|
||
|
set {
|
||
|
SetValue(DbConnectionStringKeywords.UserID, value);
|
||
|
_userID = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[DisplayName(DbConnectionStringKeywords.UserInstance)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_Source)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_UserInstance)]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
public bool UserInstance {
|
||
|
get { return _userInstance; }
|
||
|
set {
|
||
|
SetValue(DbConnectionStringKeywords.UserInstance, value);
|
||
|
_userInstance = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[DisplayName(DbConnectionStringKeywords.WorkstationID)]
|
||
|
[ResCategoryAttribute(Res.DataCategory_Context)]
|
||
|
[ResDescriptionAttribute(Res.DbConnectionString_WorkstationID)]
|
||
|
[RefreshPropertiesAttribute(RefreshProperties.All)]
|
||
|
public string WorkstationID {
|
||
|
get { return _workstationID; }
|
||
|
set {
|
||
|
SetValue(DbConnectionStringKeywords.WorkstationID, value);
|
||
|
_workstationID = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public override bool IsFixedSize {
|
||
|
get {
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public override ICollection Keys {
|
||
|
get {
|
||
|
return new System.Data.Common.ReadOnlyCollection<string>(_validKeywords);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public override ICollection Values {
|
||
|
get {
|
||
|
// written this way so if the ordering of Keywords & _validKeywords changes
|
||
|
// this is one less place to maintain
|
||
|
object[] values = new object[_validKeywords.Length];
|
||
|
for(int i = 0; i < values.Length; ++i) {
|
||
|
values[i] = GetAt((Keywords)i);
|
||
|
}
|
||
|
return new System.Data.Common.ReadOnlyCollection<object>(values);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public override void Clear() {
|
||
|
base.Clear();
|
||
|
for(int i = 0; i < _validKeywords.Length; ++i) {
|
||
|
Reset((Keywords)i);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public override bool ContainsKey(string keyword) {
|
||
|
ADP.CheckArgumentNull(keyword, "keyword");
|
||
|
return _keywords.ContainsKey(keyword);
|
||
|
}
|
||
|
|
||
|
private static bool ConvertToBoolean(object value) {
|
||
|
return DbConnectionStringBuilderUtil.ConvertToBoolean(value);
|
||
|
}
|
||
|
private static int ConvertToInt32(object value) {
|
||
|
return DbConnectionStringBuilderUtil.ConvertToInt32(value);
|
||
|
}
|
||
|
private static bool ConvertToIntegratedSecurity(object value) {
|
||
|
return DbConnectionStringBuilderUtil.ConvertToIntegratedSecurity(value);
|
||
|
}
|
||
|
private static string ConvertToString(object value) {
|
||
|
return DbConnectionStringBuilderUtil.ConvertToString(value);
|
||
|
}
|
||
|
private static ApplicationIntent ConvertToApplicationIntent(string keyword, object value) {
|
||
|
return DbConnectionStringBuilderUtil.ConvertToApplicationIntent(keyword, value);
|
||
|
}
|
||
|
private static SqlAuthenticationMethod ConvertToAuthenticationType(string keyword, object value) {
|
||
|
return DbConnectionStringBuilderUtil.ConvertToAuthenticationType(keyword, value);
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Convert to SqlConnectionColumnEncryptionSetting.
|
||
|
/// </summary>
|
||
|
/// <param name="keyword"></param>
|
||
|
/// <param name="value"></param>
|
||
|
private static SqlConnectionColumnEncryptionSetting ConvertToColumnEncryptionSetting(string keyword, object value) {
|
||
|
return DbConnectionStringBuilderUtil.ConvertToColumnEncryptionSetting(keyword, value);
|
||
|
}
|
||
|
|
||
|
internal override string ConvertValueToString(object value) {
|
||
|
if (value is SqlAuthenticationMethod) {
|
||
|
return DbConnectionStringBuilderUtil.AuthenticationTypeToString((SqlAuthenticationMethod)value);
|
||
|
}
|
||
|
else {
|
||
|
return base.ConvertValueToString(value);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private object GetAt(Keywords index) {
|
||
|
switch(index) {
|
||
|
case Keywords.ApplicationIntent: return this.ApplicationIntent;
|
||
|
case Keywords.ApplicationName: return ApplicationName;
|
||
|
case Keywords.AsynchronousProcessing: return AsynchronousProcessing;
|
||
|
case Keywords.AttachDBFilename: return AttachDBFilename;
|
||
|
case Keywords.ConnectTimeout: return ConnectTimeout;
|
||
|
#pragma warning disable 618 // Obsolete ConnectionReset
|
||
|
case Keywords.ConnectionReset: return ConnectionReset;
|
||
|
#pragma warning restore 618
|
||
|
case Keywords.ContextConnection: return ContextConnection;
|
||
|
case Keywords.CurrentLanguage: return CurrentLanguage;
|
||
|
case Keywords.DataSource: return DataSource;
|
||
|
case Keywords.Encrypt: return Encrypt;
|
||
|
case Keywords.Enlist: return Enlist;
|
||
|
case Keywords.FailoverPartner: return FailoverPartner;
|
||
|
case Keywords.InitialCatalog: return InitialCatalog;
|
||
|
case Keywords.IntegratedSecurity: return IntegratedSecurity;
|
||
|
case Keywords.LoadBalanceTimeout: return LoadBalanceTimeout;
|
||
|
case Keywords.MultipleActiveResultSets: return MultipleActiveResultSets;
|
||
|
case Keywords.MaxPoolSize: return MaxPoolSize;
|
||
|
case Keywords.MinPoolSize: return MinPoolSize;
|
||
|
case Keywords.MultiSubnetFailover: return MultiSubnetFailover;
|
||
|
case Keywords.TransparentNetworkIPResolution: return TransparentNetworkIPResolution;
|
||
|
// case Keywords.NamedConnection: return NamedConnection;
|
||
|
case Keywords.NetworkLibrary: return NetworkLibrary;
|
||
|
case Keywords.PacketSize: return PacketSize;
|
||
|
case Keywords.Password: return Password;
|
||
|
case Keywords.PersistSecurityInfo: return PersistSecurityInfo;
|
||
|
case Keywords.Pooling: return Pooling;
|
||
|
case Keywords.Replication: return Replication;
|
||
|
case Keywords.TransactionBinding: return TransactionBinding;
|
||
|
case Keywords.TrustServerCertificate: return TrustServerCertificate;
|
||
|
case Keywords.TypeSystemVersion: return TypeSystemVersion;
|
||
|
case Keywords.UserID: return UserID;
|
||
|
case Keywords.UserInstance: return UserInstance;
|
||
|
case Keywords.WorkstationID: return WorkstationID;
|
||
|
case Keywords.ConnectRetryCount: return ConnectRetryCount;
|
||
|
case Keywords.ConnectRetryInterval: return ConnectRetryInterval;
|
||
|
case Keywords.Authentication: return Authentication;
|
||
|
case Keywords.ColumnEncryptionSetting: return ColumnEncryptionSetting;
|
||
|
default:
|
||
|
Debug.Assert(false, "unexpected keyword");
|
||
|
throw ADP.KeywordNotSupported(_validKeywords[(int)index]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private Keywords GetIndex(string keyword) {
|
||
|
ADP.CheckArgumentNull(keyword, "keyword");
|
||
|
Keywords index;
|
||
|
if (_keywords.TryGetValue(keyword, out index)) {
|
||
|
return index;
|
||
|
}
|
||
|
throw ADP.KeywordNotSupported(keyword);
|
||
|
}
|
||
|
|
||
|
protected override void GetProperties(Hashtable propertyDescriptors) {
|
||
|
foreach(PropertyDescriptor reflected in TypeDescriptor.GetProperties(this, true)) {
|
||
|
bool refreshOnChange = false;
|
||
|
bool isReadonly = false;
|
||
|
string displayName = reflected.DisplayName;
|
||
|
|
||
|
// 'Password' & 'User ID' will be readonly if 'Integrated Security' is true
|
||
|
if (DbConnectionStringKeywords.IntegratedSecurity == displayName) {
|
||
|
refreshOnChange = true;
|
||
|
isReadonly = reflected.IsReadOnly;
|
||
|
}
|
||
|
else if ((DbConnectionStringKeywords.Password == displayName) ||
|
||
|
(DbConnectionStringKeywords.UserID == displayName)) {
|
||
|
isReadonly = IntegratedSecurity;
|
||
|
}
|
||
|
else {
|
||
|
continue;
|
||
|
}
|
||
|
Attribute[] attributes = GetAttributesFromCollection(reflected.Attributes);
|
||
|
DbConnectionStringBuilderDescriptor descriptor = new DbConnectionStringBuilderDescriptor(reflected.Name,
|
||
|
reflected.ComponentType, reflected.PropertyType, isReadonly, attributes);
|
||
|
descriptor.RefreshOnChange = refreshOnChange;
|
||
|
propertyDescriptors[displayName] = descriptor;
|
||
|
}
|
||
|
base.GetProperties(propertyDescriptors);
|
||
|
}
|
||
|
|
||
|
public override bool Remove(string keyword) {
|
||
|
ADP.CheckArgumentNull(keyword, "keyword");
|
||
|
Keywords index;
|
||
|
if (_keywords.TryGetValue(keyword, out index)) {
|
||
|
if (base.Remove(_validKeywords[(int)index])) {
|
||
|
Reset(index);
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
private void Reset(Keywords index) {
|
||
|
switch(index) {
|
||
|
case Keywords.ApplicationIntent:
|
||
|
_applicationIntent = DbConnectionStringDefaults.ApplicationIntent;
|
||
|
break;
|
||
|
case Keywords.ApplicationName:
|
||
|
_applicationName = DbConnectionStringDefaults.ApplicationName;
|
||
|
break;
|
||
|
case Keywords.AsynchronousProcessing:
|
||
|
_asynchronousProcessing = DbConnectionStringDefaults.AsynchronousProcessing;
|
||
|
break;
|
||
|
case Keywords.AttachDBFilename:
|
||
|
_attachDBFilename = DbConnectionStringDefaults.AttachDBFilename;
|
||
|
break;
|
||
|
case Keywords.Authentication:
|
||
|
_authentication = DbConnectionStringDefaults.Authentication;
|
||
|
break;
|
||
|
case Keywords.ConnectTimeout:
|
||
|
_connectTimeout = DbConnectionStringDefaults.ConnectTimeout;
|
||
|
break;
|
||
|
case Keywords.ConnectionReset:
|
||
|
_connectionReset = DbConnectionStringDefaults.ConnectionReset;
|
||
|
break;
|
||
|
case Keywords.ContextConnection:
|
||
|
_contextConnection = DbConnectionStringDefaults.ContextConnection;
|
||
|
break;
|
||
|
case Keywords.CurrentLanguage:
|
||
|
_currentLanguage = DbConnectionStringDefaults.CurrentLanguage;
|
||
|
break;
|
||
|
case Keywords.DataSource:
|
||
|
_dataSource = DbConnectionStringDefaults.DataSource;
|
||
|
break;
|
||
|
case Keywords.Encrypt:
|
||
|
_encrypt = DbConnectionStringDefaults.Encrypt;
|
||
|
break;
|
||
|
case Keywords.Enlist:
|
||
|
_enlist = DbConnectionStringDefaults.Enlist;
|
||
|
break;
|
||
|
case Keywords.FailoverPartner:
|
||
|
_failoverPartner = DbConnectionStringDefaults.FailoverPartner;
|
||
|
break;
|
||
|
case Keywords.InitialCatalog:
|
||
|
_initialCatalog = DbConnectionStringDefaults.InitialCatalog;
|
||
|
break;
|
||
|
case Keywords.IntegratedSecurity:
|
||
|
_integratedSecurity = DbConnectionStringDefaults.IntegratedSecurity;
|
||
|
break;
|
||
|
case Keywords.LoadBalanceTimeout:
|
||
|
_loadBalanceTimeout = DbConnectionStringDefaults.LoadBalanceTimeout;
|
||
|
break;
|
||
|
case Keywords.MultipleActiveResultSets:
|
||
|
_multipleActiveResultSets = DbConnectionStringDefaults.MultipleActiveResultSets;
|
||
|
break;
|
||
|
case Keywords.MaxPoolSize:
|
||
|
_maxPoolSize = DbConnectionStringDefaults.MaxPoolSize;
|
||
|
break;
|
||
|
case Keywords.MinPoolSize:
|
||
|
_minPoolSize = DbConnectionStringDefaults.MinPoolSize;
|
||
|
break;
|
||
|
case Keywords.MultiSubnetFailover:
|
||
|
_multiSubnetFailover = DbConnectionStringDefaults.MultiSubnetFailover;
|
||
|
break;
|
||
|
case Keywords.TransparentNetworkIPResolution:
|
||
|
_transparentNetworkIPResolution = DbConnectionStringDefaults.TransparentNetworkIPResolution;
|
||
|
break;
|
||
|
// case Keywords.NamedConnection:
|
||
|
// _namedConnection = DbConnectionStringDefaults.NamedConnection;
|
||
|
// break;
|
||
|
case Keywords.NetworkLibrary:
|
||
|
_networkLibrary = DbConnectionStringDefaults.NetworkLibrary;
|
||
|
break;
|
||
|
case Keywords.PacketSize:
|
||
|
_packetSize = DbConnectionStringDefaults.PacketSize;
|
||
|
break;
|
||
|
case Keywords.Password:
|
||
|
_password = DbConnectionStringDefaults.Password;
|
||
|
break;
|
||
|
case Keywords.PersistSecurityInfo:
|
||
|
_persistSecurityInfo = DbConnectionStringDefaults.PersistSecurityInfo;
|
||
|
break;
|
||
|
case Keywords.Pooling:
|
||
|
_pooling = DbConnectionStringDefaults.Pooling;
|
||
|
break;
|
||
|
case Keywords.ConnectRetryCount:
|
||
|
_connectRetryCount = DbConnectionStringDefaults.ConnectRetryCount;
|
||
|
break;
|
||
|
case Keywords.ConnectRetryInterval:
|
||
|
_connectRetryInterval = DbConnectionStringDefaults.ConnectRetryInterval;
|
||
|
break;
|
||
|
case Keywords.Replication:
|
||
|
_replication = DbConnectionStringDefaults.Replication;
|
||
|
break;
|
||
|
case Keywords.TransactionBinding:
|
||
|
_transactionBinding = DbConnectionStringDefaults.TransactionBinding;
|
||
|
break;
|
||
|
case Keywords.TrustServerCertificate:
|
||
|
_trustServerCertificate = DbConnectionStringDefaults.TrustServerCertificate;
|
||
|
break;
|
||
|
case Keywords.TypeSystemVersion:
|
||
|
_typeSystemVersion = DbConnectionStringDefaults.TypeSystemVersion;
|
||
|
break;
|
||
|
case Keywords.UserID:
|
||
|
_userID = DbConnectionStringDefaults.UserID;
|
||
|
break;
|
||
|
case Keywords.UserInstance:
|
||
|
_userInstance = DbConnectionStringDefaults.UserInstance;
|
||
|
break;
|
||
|
case Keywords.WorkstationID:
|
||
|
_workstationID = DbConnectionStringDefaults.WorkstationID;
|
||
|
break;
|
||
|
case Keywords.ColumnEncryptionSetting:
|
||
|
_columnEncryptionSetting = DbConnectionStringDefaults.ColumnEncryptionSetting;
|
||
|
break;
|
||
|
default:
|
||
|
Debug.Assert(false, "unexpected keyword");
|
||
|
throw ADP.KeywordNotSupported(_validKeywords[(int)index]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void SetValue(string keyword, bool value) {
|
||
|
base[keyword] = value.ToString((System.IFormatProvider)null);
|
||
|
}
|
||
|
private void SetValue(string keyword, int value) {
|
||
|
base[keyword] = value.ToString((System.IFormatProvider)null);
|
||
|
}
|
||
|
private void SetValue(string keyword, string value) {
|
||
|
ADP.CheckArgumentNull(value, keyword);
|
||
|
base[keyword] = value;
|
||
|
}
|
||
|
private void SetApplicationIntentValue(ApplicationIntent value) {
|
||
|
Debug.Assert(DbConnectionStringBuilderUtil.IsValidApplicationIntentValue(value), "Invalid value for ApplicationIntent");
|
||
|
base[DbConnectionStringKeywords.ApplicationIntent] = DbConnectionStringBuilderUtil.ApplicationIntentToString(value);
|
||
|
}
|
||
|
private void SetAuthenticationValue(SqlAuthenticationMethod value) {
|
||
|
Debug.Assert(DbConnectionStringBuilderUtil.IsValidAuthenticationTypeValue(value), "Invalid value for AuthenticationType");
|
||
|
base[DbConnectionStringKeywords.Authentication] = DbConnectionStringBuilderUtil.AuthenticationTypeToString(value);
|
||
|
}
|
||
|
private void SetColumnEncryptionSettingValue(SqlConnectionColumnEncryptionSetting value) {
|
||
|
Debug.Assert(DbConnectionStringBuilderUtil.IsValidColumnEncryptionSetting(value), "Invalid value for SqlConnectionColumnEncryptionSetting");
|
||
|
base[DbConnectionStringKeywords.ColumnEncryptionSetting] = DbConnectionStringBuilderUtil.ColumnEncryptionSettingToString(value);
|
||
|
}
|
||
|
|
||
|
public override bool ShouldSerialize(string keyword) {
|
||
|
ADP.CheckArgumentNull(keyword, "keyword");
|
||
|
Keywords index;
|
||
|
return _keywords.TryGetValue(keyword, out index) && base.ShouldSerialize(_validKeywords[(int)index]);
|
||
|
}
|
||
|
|
||
|
public override bool TryGetValue(string keyword, out object value) {
|
||
|
Keywords index;
|
||
|
if (_keywords.TryGetValue(keyword, out index)) {
|
||
|
value = GetAt(index);
|
||
|
return true;
|
||
|
}
|
||
|
value = null;
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
private sealed class NetworkLibraryConverter : TypeConverter {
|
||
|
// private const string AppleTalk = "Apple Talk (DBMSADSN)"; Invalid protocals
|
||
|
// private const string BanyanVines = "Banyan VINES (DBMSVINN)";
|
||
|
// private const string IPXSPX = "NWLink IPX/SPX (DBMSSPXN)";
|
||
|
// private const string Multiprotocol = "Multiprotocol (DBMSRPCN)";
|
||
|
private const string NamedPipes = "Named Pipes (DBNMPNTW)"; // valid protocols
|
||
|
private const string SharedMemory = "Shared Memory (DBMSLPCN)";
|
||
|
private const string TCPIP = "TCP/IP (DBMSSOCN)";
|
||
|
private const string VIA = "VIA (DBMSGNET)";
|
||
|
|
||
|
// these are correctly non-static, property grid will cache an instance
|
||
|
private StandardValuesCollection _standardValues;
|
||
|
|
||
|
// converter classes should have public ctor
|
||
|
public NetworkLibraryConverter() {
|
||
|
}
|
||
|
|
||
|
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) {
|
||
|
// Only know how to convert from a string
|
||
|
return ((typeof(string) == sourceType) || base.CanConvertFrom(context, sourceType));
|
||
|
}
|
||
|
|
||
|
public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value) {
|
||
|
string svalue = (value as string);
|
||
|
if (null != svalue) {
|
||
|
svalue = svalue.Trim();
|
||
|
if (StringComparer.OrdinalIgnoreCase.Equals(svalue, NamedPipes)) {
|
||
|
return SqlConnectionString.NETLIB.NamedPipes;
|
||
|
}
|
||
|
else if (StringComparer.OrdinalIgnoreCase.Equals(svalue, SharedMemory)) {
|
||
|
return SqlConnectionString.NETLIB.SharedMemory;
|
||
|
}
|
||
|
else if (StringComparer.OrdinalIgnoreCase.Equals(svalue, TCPIP)) {
|
||
|
return SqlConnectionString.NETLIB.TCPIP;
|
||
|
}
|
||
|
else if (StringComparer.OrdinalIgnoreCase.Equals(svalue, VIA)) {
|
||
|
return SqlConnectionString.NETLIB.VIA;
|
||
|
}
|
||
|
else {
|
||
|
return svalue;
|
||
|
}
|
||
|
}
|
||
|
return base.ConvertFrom(context, culture, value);
|
||
|
}
|
||
|
|
||
|
public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) {
|
||
|
return ((typeof(string) == destinationType) || base.CanConvertTo(context, destinationType));
|
||
|
}
|
||
|
|
||
|
public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType) {
|
||
|
string svalue = (value as string);
|
||
|
if ((null != svalue) && (destinationType == typeof(string))) {
|
||
|
switch(svalue.Trim().ToLower(CultureInfo.InvariantCulture)) {
|
||
|
case SqlConnectionString.NETLIB.NamedPipes:
|
||
|
return NamedPipes;
|
||
|
case SqlConnectionString.NETLIB.SharedMemory:
|
||
|
return SharedMemory;
|
||
|
case SqlConnectionString.NETLIB.TCPIP:
|
||
|
return TCPIP;
|
||
|
case SqlConnectionString.NETLIB.VIA:
|
||
|
return VIA;
|
||
|
default:
|
||
|
return svalue;
|
||
|
}
|
||
|
}
|
||
|
return base.ConvertTo(context, culture, value, destinationType);
|
||
|
}
|
||
|
|
||
|
public override bool GetStandardValuesSupported(ITypeDescriptorContext context) {
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) {
|
||
|
|
||
|
SqlConnectionStringBuilder constr = null;
|
||
|
if (null != context) {
|
||
|
constr = (context.Instance as SqlConnectionStringBuilder);
|
||
|
}
|
||
|
|
||
|
StandardValuesCollection standardValues = _standardValues;
|
||
|
if (null == standardValues) {
|
||
|
string[] names = new string[] {
|
||
|
NamedPipes,
|
||
|
SharedMemory,
|
||
|
TCPIP,
|
||
|
VIA,
|
||
|
};
|
||
|
standardValues = new StandardValuesCollection(names);
|
||
|
_standardValues = standardValues;
|
||
|
}
|
||
|
return standardValues;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private sealed class SqlDataSourceConverter : StringConverter {
|
||
|
|
||
|
private StandardValuesCollection _standardValues;
|
||
|
|
||
|
// converter classes should have public ctor
|
||
|
public SqlDataSourceConverter() {
|
||
|
}
|
||
|
|
||
|
public override bool GetStandardValuesSupported(ITypeDescriptorContext context) {
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) {
|
||
|
StandardValuesCollection dataSourceNames = _standardValues;
|
||
|
if (null == _standardValues) {
|
||
|
// Get the sources rowset for the SQLOLEDB enumerator
|
||
|
DataTable table = SqlClientFactory.Instance.CreateDataSourceEnumerator().GetDataSources();
|
||
|
DataColumn serverName = table.Columns[System.Data.Sql.SqlDataSourceEnumerator.ServerName];
|
||
|
DataColumn instanceName = table.Columns[System.Data.Sql.SqlDataSourceEnumerator.InstanceName];
|
||
|
DataRowCollection rows = table.Rows;
|
||
|
|
||
|
string[] serverNames = new string[rows.Count];
|
||
|
for(int i = 0; i < serverNames.Length; ++i) {
|
||
|
string server = rows[i][serverName] as string;
|
||
|
string instance = rows[i][instanceName] as string;
|
||
|
if ((null == instance) || (0 == instance.Length) || ("MSSQLSERVER" == instance)) {
|
||
|
serverNames[i] = server;
|
||
|
}
|
||
|
else {
|
||
|
serverNames[i] = server + @"\" + instance;
|
||
|
}
|
||
|
}
|
||
|
Array.Sort<string>(serverNames);
|
||
|
|
||
|
// Create the standard values collection that contains the sources
|
||
|
dataSourceNames = new StandardValuesCollection(serverNames);
|
||
|
_standardValues = dataSourceNames;
|
||
|
}
|
||
|
return dataSourceNames;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private sealed class SqlInitialCatalogConverter : StringConverter {
|
||
|
|
||
|
// converter classes should have public ctor
|
||
|
public SqlInitialCatalogConverter() {
|
||
|
}
|
||
|
|
||
|
public override bool GetStandardValuesSupported(ITypeDescriptorContext context) {
|
||
|
return GetStandardValuesSupportedInternal(context);
|
||
|
}
|
||
|
|
||
|
private bool GetStandardValuesSupportedInternal(ITypeDescriptorContext context) {
|
||
|
// Only say standard values are supported if the connection string has enough
|
||
|
// information set to instantiate a connection and retrieve a list of databases
|
||
|
bool flag = false;
|
||
|
if (null != context) {
|
||
|
SqlConnectionStringBuilder constr = (context.Instance as SqlConnectionStringBuilder);
|
||
|
if (null != constr) {
|
||
|
if ((0 < constr.DataSource.Length) && (constr.IntegratedSecurity || (0 < constr.UserID.Length))) {
|
||
|
flag = true;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return flag;
|
||
|
}
|
||
|
|
||
|
public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) {
|
||
|
// Although theoretically this could be true, some people may want to just type in a name
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) {
|
||
|
// There can only be standard values if the connection string is in a state that might
|
||
|
// be able to instantiate a connection
|
||
|
if (GetStandardValuesSupportedInternal(context)) {
|
||
|
|
||
|
// Create an array list to store the database names
|
||
|
List<string> values = new List<string>();
|
||
|
|
||
|
try {
|
||
|
SqlConnectionStringBuilder constr = (SqlConnectionStringBuilder)context.Instance;
|
||
|
|
||
|
// Create a connection
|
||
|
using(SqlConnection connection = new SqlConnection()) {
|
||
|
|
||
|
// Create a basic connection string from current property values
|
||
|
connection.ConnectionString = constr.ConnectionString;
|
||
|
|
||
|
// Try to open the connection
|
||
|
connection.Open();
|
||
|
|
||
|
DataTable databaseTable = connection.GetSchema("DATABASES");
|
||
|
|
||
|
foreach (DataRow row in databaseTable.Rows) {
|
||
|
string dbName = (string)row["database_name"];
|
||
|
values.Add(dbName);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
catch(SqlException e) {
|
||
|
ADP.TraceExceptionWithoutRethrow(e);
|
||
|
// silently fail
|
||
|
}
|
||
|
|
||
|
// Return values as a StandardValuesCollection
|
||
|
return new StandardValuesCollection(values);
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
sealed internal class SqlConnectionStringBuilderConverter : ExpandableObjectConverter {
|
||
|
|
||
|
// converter classes should have public ctor
|
||
|
public SqlConnectionStringBuilderConverter() {
|
||
|
}
|
||
|
|
||
|
override public bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) {
|
||
|
if (typeof(System.ComponentModel.Design.Serialization.InstanceDescriptor) == destinationType) {
|
||
|
return true;
|
||
|
}
|
||
|
return base.CanConvertTo(context, destinationType);
|
||
|
}
|
||
|
|
||
|
override public object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) {
|
||
|
if (destinationType == null) {
|
||
|
throw ADP.ArgumentNull("destinationType");
|
||
|
}
|
||
|
if (typeof(System.ComponentModel.Design.Serialization.InstanceDescriptor) == destinationType) {
|
||
|
SqlConnectionStringBuilder obj = (value as SqlConnectionStringBuilder);
|
||
|
if (null != obj) {
|
||
|
return ConvertToInstanceDescriptor(obj);
|
||
|
}
|
||
|
}
|
||
|
return base.ConvertTo(context, culture, value, destinationType);
|
||
|
}
|
||
|
|
||
|
private System.ComponentModel.Design.Serialization.InstanceDescriptor ConvertToInstanceDescriptor(SqlConnectionStringBuilder options) {
|
||
|
Type[] ctorParams = new Type[] { typeof(string) };
|
||
|
object[] ctorValues = new object[] { options.ConnectionString };
|
||
|
System.Reflection.ConstructorInfo ctor = typeof(SqlConnectionStringBuilder).GetConstructor(ctorParams);
|
||
|
return new System.ComponentModel.Design.Serialization.InstanceDescriptor(ctor, ctorValues);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|