private void SetValue(string key, object value)
{
if (key == null)
throw new ArgumentNullException("key");
key = MappKey(key);
switch (key) {
case HostKey: {
if (value == null) {
host = DefaultHost;
base.Remove(key);
} else {
Host = value.ToString();
}
break;
}
case PortKey:
if (value == null) {
port = DefaultPort;
base.Remove(key);
} else {
Port = ToInt32(value);
}
break;
case DatabaseKey:
if (value == null) {
database = DefaultDatabase;
base.Remove(key);
} else {
Database = value.ToString();
}
break;
case SchemaKey:
if (value == null) {
schema = DefaultSchema;
base.Remove(key);
} else {
Schema = value.ToString();
}
break;
case PathKey:
if (value == null) {
path = DefaultPath;
base.Remove(key);
} else {
Path = value.ToString();
}
break;
case UserNameKey:
if (value == null) {
userName = DefaultUserName;
base.Remove(key);
} else {
UserName = value.ToString();
}
break;
case PasswordKey:
if (value == null) {
password = DefaultPassword;
base.Remove(key);
} else {
Password = value.ToString();
}
break;
case PersistSecurityInfoKey:
if (value == null) {
persistSecurityInfo = DefaultPersistSecurityInfo;
base.Remove(key);
} else {
PersistSecurityInfo = ToBoolean(value);
}
break;
case VerboseColumnNamesKey:
if (value == null) {
verboseColumnNames = DefaultVerboseColumnName;
base.Remove(key);
} else {
VerboseColumnNames = ToBoolean(value);
}
break;
case ParameterStyleKey:
if (value == null) {
paramStyle = DefaultParameterStyle;
base.Remove(key);
} else if (value is string) {
ParameterStyle = (QueryParameterStyle)Enum.Parse(typeof(QueryParameterStyle), (string)value, true);
} else if (value is int ||
value is QueryParameterStyle) {
ParameterStyle = (QueryParameterStyle)value;
}
break;
case RowCacheSizeKey:
if (value == null) {
rowCacheSize = DefaultRowCacheSize;
base.Remove(key);
} else {
RowCacheSize = ToInt32(value);
}
break;
case MaxCacheSizeKey:
if (value == null) {
maxCacheSize = DefaultMaxCacheSize;
base.Remove(key);
} else {
MaxCacheSize = ToInt32(value);
}
break;
case QueryTimeoutKey:
if (value == null) {
queryTimeout = DefaultQueryTimeout;
base.Remove(key);
} else {
QueryTimeout = ToInt32(value);
}
break;
case IgnoreIdentifiersCaseKey:
if (value == null) {
ignoreCase = DefaultIgnoreIdentifiersCase;
base.Remove(key);
} else {
IgnoreIdentifiersCase = ToBoolean(value);
}
break;
case CreateKey:
if (value == null) {
create = DefaultCreate;
base.Remove(key);
} else {
Create = ToBoolean(value);
}
break;
case BootOrCreateKey:
if (value == null) {
bootOrCreate = DefaultBootOrCreate;
base.Remove(key);
} else {
BootOrCreate = ToBoolean(value);
}
break;
case StrictGetValueKey:
if (value == null) {
strictGetValue = DefaultStrictGetValue;
base.Remove(key);
} else {
StrictGetValue = ToBoolean(value);
}
break;
case "DataSource":
if (value == null) {
} else {
string s = value.ToString();
int index = s.IndexOf(':');
if (index != -1) {
string sPort = s.Substring(index + 1);
Host = s.Substring(0, index);
Port = Int32.Parse(sPort);
} else {
Host = s;
}
}
break;
case FetchSizeKey:
if (value == null) {
fetchSize = DefaultFetchSize;
base.Remove(FetchSizeKey);
} else {
FetchSize = ToInt32(value);
}
break;
case MaxFetchSizeKey:
if (value == null) {
maxFetchSize = DefaultMaxFetchSize;
base.Remove(MaxFetchSizeKey);
} else {
MaxFetchSize = ToInt32(value);
}
break;
case AutoCommitKey:
if (value == null) {
autoCommit = DefaultAutoCommit;
base.Remove(AutoCommitKey);
} else {
AutoCommit = ToBoolean(value);
}
break;
case EnlistKey:
if (value == null) {
enlist = DefaultEnlist;
base.Remove(EnlistKey);
} else {
Enlist = ToBoolean(value);
}
break;
default:
//TODO: support additional parameters for Boot/Create process...
throw new ArgumentException("Key '" + key + "' is not recognized.", "key");
}
}