Database abstraction class in C# (version 2)
Some organization nitpicks first :


Your class file should start with the const
Even your private functions should be PascalCased meaning getAlreadyDownloadedCommand should be GetAlreadyDownloadedCommand
Your public methods should appear before your private methods IMO


You don't implement the Dispose pattern correctly. You should check this article but basically, to properly dispose your object, the pattern is the following :

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

protected virtual void Dispose(bool disposing)
{  
    if (disposing){  
        if (connection != null) connection.Dispose();  
        //etc.
    }  
}  


I must say I'm not 100% why we need to do it this way, but this is how it is supposed to be implemented according to Microsoft's documentation and developer tools like Resharper.

When you have a public method/constructor/etc, you should always check your input for null. Don't trust the user of your code, even if it's yourself! If you check your inputs for null, you'll know very fast if your input is null, instead of having a weird exception that tells you little to nothing.

public DatabaseAccess(string dbconnectionstring)
{
    if(String.IsNullOrWhitespace(dbconnectionstring) throw new ArgumentNullException(nameof(dbconnectionstring));

    connection = new SqlConnection(dbconnectionstring);

    connection.Open();
    alreadyDownloadedCommand = getAlreadyDownloadedCommand(connection);
    markedDownloadedCommand = getMarkedDownloadedCommand(connection);
}