Вот функция, которую я использую для выполнения команд sql. Просто необходимо изменить $sqlCommand. CommandText к названию Вашего sproc и $SqlCommand. CommandType к CommandType. StoredProcedure.
function execute-Sql{
param($server, $db, $sql )
$sqlConnection = new-object System.Data.SqlClient.SqlConnection
$sqlConnection.ConnectionString = 'server=' + $server + ';integrated security=TRUE;database=' + $db
$sqlConnection.Open()
$sqlCommand = new-object System.Data.SqlClient.SqlCommand
$sqlCommand.CommandTimeout = 120
$sqlCommand.Connection = $sqlConnection
$sqlCommand.CommandText= $sql
$text = $sql.Substring(0, 50)
Write-Progress -Activity "Executing SQL" -Status "Executing SQL => $text..."
Write-Host "Executing SQL => $text..."
$result = $sqlCommand.ExecuteNonQuery()
$sqlConnection.Close()
}
Dave Hanson has already done a really nice package of exception macros as part of his excellent book C Interfaces and Implementations. You could either use the code wholesale or learn from his techniques. For anyone who does a fair amount of C programming, the book is worth buying—it will change the way you change about C programming, and it will show you how to do object-oriented design in C.
Для вложения: кадр стека текущих блоков try / catch.
Ваша попытка будет использовать setjmp для сохранения в jmpbuffer (я думаю). Если вы сделали попытку, и, следовательно, теперь находятся в области действия блока try и нажимают еще одну попытку, тогда вы хотите сохранить существующий буфер jmpbuffer, а также создать новый - Push - и, поймав, вы долго возвращаетесь к точке самой последней попытки, следовательно Закрываешь последний jmpbuffer. Так что я думаю, что стеклоподобная модель имеет смысл для вложенных try / catch.
Для реализации, я думаю, самый простой способ - зарезервировать массив jmpbuffers, тем самым ограничив глубину захвата попыток, но сохраняя простоту; Push and Pop просто требует, чтобы вы отслеживали индекс в этом массиве.
Для сообщений и другого содержимого исключения, зарезервированная область для «currentException».
Содержимое исключения. Будьте проще, определите структуру Exception. Массив char и int. Сохраняя это простым, но не слишком простым, зарезервируйте их массив, чтобы вы могли поддерживать цепочку.
Для броска вы разрешаете
throw ( "string", errcode )
, который просто обнуляет структуру массива и делает одну запись. И
catch ( exception )
Теперь можно заглянуть в массив и найти первую запись, а затем
throwChain ( "string", errcode)
Которая добавляет новое исключение в массив (если есть место, а если нет, то можно перетасовать массив в соответствии с каким-то правилом, например, FIFO)
Но я должен спросить, почему бы просто не использовать C ++?
Ну, вы действительно не можете реализовать исключения в C, поскольку они не поддерживаются языком. Лучшее, что вы можете сделать, это эмулировать их с помощью setjmp
и longjmp
и некоторых дьявольски умных макросов.
Быстрый поиск позволяет найти эти ссылки, которые могут быть полезны вам: