/// <summary> /// Create a new IngresConnectionStringBuilder with /// an initial connection string. /// </summary> /// <param name="connectionString"></param> public IngresConnectionStringBuilder(string connectionString) { _items = (DictionaryEntry[]) ConnectStringConfig.ConnectBuilderKeywords.Clone(); this.ConnectionString = connectionString; _connectStringConfig = ConnectStringConfig.ParseConnectionString(connectionString); }
/// <summary> /// Get/set the value associated with the specified key. /// </summary> /// <param name="keyword"></param> /// <returns></returns> public override object this [String keyword] { // Look up the ordinal for and return // the value at that position. get { int i = GetOrdinal(keyword); return(_items[i].Value); } set { int i = GetOrdinal(keyword); if (value == null) { this.Remove(keyword); return; } Object nativeValue = value; // assume no conversion needed TypeCode sourceTypeCode = Type.GetTypeCode(value.GetType()); Type targetType = ConnectStringConfig.ConnectBuilderKeywords[i].Value.GetType(); TypeCode targetTypeCode = Type.GetTypeCode(targetType); if (targetTypeCode != sourceTypeCode) { switch (targetTypeCode) { case TypeCode.Int32: nativeValue = Int32.Parse(value.ToString()); break; case TypeCode.Boolean: String valueString = value.ToString().Trim(); String valueLower = ToInvariantLower(valueString); // Catch yes/no literals that Boolean.Parse doesn't if (valueLower == "yes" || valueLower == "1") { nativeValue = true; value = "true"; break; } if (valueLower == "no" || valueLower == "0") { nativeValue = false; value = "false"; break; } nativeValue = Boolean.Parse(valueString); break; case TypeCode.String: nativeValue = value.ToString(); break; default: throw new System.InvalidOperationException( "IngresConnectionStringBuilder internal error: " + "unexpected Type for keyword '" + keyword + "'."); } // end switch } // end if (targetTypeCode != sourceTypeCode) string connectionString = keyword + "=" + (value != null ? value.ToString() : ""); ConnectStringConfig connectStringConfig = ConnectStringConfig.ParseConnectionString(connectionString); if (connectStringConfig.Count > 1) { throw new ArgumentException("Invalid keyword/value pair: '" + connectionString + "'."); } base[_items[i].Key.ToString()] = nativeValue; // Standardize key _items[i].Value = nativeValue; } }