30.9.26

Одни и те же ключевые слова строки подключения теперь работают во всех наших драйверах SQL Server

Автор: 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++ Ожидается в октябре

Если ключевое слово, которое вы ожидаете, всё ещё отсутствует в используемом вами драйвере, откройте обращение в репозитории этого драйвера и скажите нам, какое именно. Мы хотим знать, каковы ваши приоритеты.



Комментариев нет:

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