Как я реализую исключения с nestable try-catch-finally оператором с сообщениями в C

Вот функция, которую я использую для выполнения команд 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()
}
5
задан nubela 22 November 2009 в 16:31
поделиться

3 ответа

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.

4
ответ дан 14 December 2019 в 01:10
поделиться

Для вложения: кадр стека текущих блоков 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 ++?

3
ответ дан 14 December 2019 в 01:10
поделиться

Ну, вы действительно не можете реализовать исключения в C, поскольку они не поддерживаются языком. Лучшее, что вы можете сделать, это эмулировать их с помощью setjmp и longjmp и некоторых дьявольски умных макросов.

Быстрый поиск позволяет найти эти ссылки, которые могут быть полезны вам:

2
ответ дан 14 December 2019 в 01:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: