SqlConnection Transaction Management Approach
Don't add a the parameters to the save method. It adds unnecessary complexity to the api and it makes it a leaky abstraction because it forces knowledge of the underlying data store onto consumers.

Add a SaveAll method to your repository (why is it called a Facade?)

public static Product SaveAll(IEnumerable&lt;Product&gt; products)
{
    using (var scope = new TransactionScope())
    using (var conn = new SqlConnection(DatabaseHelper.ConnectionString))
    {
        conn.Open();
        foreach (var product in products)
        {
            Save(product, conn);
        }
        scope.Complete();
    }
}

// Used by both public `Save` and public `SaveAll`.
private static Product Save(Product product, SqlConnection conn)
{
    using (var cmd = conn.CreateCommand("SaveProduct"))
    {
        cmd.CommandType = CommandType.StoredProcedure;

        // etc.
    }
}


I haven't written raw ADO.Net code for several years so I apologise if the above is massively incorrect. You should explore a product like Entity Framework (full ORM) or Dapper (more lightweight) to simplify a lot of this repetitive code.