/// <include file='Doc/en_EN/FbConnection.xml' path='doc/class[@name="FbConnection"]/method[@name="Dispose(System.Boolean)"]/*'/> protected override void Dispose(bool disposing) { lock (this) { if (!this.disposed) { try { // release any unmanaged resources this.Close(); if (disposing) { // release any managed resources this.innerConnection = null; } this.disposed = true; } catch { } finally { base.Dispose(disposing); } } } }
public void CheckIn(FbConnectionInternal connection) { connection.OwningConnection = null; connection.Created = System.DateTime.Now.Ticks; this.locked.Remove(connection); this.unlocked.Add(connection); }
private FbConnectionInternal GetConnection() { FbConnectionInternal[] list = (FbConnectionInternal[])this.unlocked.ToArray(typeof(FbConnectionInternal)); FbConnectionInternal result = null; long check = -1; Array.Reverse(list); foreach (FbConnectionInternal connection in list) { if (connection.Verify()) { if (this.lifeTime != 0) { long now = DateTime.Now.Ticks; long expire = connection.Created + this.lifeTime; if (now >= expire) { if (this.CheckMinPoolSize()) { this.unlocked.Remove(connection); this.Expire(connection); } } else { if (expire > check) { check = expire; result = connection; } } } else { result = connection; break; } } else { this.unlocked.Remove(connection); this.Expire(connection); } } if (result != null) { this.unlocked.Remove(result); this.locked.Add(result); } return(result); }
private FbConnectionInternal Create() { FbConnectionInternal connection = new FbConnectionInternal(this.options); connection.Connect(); connection.Pooled = true; connection.Created = DateTime.Now.Ticks; return(connection); }
private void Expire(FbConnectionInternal connection) { try { if (connection.Verify()) { connection.Disconnect(); } } catch (Exception) { throw new FbException("Error closing database connection."); } }
public static void DropDatabase(Hashtable values) { int serverType = 0; if (!values.ContainsKey("User") || !values.ContainsKey("Password") || !values.ContainsKey("Database")) { throw new ArgumentException("CreateDatabase requires a user name, password and database path."); } if (!values.ContainsKey("DataSource")) { values.Add("DataSource", "localhost"); } if (!values.ContainsKey("Port")) { values.Add("Port", 3050); } if (values.ContainsKey("ServerType")) { serverType = Convert.ToInt32(values["ServerType"], CultureInfo.InvariantCulture); } try { // Configure Attachment FbConnectionStringBuilder csb = new FbConnectionStringBuilder(); csb.DataSource = values["DataSource"].ToString(); csb.Port = Convert.ToInt32(values["Port"], CultureInfo.InvariantCulture); csb.Database = values["Database"].ToString(); csb.UserID = values["User"].ToString(); csb.Password = values["Password"].ToString(); csb.ServerType = serverType; FbConnectionString options = new FbConnectionString(csb); // Drop the database FbConnectionInternal db = new FbConnectionInternal(options); db.DropDatabase(); } catch (IscException ex) { throw new FbException(ex.Message, ex); } }
/// <include file='Doc/en_EN/FbConnection.xml' path='doc/class[@name="FbConnection"]/method[@name="Open"]/*'/> public void Open() { lock (this) { if (this.connectionString == null || this.connectionString.Length == 0) { throw new InvalidOperationException("Connection String is not initialized."); } if (!this.IsClosed && this.state != ConnectionState.Connecting) { throw new InvalidOperationException("Connection already Open."); } try { this.OnStateChange(this.state, ConnectionState.Connecting); if (this.options.Pooling) { // Use Connection Pooling FbConnectionPool pool = FbPoolManager.Instance.CreatePool(this.connectionString); this.innerConnection = pool.CheckOut(); this.innerConnection.OwningConnection = this; } else { // Do not use Connection Pooling this.innerConnection = new FbConnectionInternal(this.options, this); this.innerConnection.Connect(); } // Bind Warning messages event this.innerConnection.Database.WarningMessage = new WarningMessageCallback(this.OnWarningMessage); // Update the connection state this.OnStateChange(this.state, ConnectionState.Open); } catch (IscException ex) { this.OnStateChange(this.state, ConnectionState.Closed); throw new FbException(ex.Message, ex); } catch (Exception) { this.OnStateChange(this.state, ConnectionState.Closed); throw; } } }
/// <include file='Doc/en_EN/FbConnection.xml' path='doc/class[@name="FbConnection"]/method[@name="DropDatabase(System.String)"]/*'/> public static void DropDatabase(string connectionString) { // Configure Attachment FbConnectionString options = new FbConnectionString(connectionString); options.Validate(); try { // Drop the database FbConnectionInternal db = new FbConnectionInternal(options); db.DropDatabase(); } catch (IscException ex) { throw new FbException(ex.Message, ex); } }
private FbConnectionInternal Create() { FbConnectionInternal connection = new FbConnectionInternal(this.options); connection.Connect(); connection.Pooled = true; connection.Created = DateTime.Now.Ticks; return connection; }
public static void CreateDatabase(Hashtable values) { bool overwrite = false; int index = 0; byte dialect = 3; int serverType = 0; if (!values.ContainsKey("User") || !values.ContainsKey("Password") || !values.ContainsKey("Database")) { throw new ArgumentException("CreateDatabase requires a user name, password and database path."); } if (values.ContainsKey("ServerType")) { serverType = Convert.ToInt32(values["ServerType"], CultureInfo.InvariantCulture); } if (!values.ContainsKey("DataSource")) { values.Add("DataSource", "localhost"); } if (!values.ContainsKey("Port")) { values.Add("Port", 3050); } if (values.ContainsKey("Dialect")) { dialect = Convert.ToByte(values["Dialect"], CultureInfo.InvariantCulture); } if (dialect < 1 || dialect > 3) { throw new ArgumentException("Incorrect database dialect it should be 1, 2, or 3."); } if (values.ContainsKey("Overwrite")) { overwrite = (bool)values["Overwrite"]; } try { // Configure Attachment FbConnectionStringBuilder csb = new FbConnectionStringBuilder(); csb.DataSource = values["DataSource"].ToString(); csb.UserID = values["User"].ToString(); csb.Password = values["Password"].ToString(); csb.Database = values["Database"].ToString(); csb.Port = Convert.ToInt32(values["Port"], CultureInfo.InvariantCulture); csb.ServerType = serverType; FbConnectionString options = new FbConnectionString(csb); // DPB configuration DatabaseParameterBuffer dpb = new DatabaseParameterBuffer(); // Dpb version dpb.Append(IscCodes.isc_dpb_version1); // Dummy packet interval dpb.Append(IscCodes.isc_dpb_dummy_packet_interval, new byte[] { 120, 10, 0, 0 }); // User name dpb.Append(IscCodes.isc_dpb_user_name, values["User"].ToString()); // User password dpb.Append(IscCodes.isc_dpb_password, values["Password"].ToString()); // Database dialect dpb.Append(IscCodes.isc_dpb_sql_dialect, new byte[] { dialect, 0, 0, 0 }); // Database overwrite dpb.Append(IscCodes.isc_dpb_overwrite, (short)(overwrite ? 1 : 0)); // Character set if (values.ContainsKey("Charset")) { index = Charset.SupportedCharsets.IndexOf(values["Charset"].ToString()); if (index == -1) { throw new ArgumentException("Character set is not valid."); } else { dpb.Append( IscCodes.isc_dpb_set_db_charset, Charset.SupportedCharsets[index].Name); } } // Page Size if (values.ContainsKey("PageSize")) { dpb.Append(IscCodes.isc_dpb_page_size, Convert.ToInt32(values["PageSize"], CultureInfo.InvariantCulture)); } // Forced writes if (values.ContainsKey("ForcedWrite")) { dpb.Append(IscCodes.isc_dpb_force_write, (short)((bool)values["ForcedWrite"] ? 1 : 0)); } if (!overwrite) { try { // Check if the database exists FbConnectionInternal check = new FbConnectionInternal(options); check.Connect(); check.Disconnect(); IscException ex = new IscException(IscCodes.isc_db_or_file_exists); throw new FbException(ex.Message, ex); } catch (Exception) { throw; } } // Create the new database FbConnectionInternal c = new FbConnectionInternal(options); c.CreateDatabase(dpb); } catch (IscException ex) { throw new FbException(ex.Message, ex); } }
/// <include file='Doc/en_EN/FbConnection.xml' path='doc/class[@name="FbConnection"]/method[@name="CreateDatabase(System.String,System.Int32,System.Boolean,System.Boolean)"]/*'/> public static void CreateDatabase( string connectionString, int pageSize, bool forcedWrites, bool overwrite) { FbConnectionString options = new FbConnectionString(connectionString); options.Validate(); try { // DPB configuration DatabaseParameterBuffer dpb = new DatabaseParameterBuffer(); // Dpb version dpb.Append(IscCodes.isc_dpb_version1); // Dummy packet interval dpb.Append(IscCodes.isc_dpb_dummy_packet_interval, new byte[] { 120, 10, 0, 0 }); // User name dpb.Append(IscCodes.isc_dpb_user_name, options.UserID); // User password dpb.Append(IscCodes.isc_dpb_password, options.Password); // Database dialect dpb.Append(IscCodes.isc_dpb_sql_dialect, new byte[] { options.Dialect, 0, 0, 0 }); // Database overwrite dpb.Append(IscCodes.isc_dpb_overwrite, (short)(overwrite ? 1 : 0)); // Character set if (options.Charset.Length > 0) { int index = Charset.SupportedCharsets.IndexOf(options.Charset); if (index == -1) { throw new ArgumentException("Character set is not valid."); } else { dpb.Append( IscCodes.isc_dpb_set_db_charset, Charset.SupportedCharsets[index].Name); } } // Page Size if (pageSize > 0) { dpb.Append(IscCodes.isc_dpb_page_size, pageSize); } // Forced writes dpb.Append(IscCodes.isc_dpb_force_write, (short)(forcedWrites ? 1 : 0)); if (!overwrite) { // Check if the database exists FbConnectionInternal c = new FbConnectionInternal(options); try { c.Connect(); c.Disconnect(); IscException ex = new IscException(IscCodes.isc_db_or_file_exists); throw new FbException(ex.Message, ex); } catch (FbException ex) { if (ex.ErrorCode != 335544344) { throw; } } } // Create the new database FbConnectionInternal db = new FbConnectionInternal(options); db.CreateDatabase(dpb); } catch (IscException ex) { throw new FbException(ex.Message, ex); } }
private void Prepare(bool returnsSet) { FbConnectionInternal innerConn = this.connection.InnerConnection; // Check if we have a valid transaction if (this.transaction == null) { this.implicitTransaction = true; IsolationLevel il = this.connection.ConnectionOptions.IsolationLevel; this.transaction = new FbTransaction(this.connection, il); this.transaction.BeginTransaction(); // Update Statement transaction if (this.statement != null) { this.statement.Transaction = this.transaction.Transaction; } } // Check if we have a valid statement handle if (this.statement == null) { this.statement = innerConn.Database.CreateStatement(this.transaction.Transaction); } // Prepare the statement if needed if (!this.statement.IsPrepared) { // Close the inner DataReader if needed this.CloseReader(); // Reformat the SQL statement if needed string sql = this.commandText; if (this.commandType == CommandType.StoredProcedure) { sql = this.BuildStoredProcedureSql(sql, returnsSet); } try { // Try to prepare the command this.statement.Prepare(this.ParseNamedParameters(sql)); } catch { // Release the statement and rethrow the exception this.statement.Release(); this.statement = null; throw; } // Add this command to the active command list innerConn.AddPreparedCommand(this); } else { // Close statement for subsequently executions this.Close(); } }