summaryrefslogtreecommitdiff
path: root/slips/src/app/Marina/DataAccess/DatabaseConnection.cs
blob: b08399f4342207a2cb625fab07a3722df0f55b52 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
using System;
using System.Data;
using Marina.DataAccess.Builders;

namespace Marina.DataAccess {
	public class DatabaseConnection : IDatabaseConnection {
		private readonly IDbConnection _connection;

		public DatabaseConnection() : this( new DatabaseConfiguration( ), new DatabaseProviderFactory( ) ) {}

		public DatabaseConnection( IDatabaseConfiguration configuration, IDatabaseProviderFactory providerFactory ) {
			_connection = providerFactory.CreateConnectionFor( configuration.ProviderName( ) );
			_connection.ConnectionString = configuration.ConnectionString( );
			_connection.Open( );
		}

		public IDatabaseCommand CreateCommandFor( string sqlQuery ) {
			return CreateCommandFor( new SqlQuery( sqlQuery ) );
		}

		public IDatabaseCommand CreateCommandFor( IQuery query ) {
			IDbCommand command = _connection.CreateCommand( );
			query.Prepare( command );
			return new DatabaseCommand( command );
		}

		public void Dispose() {
			Dispose( true );
			GC.SuppressFinalize( this );
		}

		protected virtual void Dispose( bool disposing ) {
			if ( disposing ) {
				_connection.Close( );
			}
		}
	}
}