Как выполнить определенный блок кода в зависимости от параметра, передаваемого в функцию?

Как написать функцию Invoke-DB в Powershell, которая будет принимать переменную $sqlInsert и $sqlSelect в качестве параметров, а затем выполнять соответствующие методы $cmd.ExecuteNonQuery() или $cmd.ExecuteReader() в зависимости от переданного параметра?
  • 29 января 2024 г. 12:18
Ответы на вопрос 1
Чтобы выполнить определенный блок кода в зависимости от параметра, передаваемого в функцию, вы можете использовать конструкцию `if` или `switch` в PowerShell. Напишем функцию `Invoke-DB`, которая принимает параметры `$sqlInsert` и `$sqlSelect` и выполняет соответствующие методы, основываясь на типе SQL запроса (SELECT или INSERT). 

```powershell
function Invoke-DB {
    param (
        [string]$ConnectionString,
        [string]$sqlInsert,
        [string]$sqlSelect
    )
    
    # Создаем объект подключения к базе данных
    $connection = New-Object System.Data.SqlClient.SqlConnection
    $connection.ConnectionString = $ConnectionString
    $connection.Open()
    
    # Создаем команду для выполнения
    $cmd = $connection.CreateCommand()

    if ($sqlInsert) {
        # Если предоставлен SQL-запрос для вставки данных
        $cmd.CommandText = $sqlInsert
        $cmd.ExecuteNonQuery() # Выполняем запрос к базе
    } elseif ($sqlSelect) {
        # Если предоставлен SQL-запрос для выборки данных
        $cmd.CommandText = $sqlSelect
        $reader = $cmd.ExecuteReader() # Выполняем запрос к базе
        # Далее, можно обработать данные, полученные из ридера
        while ($reader.Read()) {
            # Здесь можно что-то сделать с данными из ридера
        }
        $reader.Close() # Не забудьте закрыть ридер
    }

    $connection.Close() # Не забудьте закрыть подключение к базе данных
}
```

Как использовать эту функцию:

```powershell
# Подготовка строк подключения и SQL-запросов
$ConnectionString = "YourConnectionStringHere"
$sqlInsert = "INSERT INTO YourTable (Column1, Column2) VALUES (Value1, Value2)"
$sqlSelect = "SELECT * FROM YourTable"

# Вызов функции с SQL-запросом на вставку
Invoke-DB -ConnectionString $ConnectionString -sqlInsert $sqlInsert

# Вызов функции с SQL-запросом на выборку
Invoke-DB -ConnectionString $ConnectionString -sqlSelect $sqlSelect
```

При вызове функции `Invoke-DB`, установите только один из параметров `$sqlInsert` или `$sqlSelect`, в зависимости от того, какой тип операции вы хотите выполнить. Если предоставлена строка подключения и SQL-запрос на вставку, используется метод `ExecuteNonQuery`, если же задан SQL-запрос на выборку, то используется `ExecuteReader`.
Похожие вопросы