Return an empty DataTable in ExecuteQuery instead of null. Fixes an issue where often the user would get a meaningless error stating the object is not set to an instance of an object when we check (if dt.Rows.Count > 0) because `dt` is null