Публикации
Публикации  »  Windows PowerShell

Подключение к 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 ID=$SqlLogin; 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 ID=$BaseLogin;
                     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.

 

Категория: Windows PowerShell

Комментарии к статье:

Пока комментариев нет, ваш будет первым ;)

Добавить комментарий: