DbConnetion/DbCommand Exercise - C# Series Part 2

I did the exercise about Polymorphism: Third Pillar of Opp. I thought I could post here the solution. If you have done something different or have something to correct me, please do. I’ll be more than happy. I’m using C# 10 - Visual Studio 2022

MAIN:

using DATABase_Connection_Origin;

var sqlConnection = new SqlConnection(“Connection to SQL”);
var oracleConnection = new OracleConnection(“Connection to Oracle”);

Console.WriteLine($“SQL Connection string: {sqlConnection.ConnectionString}”);
Console.WriteLine($“Oracle Connection string: {oracleConnection.ConnectionString}\n”);

sqlConnection.OpenConnection();
oracleConnection.OpenConnection();

Console.WriteLine(“\nDOING SOME WORK!!!\n”);

sqlConnection.CloseConnection();
oracleConnection.CloseConnection();

//TESTING DbCommand_TESTING DbCommand_TESTING DbCommand_TESTING DbCommand_TESTING DbCommand_
Console.WriteLine();
var dbCommandSql = new DbCommand(sqlConnection, “Total sum of values in the data base”);

dbCommandSql.Execute();

var dbCommandOracle = new DbCommand(oracleConnection, “Total product of values in the data base.”);

dbCommandOracle.Execute();

DBCONNECTION CLASS:

public abstract class DbConnection
{
    public TimeSpan TimeOut { get; private set; }
    public readonly string ConnectionString;

    public DbConnection(string connectionString)
    {
        if (String.IsNullOrEmpty(connectionString))
        {
            throw new InvalidOperationException("Null or Empty string cannot be used as connection string.");
        }
        else
            ConnectionString = connectionString;
    }

    public abstract void OpenConnection();

    public abstract void CloseConnection();
    
}

DB COMMAND CLASS:

public class DbCommand
{
private DbConnection _dbConnection;

    string _instruction;
            
    public DbCommand(DbConnection dbConnection, string instruction)
    {
        if (dbConnection == null)
        {
            throw new InvalidOperationException("dbConnection cannot be null.");
        }
        else
            _dbConnection = dbConnection;

        if (String.IsNullOrEmpty(instruction))
        {
            throw new InvalidOperationException("Overload parameter instructio cannot be empty or null.");
        }
        else
            _instruction = instruction;
    }

    public void Execute()
    {
        _dbConnection.OpenConnection();

        Console.WriteLine(_instruction);
        
        _dbConnection.CloseConnection();
    }

}

SQLCONNECTION CLASS:

public class SqlConnection : DbConnection
{
private readonly string _connectionString;
public SqlConnection(string connectionString) : base(connectionString)
{
if (String.IsNullOrEmpty(connectionString))
{
throw new InvalidOperationException(“Null or Empty string cannot be used as connection string.”);
}
else
_connectionString = connectionString;
}

    public override void OpenConnection()
    {
        Console.WriteLine("Open a SQL SERVER Connection.");    
    }

    public override void CloseConnection()
    {
        Console.WriteLine("Close a SQL SERVER Connection.");
    }
}

ORACLECONNECTION CLASS:

    private readonly string _oracleConnection;

    public OracleConnection(string connectionString) : base (connectionString)
    {
        if (String.IsNullOrEmpty(connectionString))
            throw new InvalidOperationException("Null or Empty string cannot be used as connection string.");
        else
            _oracleConnection = connectionString;
    }

    public override void OpenConnection()
    {
        Console.WriteLine("Open a Oracle SERVER Connection");
    }

    public override void CloseConnection()
    {
        Console.WriteLine("Close a Oracle SERVER Connection");
    }
}