Wednesday, June 13, 2012

Oracle ADO.Net Providers

Having just posted a piece about issues with deploying ODP.Net and Oracle Client with Winforms applications, I thought I'd best also give a quick summary of why, if it's such a pain to use, I've used ODP.Net at all.

Originally we were going to use Microsoft's intrinsic Oracle provider, located in the System.Data namespace of the.Net framework (System.Data.OracleClient). However this has a number of known issue relating to data types, memory leaks, performance and it is in fact now deprecated. Although it is still present in .Net Framework v4, it hasn't been developed in a number of years and will be removed entirely at some point. You can understand why MS don't want to develop it - why encourage people to use a competitor's database platform?

There are a number of commercially available alternatives, the two best know probably being  devArt's dotConnect For Oracle and Progress Software's DataDirect Oracle Data Provider For .Net. In fact, I originally started use dotConnect and it was pretty easy to get it working on the whole (if I can remember much about it I might put a post up as there were one or two things I had to spend some time working out). I was more or less at the testing stage of the proof of concept application I'd constructed, but as is often the case, it came purely and simply down to cost: dotConnect and DataDirect cost money whereas ODP.Net is free from Oracle and most commercial outfits, when confronted with that sort of choice, will inevitably take the freebie.

There are of course pros and cons for each of them and it is up to you (or your organisation) to decide what fits your needs and budget best, but don't be tempted to use the old .Net framework provider as it is a false economy. Hopefully my posts will help people make decisions and then implement them in much less time than it took me. Of course, please feel free to comment with any corrections, additions and the like. I might even make my proof of concept code available to download as well. It is currently in VB.Net but I might do a C# version as well for completeness, but that's a way off as I'm pretty busy.

No comments: