Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
При использовании поставщиков .NET в Microsoft .NET важно понимать различные компоненты и их зависимости для простой интеграции с приложениями. В этой статье описаны основные аспекты поставщиков .NET, их пути поиска по умолчанию и рекомендации по устранению неполадок.
Примечание.
В этой статье не рассматриваются установки .NET Core.
Поставщики данных Microsoft .NET
Microsoft .NET включает четыре поставщика данных, которые поставляются с платформа .NET Framework:
- System.Data.SqlClient
- System.Data.Odbc
- System.Data.OleDb
- System.Data.OracleClient
Первые три содержатся в System.Data.DLL , а последний содержится в System.Data.OracleClient.DLL. При создании приложения необходимо добавить только ссылку на соответствующую библиотеку DLL (также называемую "сборкой") в проект, а затем использовать поставщика.
System.Data.SqlClient содержит код реализации, аналогичный собственному клиенту SQL, и не использует интерфейсы API OLE DB или ODBC вообще.
System.Data.Odbc и System.Data.OleDb не предоставляют встроенные функции базы данных. Вместо этого они загружают драйверы ODBC и поставщики OLE DB соответственно.
System.Data.OracleClient также содержит код реализации, но, как драйверы Oracle ODBC и поставщики OLE DB, он также использует программное обеспечение Oracle Client Software или программное обеспечение Oracle Data Access Components (ODAC) для установки.
Примечание.
Как правило, рекомендуется использовать драйверы, предоставляемые Oracle, а не реализации Майкрософт, так как бывшие драйверы, скорее всего, будут более актуальными. Если проблему можно устранить, переключившись на поставщика Oracle из реализации драйвера Майкрософт, это предпочтительное решение.
Путь поиска .NET по умолчанию
В отличие от загрузки драйверов ODBC и поставщиков OLE DB, поставщики данных .NET не полагаются на реестр. Вместо этого загрузчик .NET использует эвристика поиска, описанную следующим образом:
- Переменная
DEVPATH
среды проверяется для общей папки. Это следует использовать только при разработке общих сборок. После завершения разработки сборка должна быть установлена в глобальном кэше сборок (GAC). - GAC проверяет, является ли сборка совместно используемой между приложениями. Если сборка не находится в GAC, это частная сборка.
- Если у файла приложения или веб-конфигурации есть элемент, атрибут предоставляет имя и абсолютный путь к файлу,
href
содержаму манифест сборки. - Папка, в которой установлено приложение, проверяется.
- Проверяется вложенная папка в папке приложения с тем же именем, что и файл, содержащий манифест сборки.
- Если в файле конфигурации есть элемент,
privatePath
атрибут предоставляет имя одной или нескольких вложенных папок, которые будут искать в папке приложения.
Эвристика поиска — это общий алгоритм загрузки библиотеки DLL. Используя встроенные поставщики .NET, библиотека DLL почти всегда находится в одной из следующих папок:
- C:\windows\microsoft.net\Framework (32-разрядные сборки)
- C:\windows\microsoft.net\Framework64 (64-разрядные сборки)
В этих папках будет папка для различных версий .NET. Как правило, мы заботимся только о том, что:
- v2.0.50727 (.NET 2.0, 3.0, 3.5)
- v4.0.30319 (.NET 4.x)
Вы можете заметить папки .NET 1.0 и 1.1. Они не поддерживаются и не содержат сборок. Вы также можете заметить папки .NET 3.0 и 3.5. Хотя они могут содержать определенные файлы, относящиеся к этим версиям .NET, они все расширения до версии 2.0, и System.Data.DLL находится в папке 2.0, так как это не библиотека DLL расширения. Ранее упомянутые папки — это расположения встроенных библиотек DLL Платформы.
Кроме того, эти библиотеки DLL и сторонние библиотеки DLL отображаются в GAC, где выглядит алгоритм поиска. GAC находится в:
- C:\windows\assembly (для платформа .NET Framework 2.0, 3.0, 3.1, 4.x).
Некоторые сборки .NET 4.0 также находятся в разделе:
- C:\windows\microsoft.net\assembly.
Дополнительные инструкции см. в разделе "Поиск сборок во время выполнения". Использование PROCMON также может показать путь поиска.
Сторонние поставщики
Многие установленные корпорацией Майкрософт поставщики, такие как службы Analysis Services, не входят в платформа .NET Framework. Кроме того, существуют сторонние поставщики .NET, такие как поставщик ODP Oracle, которые устанавливаются независимо.
Для сторонних поставщиков убедитесь, что сборка находится в одной из следующих папок, и что она имеет 64-разрядную или 32-разрядную версию в зависимости от приложения:
- C:\windows\microsoft.net\assembly (для версий платформа .NET Framework 4.x)
- C:\windows\assembly (для платформа .NET Framework 2.0, 3.0, 3.1, 4.x)
В следующей таблице показаны имена библиотек DLL и сборок некоторых распространенных поставщиков:
Понятное имя | Имя сборки | DLL-библиотеки |
---|---|---|
Поставщик данных .NET для SQL Server | System.Data.SqlClient | System.Data.DLL |
Поставщик OLE DB | System.Data.OleDb | System.Data.DLL |
Поставщик ODBC | System.Data.Odbc | System.Data.DLL |
Поставщик служб Analysis Services | Поставщик служб Analysis Services | Microsoft.AnalysisServices.AdomdClientMicrosoft.AnalysisServices.AdomdClient.DLL |
Поставщик SQL CE | System.Data.SqlServerCe | System.Data.SqlServerCe.DLL |
Поставщик Oracle корпорации Майкрософт | System.Data.OracleClient | System.Data.OracleClient.DLL |
Поставщик ODP Oracle | Oracle.DataAccess.Client | Oracle.DataAccess.DLL |
При устранении неполадок поставщиков .NET не существует встроенного или обобщенного средства, например администратора ODBC или UDL-файла, для независимого тестирования приложения. В таких случаях можно написать приложение быстрого тестирования на выбранном языке. Ниже приведен пример приложения, написанного в PowerShell:
#-------------------------------
#
# get-SqlAuthScheme.ps1
#
# PowerShell script to test a System.Data.SqlClient database connection
#
# USAGE: .\get-SqlAuthScheme tcp:SQLProd01.contoso.com,1433 ' explicitly specify DNS suffix, protocol, and port # ('tcp' must be lower case)
# USAGE: .\get-SqlAuthScheme SQLProd01 ' let the driver figure out the DNS suffix, protocol, and port #
#
#-------------------------------
param ([string]$server = "localhost")
Set-ExecutionPolicy Unrestricted -Scope CurrentUser
$connstr = "Server=$server;Database=master;Integrated Security=SSPI"
[System.Data.SqlClient.SqlConnection] $conn = New-Object System.Data.SqlClient.SqlConnection
$conn.ConnectionString = $connstr
[System.DateTime] $start = Get-Date
$conn.Open()
[System.Data.SqlClient.SqlCommand] $cmd = New-Object System.Data.SqlClient.SqlCommand
$cmd.CommandText = "select auth_scheme from sys.dm_exec_connections where session_id=@@spid"
$cmd.Connection = $conn
$dr = $cmd.ExecuteReader()
$result = $dr.Read()
$auth_scheme = $dr.GetString(0)
$conn.Close()
$conn.Dispose()
[System.DateTime] $end = Get-Date
[System.Timespan] $span = ($end - $start)
"End time: " + $end.ToString("M/d/yyyy HH:mm:ss.fff")
"Elapsed time was " + $span.Milliseconds + " ms."
"Auth scheme for " + $server + ": " + $auth_scheme
Если скрипт находится C:\temp
и вы хотите получить схему проверки подлинности для сервера с именем sqlprod01
, выполните следующую команду из Windows PowerShell от имени администратора:
.\get-sqlauthscheme.ps1 sqlprod01
Как правило, загрузка поставщиков .NET не будет проблемой, если сборка или БИБЛИОТЕКА DLL существует. Чаще всего возникают проблемы с проверкой подлинности, которые можно протестировать с помощью эквивалентного поставщика OLE DB с помощью UDL-файла.
Сведения о строка подключения для незнакомых драйверов см. в справочнике по строкам подключения.