When communicating to a SQL Server database using one of the typical systems, ODBC, OLEDB or ADO.NET, is the underlying basic protocol the same? Are all the differences between these systems basically just client side issues?
Is this all just different flavors of TDS (Tabular Data Stream) transfer?
[MS-TDS]: Tabular Data Stream Protocol Specification
Or there actual different ways to talk to the database server and there are fundamental difference between these protocols?
ODBC, OLE DB and ADO.NET are different API/frameworks for communicating with the database. For example, ADO works on data in a connected fashion, primarily using server-side cursors, whereas ADO.NET operates on a disconnected fashion, pulling the data from the server quickly and caching it at the client in ADO.NET dataset objects.
Under the hood, each of these is sending SQL commands to SQL Server over TDS, and receiving data back via TDS. OLE DB allows you to get close to TDS for performance, whereas ODBC abstracts a lot to provide a consistent interface to many different data sources.