Example #1
0
        /// <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);
                    }
                }
            }
        }
Example #2
0
        public void CheckIn(FbConnectionInternal connection)
        {
            connection.OwningConnection = null;
            connection.Created          = System.DateTime.Now.Ticks;

            this.locked.Remove(connection);
            this.unlocked.Add(connection);
        }
Example #3
0
        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);
        }
Example #4
0
        private FbConnectionInternal Create()
        {
            FbConnectionInternal connection = new FbConnectionInternal(this.options);

            connection.Connect();

            connection.Pooled  = true;
            connection.Created = DateTime.Now.Ticks;

            return(connection);
        }
Example #5
0
 private void Expire(FbConnectionInternal connection)
 {
     try
     {
         if (connection.Verify())
         {
             connection.Disconnect();
         }
     }
     catch (Exception)
     {
         throw new FbException("Error closing database connection.");
     }
 }
Example #6
0
        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);
            }
        }
Example #7
0
        /// <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;
                }
            }
        }
Example #8
0
        /// <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 void CheckIn(FbConnectionInternal connection)
		{
			connection.OwningConnection = null;
			connection.Created = System.DateTime.Now.Ticks;

			this.locked.Remove(connection);
			this.unlocked.Add(connection);
		}
		/// <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;
				}
			}
		}
		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);
			}
		}
		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="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);
			}
		}
		/// <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);
			}
		}
Example #16
0
        /// <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 Expire(FbConnectionInternal connection)
		{
			try
			{
				if (connection.Verify())
				{
					connection.Disconnect();
				}
			}
			catch (Exception)
			{
				throw new FbException("Error closing database connection.");
			}
		}
Example #18
0
        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);
            }
        }
Example #19
0
        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();
            }
        }
		/// <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);
					}
				}
			}
		}