|
|
|
Возврат ошибки из ХП
|
|||
|---|---|---|---|
|
#18+
У меня есть ХП изменения строки. Как узнать, если строка с заданным ID была уже удалена другим пользователем? А то в данном случае после вызова ХП у меня не вылезает никаких ошибок, и программа продолжает функционировать как и раньше, хотя строки на сервере уже давно нету. create procedure ComponentUpdate ( @ID int, @field1 nvarchar(50) ) as update table1 set field1=@field1 where ID=@ID GO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2005, 00:06 |
|
||
|
Возврат ошибки из ХП
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2005, 09:00 |
|
||
|
Возврат ошибки из ХП
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответ, я тоже уже так сделал. Вопрос на будущее: А что если вдруг редактирование строки невозможно из-за того, что она участвует в транзакции другого пользователя с уровнем изоляции, который запрещает обращение к строке (редактирование)? Хотя строка на самом деле существует, raiserror то все равно будет вызван. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2005, 12:30 |
|
||
|
Возврат ошибки из ХП
|
|||
|---|---|---|---|
|
#18+
>>Хотя строка на самом деле существует, raiserror то все равно будет вызван. нет, не будет вызван, ваша транзакция будет ждать окончания той, что заблокировало строку, и потом благополучно ее обновит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2005, 14:07 |
|
||
|
Возврат ошибки из ХП
|
|||
|---|---|---|---|
|
#18+
Спасибо. Но допустим я запускаю такую команду (ХП) в приложении. try { .. myConnection.Open(); myCommand.ExecuteNonQuery() myConnection.Close(); .. } catch (SqlException ex1) { //Как мне вот здесь узнать, что был вызван именно RAISERROR на сервере, //а не какая-то другая ошибка (например, сервер не доступен)? } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2005, 16:40 |
|
||
|
Возврат ошибки из ХП
|
|||
|---|---|---|---|
|
#18+
Или допустим, как при удалении строки через ХП узнать была она уже удалена или ее невозможно удалить из-за ограниченний внешних ключей? Это очень важно! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2005, 17:02 |
|
||
|
Возврат ошибки из ХП
|
|||
|---|---|---|---|
|
#18+
SqlException exc exc.Errors[0].Message // и другие св-ва посмотрите в MSDN SqlException и SqlError ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2005, 19:52 |
|
||
|
Возврат ошибки из ХП
|
|||
|---|---|---|---|
|
#18+
в блоке catch отлавливаете текст ошибки, и по нему решаете, что там делать дальше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2005, 21:24 |
|
||
|
Возврат ошибки из ХП
|
|||
|---|---|---|---|
|
#18+
А допустим я вставляю в дочерную таблицу значение. А в главной таблице строка была уже удалена. Тогда ошибка будет выглядеть примерно так: INSERT statement conflicted with COLUMN FOREIGN KEY constraint 'FK_SlaveTable_MasterTable'. The conflict occurred in database 'KCL', table 'KCL_MasterTable', column 'ID'. The statement has been terminated. Мне что, придется прописывать такую строку в catch, чтобы не спутать его с другой ошибкой (сервер не доступен). Может есть какие-то сокращенные коды ошибок? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2005, 22:03 |
|
||
|
Возврат ошибки из ХП
|
|||
|---|---|---|---|
|
#18+
Зачем-же всю строку, имя ограничения, вызвавшего ошибку будет уникальным, к примеру, в данном случае можно определить, содержит-ли строка с ошибкой текст 'FK_SlaveTable_MasterTable', выглядеть это может например так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2005, 09:19 |
|
||
|
|

start [/forum/topic.php?fid=17&msg=33455922&tid=1353506]: |
0ms |
get settings: |
6ms |
get forum list: |
17ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
44ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 192ms |
| total: | 337ms |

| 0 / 0 |
