public static void CloseConnection(MapiSocket socket, string database) { var key = GetConnectionPoolKey(socket.Host, socket.Port, socket.Username, database); ConnectionInformation info; lock (ConnectionInfo) { info = ConnectionInfo[key]; } lock (info) { info.Busy.Remove(socket); info.Active.Enqueue(socket); } }
private static void SetupConnections(string host, int port, string username, string password, string database, int minConn, int maxConn) { var key = GetConnectionPoolKey(host, port, username, database); ConnectionInformation info; lock (ConnectionInfo) { if (!ConnectionInfo.TryGetValue(key, out info)) info = ConnectionInfo[key] = new ConnectionInformation(minConn, maxConn); } lock (info) { for (var i = info.Active.Count + info.Busy.Count; i < info.Min || (info.Active.Count == 0 && i < info.Max); i++) { try { var socket = new MapiSocket(); socket.Connect(host, port, username, password, database); info.Active.Enqueue(socket); } catch (IOException ex) { throw new MonetDbException(ex, "Problem connecting to the MonetDB server."); } } } }
/// <summary> /// Opens a database connection with the settings /// specified by the <c>ConnectionString</c> property /// of the provider-specific Connection object. /// </summary> public void Open() { if (State == ConnectionState.Open) throw new InvalidOperationException("Connection is already open"); State = ConnectionState.Connecting; if (string.IsNullOrEmpty(ConnectionString)) { State = ConnectionState.Closed; throw new InvalidOperationException("ConnectionString has not been set. Cannot connect to database."); } _socket = MonetDbConnectionFactory.GetConnection(_host, _port, _username, _password, Database, _minPoolConnections, _maxPoolConnections); State = ConnectionState.Open; }