Подключение MS SQL
Подключение осуществляется через Microsoft OLE DB Driver for SQL Server или SQL Server Native Client. Для обоих драйверов требуется предварительная установка.
Параметры подключения
При настройке подключения задаются следующие параметры:
- Метка — содержит задаваемое пользователем имя подключения.
- Строка подключения — строка вида host[:port]:database (параметр, заключенный в [ ], является опциональным):
- host — хост сервера СУБД;
- port — порт TCP, используемый сервером СУБД для взаимодействия с клиентом, если параметр пустой, то порт по умолчанию 1433 ;
- database — имя базы данных.
Задать строку подключения можно вручную или в отдельном окне, которое вызывается при клике мышью по кнопке .
Окно имеет два поля:
- Сервер — хост SQL-сервера. При необходимости через «\» указывается именованный экземпляр SQL-сервера.
- База данных — имя базы данных.
Примеры строки подключения:
- Тестировать — тест указанных настроек подключения.
- Логин — логин пользователя БД. Если логин не указан, то используется доменная авторизация.
- Пароль — пароль пользователя БД.
- Показывать системные таблицы — при установке этого флага в мастере импорта, использующего данное подключение, становятся видимы доступные пользователю системные таблицы БД.
- Обрамлять имена кавычками — если имена объектов базы данных (например, имена таблиц, полей) содержат пробелы или зарезервированные символы, то необходимо использовать обрамляющие символы, фиксирующие начало и конец имени.
- Кодовая страница — позволяет задать язык сообщений сервера БД и кодовую страницу для значений символьных типов, представленных не в UNICODE: char, varchar, text.
- Не использовать клиент СУБД — для MS SQL этот параметр недоступен.
- Очищать пул при деактивации — очищает пул часто используемых в пакетной обработке и пакетов Loginom Integrator, сохраненных для быстрого вызова, после деактивации узла. По умолчанию этот параметр отключен.
- Тайм-аут подключения (c) — задает предельное время подключения, значение по умолчанию 20 секунд. Если импорт из базы данных или экспорт в базу данных будет выполняться в режиме игнорирования ошибок, то в случае неудавшегося подключения в течение установленного времени, соответствующая ошибка будет записана в выходной порт Статус выполнения узла Импорт из БД/Экспорт в БД, а при импорте/экспорте в обычном режиме — выполнение узла завершится ошибкой.
- Тайм-аут блокировки (с) — устанавливает тайм-аут ожидания снятия блокировки с ресурса (таблицы, строки). Задаётся выпадающим списком с редактируемым полем ввода, которое принимает целые положительные значения. Предустановленный список значений:
- По умолчанию — используется значение по умолчанию сервера БД.
- ∞ — время ожидания не ограничивается.
- Числовые значения — выбор из следующих значений: 5, 10, 20, 30, 60, 120.
Примечание: Для подключения к базе данных клиенты или драйвер ODBC должны быть той же разрядности, что и разрядность приложения/сервера Loginom.
Совместимость
- Клиенты.
- SQL Native Client.
- Microsoft OLE DB Driver.
- SQL Server 2016, 2014, 2012, 2008 R2, 2008.
- SQL Server 2000 (включая MSDE).
- SQL Server 7.
Важно: Доменная авторизация осуществляется от имени пользователя, под которым запущен сервер Loginom.
Смотри также:
- Информация в русском разделе википедии.
- Официальный сайт производителя.
- Документация по SQL синтаксису.
Подключение к SQL-серверу из 1С:Предприятие 8 (пример кода)
В данной статье приведены экземпляры кода на языке 1С, которые позволяют подключаться к базе данных на SQL-сервере, получать из нее данные, а также записывать новые и обновлять существующие записи в таблицах этой базы данных. Код протестирован на платформе 8.3.5, а также на версиях SQL Server 2008 R2 и SQL Server 2012. Операционная система Windows Server 2008 и Windows Server 2012. Есть предположение, что указанный код будет работать и на других версиях 1С, SQL и Windows.
0. Оглавление
- Постановка задачи
- Подключение к SQL-серверу
- Добавление записей в таблицу
- Обновление записей в таблице
- Просмотр выборки из таблицы
- Удаление записей из таблицы
- Закрытие соединения
- Общий текст процедуры
1. Постановка задачи
Итак, имеется SQL-сервер с адресом WIN2012\TEST_SQL. Для подключения используется имя входа SQL-сервера UserDB с паролем Pass123456.
На сервере размещена база данных с именем TestDB. В базе имеется таблица с именем Table_1, в которой 3 столбца:

