I have yet to see on this thread what appears to me to be a necessary clarification for something that seems to be confusing a few people:
ADO.NET is the collection of classes that are used for data access. ADO.NET is not a data access provider. It is the .NET replacement for ADO (where we used ADODB.Connection and ADODB.Recordset in ASP and
VB).
Within the System.Data namespace are the namespaces for the different data providers that have been mentioned (System.Data.SqlClient, System.Data.OleDb, System.Data.Odbc). These ARE data providers.
What people have been trying to say is that if you plan on using MSSQL Server, then you should use the SqlClient namespace for your data operations because the classes for connecting to MSSQL Server are built to work directly with the database server instead of going thru the "middleman" of the OLEDB or ODBC data access layer components of Windows. You can most certainly still use the System.Data.OleDB provider with SQL (and use the SQLOLEDB provider for Windows that comes with SQL), but it doesn't make sense and hurts performance. You could however use the System.Data.OleDb namespace classes with an Oracle database because there is no native .NET connectivity to Oracle. You would then use an Oracle provided OLEDB access provider such as "OraOLEDB.Oracle". (I believe you can get an "OracleClient" assembly of classes for .NET, I have never looked into it though. This may provider a performance enhancement similar to the SqlClient classes.)
I hope this helps to clarify what has been said in this thread.