SQL Server客户端工具到底使用的是哪个provider呢?

 

我们经常困惑的是,我们一些常用的SQL Server客户端工具,如SQLCMD, OSQL, ISQL, SQL Server Management Studio到底是用ODBC, OLEDB还是System.Data.Sqlclient? 不了解工具用的是哪个provider, 则有时候会比较困惑。如:

这篇文档讲sqlcmd.exe 2012版本用的是OLEDB https://msdn.microsoft.com/en-us/library/ms190611.aspx

另外篇文档讲sqlcmd.exe 2012版本用的事ODBC https://technet.microsoft.com/en-us/library/ms162773.aspx

哪篇MSDN文档是对的,哪篇是错的?

 

通过对各个客户端工具进行debugging,我们能比较容易的了解到每个工具使用了provider。下面是不同的工具,在不同版本下使用Data Access技术的列表,仅供参考。

 

 

Isql.exe

Osql.exe

Sqlcmd

QA

Sqlwb.exe

Ssms.exe

SQL Server 2000

DB-Library

Ntwdblib.DLL

ODBC

sqlsrv32.dll

N.A.

ODBC

Sqlsrv32.dll

N.A.

N.A.

SQL Server 2005

N.A.

ODBC

Sqlncli.dll

OLEDB

Sqlncli.dll

N.A.

System.Data.SqlClient

.NET Framework 2.0

N.A.

SQL Server 2008

N.A.

ODBC

Sqlncli10.dll

OLEDB

Sqlncli10.dll

N.A.

N.A.

System.Data.SqlClient

.NET Framework 3.5 SP1

SQL Server 2008 R2

N.A.

ODBC

Sqlncli10.dll

OLEDB

Sqlncli10.dll

N.A.

N.A.

System.Data.SqlClient

.NET Framework 3.5 SP1

SQL Server 2012

N.A.

ODBC

Sqlncli11.dll

ODBC

Sqlncli11.dll

N.A.

N.A.

System.Data.sqlClient

.NET Framework 4.0

 

比较值得注意的是,从SQL Server 2008到SQL Server 2012, SQLCMD.EXE从OLEDB迁移到了ODBC。