Handle IDisposable objects
So I can reuse the InvokeSql and do not have to bother about the disposing.


Sure. Except InvokeSql is private, so reuse is rather limited to that class. And if that class has a GetUsers method, I dare expect only User-related stuff in that class... which InvokeSql isn't.

In all likelihood, your model is going to involve more than just User entities; I'd make a base class to encapsulate the CRUD and this InvokeSql method; then a derived type can be responsible for User entities, and another derived type can be responsible for another entity type - something like a "repository".

ExecuteReader returns a SqlDataReader instance, which also implements IDisposable: you're missing a using block here:


IDataReader reader = command.ExecuteReader();
while (reader.Read())



using (SqlDataReader reader = command.ExecuteReader())
{
    while (reader.Read())
    ...