Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / fx / src / DataOracleClient / System / Data / OracleClient / OracleConnectionStringBuilder.cs / 1 / OracleConnectionStringBuilder.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// [....]
// [....]
//-----------------------------------------------------------------------------
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;
namespace System.Data.OracleClient {
[DefaultProperty("DataSource")]
[System.ComponentModel.TypeConverterAttribute(typeof(OracleConnectionStringBuilder.OracleConnectionStringBuilderConverter))]
public sealed class OracleConnectionStringBuilder : DbConnectionStringBuilder {
private enum Keywords { // specific ordering for ConnectionString output construction
// NamedConnection,
DataSource,
PersistSecurityInfo,
IntegratedSecurity,
UserID,
Password,
Enlist,
Pooling,
MinPoolSize,
MaxPoolSize,
Unicode,
LoadBalanceTimeout,
OmitOracleConnectionName,
}
private static readonly string[] _validKeywords;
private static readonly Dictionary _keywords;
// private string _namedConnection = DbConnectionStringDefaults.NamedConnection;
private string _dataSource = DbConnectionStringDefaults.DataSource;
private string _password = DbConnectionStringDefaults.Password;
private string _userID = DbConnectionStringDefaults.UserID;
private int _loadBalanceTimeout = DbConnectionStringDefaults.LoadBalanceTimeout;
private int _maxPoolSize = DbConnectionStringDefaults.MaxPoolSize;
private int _minPoolSize = DbConnectionStringDefaults.MinPoolSize;
private bool _enlist = DbConnectionStringDefaults.Enlist;
private bool _integratedSecurity = DbConnectionStringDefaults.IntegratedSecurity;
private bool _persistSecurityInfo = DbConnectionStringDefaults.PersistSecurityInfo;
private bool _pooling = DbConnectionStringDefaults.Pooling;
private bool _unicode = DbConnectionStringDefaults.Unicode;
private bool _omitOracleConnectionName = DbConnectionStringDefaults.OmitOracleConnectionName;
static OracleConnectionStringBuilder() {
string[] validKeywords = new string[12];
validKeywords[(int)Keywords.DataSource] = DbConnectionStringKeywords.DataSource;
validKeywords[(int)Keywords.Enlist] = DbConnectionStringKeywords.Enlist;
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.NamedConnection] = DbConnectionStringKeywords.NamedConnection;
validKeywords[(int)Keywords.Password] = DbConnectionStringKeywords.Password;
validKeywords[(int)Keywords.PersistSecurityInfo] = DbConnectionStringKeywords.PersistSecurityInfo;
validKeywords[(int)Keywords.Pooling] = DbConnectionStringKeywords.Pooling;
validKeywords[(int)Keywords.Unicode] = DbConnectionStringKeywords.Unicode;
validKeywords[(int)Keywords.UserID] = DbConnectionStringKeywords.UserID;
validKeywords[(int)Keywords.OmitOracleConnectionName] = DbConnectionStringKeywords.OmitOracleConnectionName;
_validKeywords = validKeywords;
Dictionary hash = new Dictionary(19, StringComparer.OrdinalIgnoreCase);
hash.Add(DbConnectionStringKeywords.DataSource, Keywords.DataSource);
hash.Add(DbConnectionStringKeywords.Enlist, Keywords.Enlist);
hash.Add(DbConnectionStringKeywords.IntegratedSecurity, Keywords.IntegratedSecurity);
hash.Add(DbConnectionStringKeywords.LoadBalanceTimeout, Keywords.LoadBalanceTimeout);
hash.Add(DbConnectionStringKeywords.MaxPoolSize, Keywords.MaxPoolSize);
hash.Add(DbConnectionStringKeywords.MinPoolSize, Keywords.MinPoolSize);
// hash.Add(DbConnectionStringKeywords.NamedConnection, Keywords.NamedConnection);
hash.Add(DbConnectionStringKeywords.OmitOracleConnectionName, Keywords.OmitOracleConnectionName);
hash.Add(DbConnectionStringKeywords.Password, Keywords.Password);
hash.Add(DbConnectionStringKeywords.PersistSecurityInfo, Keywords.PersistSecurityInfo);
hash.Add(DbConnectionStringKeywords.Pooling, Keywords.Pooling);
hash.Add(DbConnectionStringKeywords.Unicode, Keywords.Unicode);
hash.Add(DbConnectionStringKeywords.UserID, Keywords.UserID);
hash.Add(DbConnectionStringSynonyms.SERVER, Keywords.DataSource);
hash.Add(DbConnectionStringSynonyms.ConnectionLifetime, Keywords.LoadBalanceTimeout);
hash.Add(DbConnectionStringSynonyms.Pwd, Keywords.Password);
hash.Add(DbConnectionStringSynonyms.PERSISTSECURITYINFO, Keywords.PersistSecurityInfo);
hash.Add(DbConnectionStringSynonyms.UID, Keywords.UserID);
hash.Add(DbConnectionStringSynonyms.User, Keywords.UserID);
hash.Add(DbConnectionStringSynonyms.WorkaroundOracleBug914652, Keywords.OmitOracleConnectionName);
Debug.Assert(19 == hash.Count, "initial expected size is incorrect");
_keywords = hash;
}
public OracleConnectionStringBuilder() : this((string)null) {
}
public OracleConnectionStringBuilder(string connectionString) : base() {
if (!ADP.IsEmpty(connectionString)) {
ConnectionString = connectionString;
}
}
public override object this[string keyword] {
get {
Keywords index = GetIndex(keyword);
return GetAt(index);
}
set {
Bid.Trace(" keyword='%ls'\n", keyword);
if (null != value) {
Keywords index = GetIndex(keyword);
switch(index) {
case Keywords.DataSource: DataSource = ConvertToString(value); break;
// case Keywords.NamedConnection: NamedConnection = ConvertToString(value); break;
case Keywords.Password: Password = ConvertToString(value); break;
case Keywords.UserID: UserID = ConvertToString(value); break;
case Keywords.LoadBalanceTimeout: LoadBalanceTimeout = ConvertToInt32(value); break;
case Keywords.MaxPoolSize: MaxPoolSize = ConvertToInt32(value); break;
case Keywords.MinPoolSize: MinPoolSize = ConvertToInt32(value); break;
case Keywords.IntegratedSecurity: IntegratedSecurity = ConvertToIntegratedSecurity(value); break;
case Keywords.Enlist: Enlist = ConvertToBoolean(value); break;
case Keywords.PersistSecurityInfo: PersistSecurityInfo = ConvertToBoolean(value); break;
case Keywords.Pooling: Pooling = ConvertToBoolean(value); break;
case Keywords.Unicode: Unicode = ConvertToBoolean(value); break;
case Keywords.OmitOracleConnectionName: OmitOracleConnectionName = ConvertToBoolean(value); break;
default:
Debug.Assert(false, "unexpected keyword");
throw ADP.KeywordNotSupported(keyword);
}
}
else {
Remove(keyword);
}
}
}
[DisplayName(DbConnectionStringKeywords.DataSource)]
[ResCategoryAttribute(Res.DataCategory_Source)]
[ResDescriptionAttribute(Res.DbConnectionString_DataSource)]
[RefreshPropertiesAttribute(RefreshProperties.All)]
public string DataSource {
get { return _dataSource; }
set {
if ((null != value) && (128 < value.Length)) {
throw ADP.InvalidConnectionOptionLength(DbConnectionStringKeywords.DataSource, 128);
}
SetValue(DbConnectionStringKeywords.DataSource, value);
_dataSource = 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.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.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.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.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.OmitOracleConnectionName)]
[ResCategoryAttribute(Res.DataCategory_Initialization)]
[ResDescriptionAttribute(Res.DbConnectionString_OmitOracleConnectionName)]
[RefreshPropertiesAttribute(RefreshProperties.All)]
public bool OmitOracleConnectionName {
get { return _omitOracleConnectionName; }
set {
SetValue(DbConnectionStringKeywords.OmitOracleConnectionName, value);
_omitOracleConnectionName = value;
}
}
[DisplayName(DbConnectionStringKeywords.Password)]
[PasswordPropertyTextAttribute(true)]
[ResCategoryAttribute(Res.DataCategory_Security)]
[ResDescriptionAttribute(Res.DbConnectionString_Password)]
[RefreshPropertiesAttribute(RefreshProperties.All)]
public string Password {
get { return _password; }
set {
if ((null != value) && (30 < value.Length)) {
throw ADP.InvalidConnectionOptionLength(DbConnectionStringKeywords.Password, 30);
}
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.Unicode)]
[ResCategoryAttribute(Res.DataCategory_Initialization)]
[ResDescriptionAttribute(Res.DbConnectionString_Unicode)]
[RefreshPropertiesAttribute(RefreshProperties.All)]
public bool Unicode {
get { return _unicode; }
set {
SetValue(DbConnectionStringKeywords.Unicode, value);
_unicode = value;
}
}
[DisplayName(DbConnectionStringKeywords.UserID)]
[ResCategoryAttribute(Res.DataCategory_Security)]
[ResDescriptionAttribute(Res.DbConnectionString_UserID)]
[RefreshPropertiesAttribute(RefreshProperties.All)]
public string UserID {
get { return _userID; }
set {
if ((null != value) && (30 < value.Length)) {
throw ADP.InvalidConnectionOptionLength(DbConnectionStringKeywords.UserID, 30);
}
SetValue(DbConnectionStringKeywords.UserID, value);
_userID = value;
}
}
public override bool IsFixedSize {
get {
return true;
}
}
public override ICollection Keys {
get {
return new System.Data.Common.ReadOnlyCollection(_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 < _validKeywords.Length; ++i) {
values[i] = GetAt((Keywords)i);
}
return new System.Data.Common.ReadOnlyCollection