Изначально таблица пустая:

У пользователя UserDB есть права на чтение и запись в базу данных TestDB. В данном случае пользователь является владельцем указанной базы данных.

Требуется научиться записывать в базу данных и читать из базы данных из 1С при помощи прямых запросов к SQL-серверу.
2. Подключение к SQL-серверу
Весь приведенный ниже код может работать как на клиенте, так и на сервере. Главное чтобы был доступен COM-объект «ADODB» (подробнее о данной библиотеке можно прочитать, например, здесь). Также с клиента (или с сервера, смотря где выполняется код) должен быть доступен указанный SQL-сервер (настроено правило в Брандмауере для возможности внешнего подключения). Код приводится совсем простой, для понимания с чего вообще начинать разработчику, который раньше с этим не сталкивался.
Итак, для подключения необходимо создать COM-объект «ADODB». Для этого выполняется код 1С:
&НаКлиенте Процедура ВыполнитьОбработку(Команда) //Инициализация переменных ИмяСервераSQL = "WIN2012\TEST_SQL"; ПользовательSQL = "UserDB"; ПарольSQL = "Pass123456"; БазаДанныхSQL = "TestDB"; ТаблицаSQL = "Table_1"; ///////////////////////////////////////// //Подключение к SQL-серверу Попытка Соединение = Новый COMОбъект("ADODB.Connection"); Команда = Новый COMОбъект("ADODB.Command"); Выборка = Новый COMОбъект("ADODB.RecordSet"); Соединение.ConnectionString = "driver=;" + "server color: red;">+ИмяСервераSQL+";"+ "uid color: red;">+ПользовательSQL+";"+ "pwd color: red;">+ПарольSQL+";"+ "database color: red;">+БазаДанныхSQL+";"; Соединение.ConnectionTimeout = 30; Соединение.CommandTimeout = 600; //Открытие соединение Соединение.Open(); Команда.ActiveConnection = Соединение; Сообщить("Успешное подключение!"); Исключение Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; КонецПроцедуры
Результат работы в 1С:Предприятии:

Теперь, в общем то, можно выполнять любой запрос SQL через данный COM-объект. Посмотрим как это делать на самых распространенных примерах.
3. Добавление записей в таблицу
Теперь добавим новую строку в нашу пока еще пустую таблицу. Для этого необходимо выполнить код:
///////////////////////////////////////// //Добавляем запись в таблицу ТекДата = ТекущаяДата(); ТекСтрока = "Запись строки"; ТекЧисло = 123456; //Приобразуем данные Если НЕ ЗначениеЗаполнено(ТекДата) Тогда //Для пустой даты необходимо отправлять 01.01.1753 ТекДата = Дата(1753,1,1); КонецЕсли; ТекЧисло = Формат(ТекЧисло,"ЧГ color: red;">); //Удаляем пробелы ТекстТекущейИнструкции = "INSERT INTO "+ТаблицаSQL+" |([C_DateTime], [C_Char], [C_Numeric]) |VALUES ('"+ТекДата+"', N'"+ТекСтрока+"', '"+ТекЧисло+"')"; Попытка Соединение.Execute(ТекстТекущейИнструкции,,128); Сообщить("Запись добавлена!"); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки;
Смотрим результат и видим, что строка появилась в таблице:

