diff options
Diffstat (limited to 'src/app/Cmpp298.Assignment3.DataAccess/DatabaseGateway.cs')
| -rw-r--r-- | src/app/Cmpp298.Assignment3.DataAccess/DatabaseGateway.cs | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/src/app/Cmpp298.Assignment3.DataAccess/DatabaseGateway.cs b/src/app/Cmpp298.Assignment3.DataAccess/DatabaseGateway.cs new file mode 100644 index 0000000..55b0221 --- /dev/null +++ b/src/app/Cmpp298.Assignment3.DataAccess/DatabaseGateway.cs @@ -0,0 +1,67 @@ +using System;
+using System.Collections.Generic;
+using System.Data;
+
+namespace Cmpp298.Assignment3.DataAccess {
+ public class DatabaseGateway : IDatabaseGateway {
+ private IDatabaseConnectionFactory _connectionFactory;
+
+ public DatabaseGateway( ) : this( new DatabaseConnectionFactory( ) ) {}
+
+ public DatabaseGateway( IDatabaseConnectionFactory connectionFactory ) {
+ _connectionFactory = connectionFactory;
+ }
+
+ public int InsertRowUsing( InsertQueryBuilder builder ) {
+ return ExecuteBuilderQuery( builder.Parameters, builder.ToString( ) );
+ }
+
+ public void UpdateRowUsing( UpdateQueryBuilder builder ) {
+ ExecuteBuilderQuery( builder.Parameters, builder.ToString( ) );
+ }
+
+ public void Execute( string query ) {
+ using ( IDbConnection connection = _connectionFactory.Create( ) ) {
+ IDbCommand command = connection.CreateCommand( );
+ connection.Open( );
+ command.CommandText = query;
+ command.ExecuteNonQuery( );
+ }
+ }
+
+ public DataTable GetTableFrom( SelectQueryBuilder builder ) {
+ return GetTableFrom( builder.ToString( ) );
+ }
+
+ private DataTable GetTableFrom( string sqlQuery ) {
+ using ( IDbConnection connection = _connectionFactory.Create( ) ) {
+ IDbCommand command = connection.CreateCommand( );
+ command.CommandText = sqlQuery;
+ connection.Open( );
+ IDataReader reader = command.ExecuteReader( );
+ DataTable table = new DataTable( );
+ table.Load( reader );
+ return table;
+ }
+ }
+
+ private int ExecuteBuilderQuery( ICollection< CommandParameter > parameters, string commandText ) {
+ object scalar;
+ using ( IDbConnection connection = _connectionFactory.Create( ) ) {
+ IDbCommand command = connection.CreateCommand( );
+
+ foreach ( CommandParameter parameter in parameters ) {
+ IDataParameter commandParameter = command.CreateParameter( );
+ commandParameter.ParameterName = "@" + parameter.ColumnName;
+ commandParameter.Value = parameter.Value;
+ command.Parameters.Add( commandParameter );
+ }
+
+ command.CommandText = commandText;
+ connection.Open( );
+ scalar = command.ExecuteScalar( );
+ }
+ return DBNull.Value != scalar ? Convert.ToInt32( scalar ) : -1;
+ }
+ }
+}
\ No newline at end of file |
