I dislike ODBC and its many versions, incompatibles, its poor performance, its unpredictable results, its inconsistent drivers from the various vendors, its lack of syntax consistent standards and it overall difficulty to use and to deploy in a client server environment.
I only speak from first hand experience with working with ODBC. There is nothing wrong with using ODBC. It may be your only option at the moment. ADO.NET is the latest evolution in database access, but has it roots in the evolution in ODBC. ADO.NET is a rewrite in which Microsoft learned form the sins of the past. Back in the day a few years ago ODBC was the only method of data access on a Windows system that worked and saved developer a lot of time in development for database communication. At the time it was much welcomed, but today it is demise is much welcomed.
I was just unfortunate to be a part of the evolution of the ODBC madness, having to re-write my code every time they published a new release or service pack is a major pain. I have bloody scares on my forehead from backing my head on the keyboard in dealing with the ODBC insanity. When you have 1,000’s of lines of code and a lot of database access code, it gets old pretty quick rewriting it to accommodate a syntax change, a retired command, change in the default behavior of an object or setting, new methods, new functions or stupid parameters that are now required, but not documented.