4. Обновление записей в таблице
Теперь попробуем обновить все записи в таблице со значением C_Numeric=123456. Для этого выполняем код:
///////////////////////////////////////// //Обновляем записи в таблице с C_Numeric = 123456 ТекЧисло = 123456; ТекДатаНовая = Дата(1,1,1); ТекСтрокаНовая = "Обновленная запись строки"; //Приобразуем данные Если НЕ ЗначениеЗаполнено(ТекДатаНовая) Тогда //Для пустой даты необходимо отправлять 01.01.1753 ТекДатаНовая = Дата(1753,1,1); КонецЕсли; ТекЧисло = Формат(ТекЧисло,"ЧГ color: red;">); //Удаляем пробелы ТекстТекущейИнструкции = "UPDATE "+ТаблицаSQL+" |SET | [C_Char] = N'"+ТекСтрокаНовая+"', | [C_DateTime] = '"+ТекДатаНовая+"' |WHERE [C_Numeric]='"+ТекЧисло+"'"; Попытка Соединение.Execute(ТекстТекущейИнструкции,,128); Сообщить("Запись обновлена!"); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки;
Проверяем, что запись обновилась:

5. Просмотр выборки из таблицы
Писать и обновлять записи в таблице мы научились. Теперь посмотрим как просматривать выборку из запроса с SQL-сервера:
///////////////////////////////////////// //Читаем записи ТекстИнструкции = "SELECT | [C_DateTime], [C_Char], [C_Numeric] |FROM "+ТаблицаSQL; Попытка Команда.CommandText = ТекстИнструкции; Выборка = Команда.Execute(); Если Выборка.BOF = Ложь Тогда Выборка.MoveFirst(); Пока Выборка.EOF = Ложь Цикл Сообщить("[C_DateTime] color: red;">+Дата(Выборка.Fields("C_DateTime").Value) +", [C_Char] color: red;">+СокрЛП(Выборка.Fields("C_Char").Value) +", [C_Numeric] color: red;">+Число(Выборка.Fields("C_Numeric").Value)); Выборка.MoveNext(); КонецЦикла; КонецЕсли; Исключение Сообщить(ОписаниеОшибки()); КонецПопытки;
Результат в предприятии:

6. Удаление записей из таблицы
Для удаления всех записей в таблице со значением C_Numeric=123456 выполняем код:
///////////////////////////////////////// //Удаляем записи в таблице с C_Numeric = 123456 ТекЧисло = 123456; ТекЧисло = Формат(ТекЧисло,"ЧГ color: red;">); //Удаляем пробелы ТекстТекущейИнструкции = "DELETE FROM "+ТаблицаSQL+" |WHERE [C_Numeric]='"+ТекЧисло+"'"; Попытка Соединение.Execute(ТекстТекущейИнструкции,,128); Сообщить("Запись удалена!"); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки;
Проверяем, что записей в таблице не осталось:

