Автор: DavidLevy, Microsoft, The same connection string keywords now work across our SQL drivers
Годами мы рассматривали каждый из наших драйверов Microsoft SQL Server как отдельную сущность. Мы услышали ваши отзывы о том, что этот подход нужно пересмотреть. Команда, запускающая приложения, написанные на нескольких языках, обращавшихся к одной базе данных, не должна жонглировать несколькими строками подключения.
Мы это исправляем.
Что изменилось
Мы добавили псевдонимы ключевых слов в SqlClient, JDBC, ODBC, OLE DB и go-mssqldb, чтобы одно и то же написание работало во всех них.
Все пять теперь принимают:
- Server
- Database
- UID
- App
- Encrypt
- TrustServerCertificate
- ApplicationIntent
- MultiSubnetFailover
- FailoverPartner
Мы также добавили следующие псевдонимы:
| Драйвер | Теперь принимает | Уже работало как |
|---|---|---|
| SqlClient | ConnectTimeout FailoverPartner PacketSize WorkstationID columnEncryption |
Connect Timeout Failover Partner Packet Size Workstation ID / WSID Column Encryption Setting |
| JDBC | uid trusted_connection app connectTimeout columnEncryption quotedId |
user integratedSecurity applicationName loginTimeout columnEncryptionSetting quotedIdentifier |
| ODBC | ConnectTimeout MultipleActiveResultSets FailoverPartner WorkstationID |
no keyword MARS_Connection Failover_Partner WSID |
| OLE DB | ConnectTimeout MultipleActiveResultSets WorkstationID |
Timeout MarsConn WSID |
| go-mssqldb | Connect Timeout Failover Partner Application Intent Trust Server Certificate Multi Subnet Failover Host Name In Certificate Server SPN WSID App |
connection timeout failoverpartner applicationintent trustservercertificate multisubnetfailover hostnameincertificate serverspn workstation no keyword |
Ничего не объявлено устаревшим. Connect Timeout по-прежнему работает в SqlClient, loginTimeout по-прежнему работает в JDBC, WSID по-прежнему работает в ODBC и OLE DB, MarsConn и Timeout по-прежнему работают в OLE DB. Ни один публичный API не изменился. Переведите одно приложение на общие написания, а остальные оставьте в покое.
Одна строка, четыре языка
Одна строка, заданная один раз:
Server=<server>;Database=AdventureWorksLT;UID=<user>;PWD=<password>;Encrypt=no;TrustServerCertificate=yes
Мы передаём её без изменений четырём клиентам. Все четыре возвращают одни и те же пять строк из SalesLT.Product.
C# на Microsoft.Data.SqlClient. Принимает её как есть.
Go на go-mssqldb. Принимает её как есть.
Python на mssql-python. Принимает её как есть.
C++ на Microsoft ODBC Driver 18. Мы всё ещё используем ту же строку, просто с добавленным именем драйвера:
;Driver={ODBC Driver 18 for SQL Server}
Будет ли когда-нибудь всё идеально? Нет. У некоторых драйверов есть особые требования, как, например, спецификация ODBC, которая требует имени драйвера, что мы только что видели. Тем не менее, вспомнить о добавлении одного тега явно лучше, чем начинать всё с нуля.
PHP и Django
PHP подключается через драйвер ODBC, поэтому он подхватывает ключевые слова ODBC.
mssql-django по умолчанию работает на pyodbc. Он может работать на mssql-python для каждого подключения с помощью OPTIONS = {"python_driver": "mssql_python"}. В любом случае он принимает сервер и базу данных через настройки Django, а остальное передаёт через extra_params. На пути mssql-python он отбрасывает DRIVER, DSN и SERVERNAME, потому что mssql-python включает собственный драйвер и отвергает их. mssql-python также принимает написания, которых нет у драйвера ODBC, включая Packet Size с пробелом и addr для сервера, и нормализует их перед подключением.
Это только первый шаг
Вы сказали нам, что когда мы заявляем, что ключевое слово поддерживается, это должно означать одно и то же на каждом языке, который мы поставляем. Мы пока не там. Это первый шаг.
Большой пункт в нашем списке — аутентификация Microsoft Entra, хотя она сложнее. Драйверы полагаются на фреймворки для конкретных языков, которыми мы не владеем. У каждого разные уровни поддержки методов аутентификации Microsoft Entra.
Где взять новые ключевые слова
| Драйвер | Язык | Доступно в |
|---|---|---|
| Microsoft.Data.SqlClient | C# | 7.1.0 |
| go-mssqldb | Go | v1.11.2 |
| mssql-python | Python | 1.15.0 |
| Microsoft ODBC Driver 18 | C++ | 18.7.1.1 |
| JDBC | Java | 13.6.0 |
| OLEDB | C++ | Ожидается в октябре |
Если ключевое слово, которое вы ожидаете, всё ещё отсутствует в используемом вами драйвере, откройте обращение в репозитории этого драйвера и скажите нам, какое именно. Мы хотим знать, каковы ваши приоритеты.

Комментариев нет:
Отправить комментарий