Method to Retrieve Data from a MySQL Database
In my review I assume you cannot use EF or alike...

I don't see any particular really bad practices here but there are a few minor things that make me uncomfortable when I look at your code. As the important things are correct (everything is disposed and you use parameters to prevent sql injection) there is not much left to review. But hey! this a good news ;-)



The my-prefix ;-) It doesn't hurt but it doesn't look professional either. You know everything there is yours so there's no need to emphasize it with my.



Try to name things by what they really are instead of giving them misleading names. If you do sqlCon.CreateCommand() then name the variable command or cmd not a query. It isn't one. Your sql is a query and it would be fine to name it like so.



Returning an ObservableCollection is a questionable practice. I suggest to use a List instead and update the real observable collection with the new data.



The listOfContacts. It's a collection and for collections we usually just use a plural noun. In this case just contants would be enough.



The reader[0] &amp; magic numbers. You should use constants here like reader[Column.ID]. It looks much better now, doesn't it?

class Column
{
    public const int ID = 0;
    ...
}





PersonName = myReader[8].ToString().Trim() + " " + myReader[9].ToString().Trim(),



PersonName or FullName should be a readonly property of the ContactModel and it should have two normal properties for the first and last names. Your repository shouldn't care and know how to build a person name. It should just pass the data to the ContactModel.