7. Закрытие соединения
Ну и после выполнения всех необходимых действий необходимо закрыть соединение с SQL-сервером. Для этого достаточно вызвать метод Close() созданного COM-объекта:
///////////////////////////////////////// //Закрытия соединения Попытка Соединение.Close(); Сообщить("Соединение закрыто!"); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки;
8. Общий текст процедуры
Общий текст всей процедуры получился следующий:
&НаКлиенте Процедура ВыполнитьОбработку(Команда) //Инициализация переменных ИмяСервераSQL = "WIN2012\TEST_SQL"; ПользовательSQL = "UserDB"; ПарольSQL = "Pass123456"; БазаДанныхSQL = "TestDB"; ТаблицаSQL = "Table_1"; ///////////////////////////////////////// //Подключение к SQL-серверу Попытка Соединение = Новый COMОбъект("ADODB.Connection"); Команда = Новый COMОбъект("ADODB.Command"); Выборка = Новый COMОбъект("ADODB.RecordSet"); Соединение.ConnectionString = "driver=;" + "server color: red;">+ИмяСервераSQL+";"+ "uid color: red;">+ПользовательSQL+";"+ "pwd color: red;">+ПарольSQL+";"+ "database color: red;">+БазаДанныхSQL+";"; Соединение.ConnectionTimeout = 30; Соединение.CommandTimeout = 600; //Открытие соединение Соединение.Open(); Команда.ActiveConnection = Соединение; Сообщить("Успешное подключение!"); Исключение Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; ///////////////////////////////////////// //Добавляем запись в таблицу ТекДата = ТекущаяДата(); ТекСтрока = "Запись строки"; ТекЧисло = 123456; //Приобразуем данные Если НЕ ЗначениеЗаполнено(ТекДата) Тогда //Для пустой даты необходимо отправлять 01.01.1753 ТекДата = Дата(1753,1,1); КонецЕсли; ТекЧисло = Формат(ТекЧисло,"ЧГ color: red;">); //Удаляем пробелы ТекстТекущейИнструкции = "INSERT INTO "+ТаблицаSQL+" |([C_DateTime], [C_Char], [C_Numeric]) |VALUES ('"+ТекДата+"', N'"+ТекСтрока+"', '"+ТекЧисло+"')"; Попытка Соединение.Execute(ТекстТекущейИнструкции,,128); Сообщить("Запись добавлена!"); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; ///////////////////////////////////////// //Обновляем записи в таблице с C_Numeric = 123456 ТекЧисло = 123456; ТекДатаНовая = Дата(1,1,1); ТекСтрокаНовая = "Обновленная запись строки"; //Приобразуем данные Если НЕ ЗначениеЗаполнено(ТекДатаНовая) Тогда //Для пустой даты необходимо отправлять 01.01.1753 ТекДатаНовая = Дата(1753,1,1); КонецЕсли; ТекЧисло = Формат(ТекЧисло,"ЧГ color: red;">); //Удаляем пробелы ТекстТекущейИнструкции = "UPDATE "+ТаблицаSQL+" |SET | [C_Char] = N'"+ТекСтрокаНовая+"', | [C_DateTime] = '"+ТекДатаНовая+"' |WHERE [C_Numeric]='"+ТекЧисло+"'"; Попытка Соединение.Execute(ТекстТекущейИнструкции,,128); Сообщить("Запись обновлена!"); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; ///////////////////////////////////////// //Читаем записи ТекстИнструкции = "SELECT | [C_DateTime], [C_Char], [C_Numeric] |FROM "+ТаблицаSQL; Попытка Команда.CommandText = ТекстИнструкции; Выборка = Команда.Execute(); Если Выборка.BOF = Ложь Тогда Выборка.MoveFirst(); Пока Выборка.EOF = Ложь Цикл Сообщить("[C_DateTime] color: red;">+Дата(Выборка.Fields("C_DateTime").Value) +", [C_Char] color: red;">+СокрЛП(Выборка.Fields("C_Char").Value) +", [C_Numeric] color: red;">+Число(Выборка.Fields("C_Numeric").Value)); Выборка.MoveNext(); КонецЦикла; КонецЕсли; Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; ///////////////////////////////////////// //Удаляем записи в таблице с C_Numeric = 123456 ТекЧисло = 123456; ТекЧисло = Формат(ТекЧисло,"ЧГ color: red;">); //Удаляем пробелы ТекстТекущейИнструкции = "DELETE FROM "+ТаблицаSQL+" |WHERE [C_Numeric]='"+ТекЧисло+"'"; Попытка Соединение.Execute(ТекстТекущейИнструкции,,128); Сообщить("Запись удалена!"); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; ///////////////////////////////////////// //Закрытия соединения Попытка Соединение.Close(); Сообщить("Соединение закрыто!"); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецПроцедуры
Результат работы в 1С:Предприятии:

Помогла ли вам данная статья?
Смотрите также:
Правила доработки типовых конфигураций 1С В данном вебинаре я расскажу о применяемых в нашей компании правилах и приемах доработки типовых конфигураций 1С для облегчения их дальнейшей поддержки и обновления. В видео использованы материалы…
Установка 1С:Предприятие 7.7 на Microsoft SQL Server 2008 R2 Официально, платформа 1С:Предприятие 7.7 работает только с MS SQL Server 2000. Но с помощью небольших манипуляций можно организовать стабильную работу и с последней, на момент написания статьи, версий Microsoft SQL…
Если бы 1С-ники делали трубы Небольшая зарисовка на тему, какие были бы сливные трубы, если бы их делали 1С-ники.
Подключение к MS SQL Server из скрипта PowerShell
Подключение к базе данных из скрипта PowerShell и выполнение запроса к базе можно сделать несколькими способами. Приведу 2 из них, которые на мой взгляд самые простые.
1-й способ. Подключение к базе данных MS SQL Server с помощью класса SqlConnection
Класс SqlConnection из библиотеки классов .NET Framework позволяет выполнять операции подключения и запросов очень легко. А учитывая, что .NET Framework идет по-умолчанию в Windows начиная с 7-й версии, можно считать, что его можно использовать практически везде.
Подключение к MS SQL Server с учетными данными пользователя, вошедшего в Windows, т.е. так называемая Windows-авторизация, выполняется так:
$SqlServer = "адрес_сервера"; $SqlCatalog = "база_данных"; $SqlConnection = New-Object System.Data.SqlClient.SqlConnection $SqlConnection.ConnectionString = "Server=$SqlServer; Database=$SqlCatalog; Integrated Security=True" $SqlConnection.Open()
Подключение к MS SQL Server со стандартной авторизацией, т.е. по логину и паролю в базе данных:
$SqlServer = "адрес_сервера"; $SqlCatalog = "база_данных"; $SqlLogin = "пользователь"; $SqlPassw = "пароль" $SqlConnection = New-Object System.Data.SqlClient.SqlConnection $SqlConnection.ConnectionString = "Server=$SqlServer; Database=$SqlCatalog; User Password=$SqlPassw;" $SqlConnection.Open()
Выполнить sql-запрос и обработать результаты теперь можно, например, таким способом:
$SqlCmd = $SqlConnection.CreateCommand() $SqlCmd.CommandText = "текст_sql-запроса" $objReader = $SqlCmd.ExecuteReader() while ($objReader.read()) < echo $objReader.GetValue(0) >$objReader.close()
Выполнить sql-запрос на изменение/добавление/удаление данных можно следующим образом:
$SqlCmd = $SqlConnection.CreateCommand() $SqlCmd.CommandText = "delete from version" $SqlCmd.ExecuteNonQuery() | Out-Null
В последней строке «Out-Null» используется для подавления вывода результатов выполнения запроса. Дело в том, что для запросов типа INSERT, UPDATE, DELETE команда ExecuteNonQuery возвращает количество обработанных записей, а в остальных случаях возвращает «-1». Поэтому, если происходит массовое изменение данных, то вывод лучше подавить.
Закрыть подключение к базе можно командой:
$SqlConnection.close()
Как видите, всё довольно просто.
2-й способ. Подключение к базе данных MS SQL Server с помощью библиотеки ADO
Библиотека ADO (Microsoft ActiveX Data Object) позволяет выполнять подключение не только к базам MS SQL Server, но и ко множеству других видов баз данных. Она очень удобна в использовании и универсальна. Написав программу для работы с одним типом базы данных, вам не придется переделывать всю программу для другой базы, а всего-лишь сделать другую строку подключения к базе. Приведу несколько примеров работы с базой данных MS SQL Server в PowerShell.
Подключение к базе данных:
$Server = "имя_сервера_или_ip_адрес" $BaseName = "название_базы_данных" $BaseLogin = "пользователь_для_подключения_к_БД" $BasePassw = "пароль_для_подключения_к_БД" $connection = New-Object -com "ADODB.Connection" $ConnectionString = "Provider=SQLOLEDB.1; Data Source=$Server; Initial Catalog=$BaseName; User Password=$BasePassw;" $connection.Open($ConnectionString)
Выполнение sql-запроса и обработка результатов:
$recordSet = $connection.Execute("текст_sql-запроса") While (-not $recordSet.EOF) < echo $recordSet.Fields.Item("FieldName").Value $recordSet.MoveNext() >$connection.Close()Выполнение sql-запроса на изменение/добавление данных:
$connection.Execute("текст_sql-запроса")Думаю, приведенных 2-х способов вполне достаточно, чтобы начать работать с БД SQL Server из скриптов PowerShell, читать данные, менять их и добавлять. В следующей статье будет рассмотрено подключение к базе данных Access.
Подключение к базе данный MS SQL Server из Visual Studio Code

22.12.2022

itpro

SQL Server

Комментариев пока нет
Для управления базами данных на Microsoft SQL Server вместо SQL Server Management Studio (SSMS) можно использовать легкий кроссплатформенный редактор Visual Studio Code (VS Code). Visual Studio Code с расширением mssql позволяет администраторам и разработчикам управлять базами данных, таблицами, хранимыми процедурами, выполнять Transact-SQL (T-SQL) запросы к on-prem базам данных MS SQL Server и Azure SQL Database.
Если на вашем компьютере уже установлен VSCode, вам нужно скачать и установить расширение mssql (https://marketplace.visualstudio.com/items?itemName=ms-mssql.mssql)
-
Перейдите в раздел Extension ( Ctrl+Shift+X ), вбейте в поиск mssql ;
- Установите расширение mssql for Visual Studio Code ;

- После установке в левой панели VS Code появится значок расширения SQL Server. Выберите его ( Ctrl+Alt+D ).

Попробуем теперь из VS Code удалено подключиться к хосту установленным MS SQL Server 2019:
-
Щелкните по строке Add connection и укажите имя сервера и инстанса MS SQL ( hostname\instance_name );
Default экземпляр SQL Server (MSSQLSERVER) слушает на статическом порту TCP 1433. При подключении к такому инстансу не нужно указывать порт подключения. Если вы изменили порт Microsoft SQL Server, нужно указать его после двоеточия: hostname:1430
При подключении с помощью учетной записи MSSQL может появиться ошибка:
mssql: Error 18452: Login failed. The login is from an untrusted domain and cannot be used with Integrated authentication.

В этом случае проверьте, что в настройка MSSQL на вкладке Security выбран режим аутентификации SQL Server and Windows Authentication mode.
- Укажите имя пользователя и пароль. VSCode предложит вам сохранить учетные данные для подключения;
- После подключения, вы увидите список баз данных и других объектов. Вы можете развернуть любую базу и увидеть список таблиц, представлений, процедур и т.д.

- Теперь вы можете выполнять различные T-SQL запросы из окна редактора VS Code. Для выполнения кода нажмите кнопку в интерфейсе или сочетание CTRL+SHIFT+E . Результаты запроса появится в соседнем окне;

- Вы можете экспортировать таблицу с результатами SQL запроса прямо из VS Code в форматы CSV, Excel, и JSON.
В VS code для кода T-SQL поддерживается весь функционал IntelliSense: работают подсказки, автодополнение команд, цветовые схемы для разных объектов и т.д. Также Visual Studio Code поддерживает функцию интеллектуальных фрагментов SQL кода для быстрой генерации типовых SQL запросов.

При этом строка подключения к MSSQL сохраняется в JSON файл. Вы можете просмотреть его содержимое через File-> Preferences -> Settings -> Extensions -> MSSQL configuration -> Edit in settings.json.Здесь вы можете получить информацию о ваших подключениях к MSSQL.
