|
|
|
Автоматическое исполнение DDL скрипта
|
|||
|---|---|---|---|
|
#18+
Пишу тут курсовую, как всегда не успеваю в срок. Поэтому прошу совета, бывалым наверно известно решение. Скрипт для создания схемы БД генерится по шаблонам в текстовый файл. Надо запустить выполнение этого скрипта одной транзакцией из приложения, скажем по нажатии WinForm-кнопки, очень надо чтоб при откате в случае проблем вываливалось исключение или Event. По сему вопрос: кто как бы это организовал? Можно ли припаять sqlcmd к своему приложению, то есть использовать его для запуска ТА и получать от него внятно "Сделано" и/или "Облом" чтобы соответсвенно моё приложение было в курсе? Заранее благодарю. з.ы. прошу не бить если ответ уже лежит в форме, я сюда недавно начал заходить, а поиск принес ноль совпадений на запрос "автоматическое исполнение скрипта". За ссылку на соответсвующую ветку форума буду признателен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2007, 16:05 |
|
||
|
Автоматическое исполнение DDL скрипта
|
|||
|---|---|---|---|
|
#18+
Прочитать текстовый файл в строку и выполнить через SqlCommand? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2007, 16:11 |
|
||
|
Автоматическое исполнение DDL скрипта
|
|||
|---|---|---|---|
|
#18+
Было бы круто. Я думал что SQLCommand только одну команду может выполнить, а не весь скрипт махом... Пока что пытаюсь отладить скрипт через манагемент студию. Как отлажу попробую. Интерессно если поставить в начале скрипта SET IMPLICIT_TRANSACTIONS ON и в конце COMMIT TRANSACTION то SQLCommand тоже схавает и всё правильно сделает?.. зюыю приятно что здесь так быстро отвечают. ----------------------------------- Вот поезжайте в Лондон, станьте на углу в Сити и спросите Нахлобуча :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2007, 01:32 |
|
||
|
Автоматическое исполнение DDL скрипта
|
|||
|---|---|---|---|
|
#18+
Не следует забывать, что sql-скрипт может быть разбит на батчи, которые должны запускаться через SqlCommand отдельно. Разбиение на батчи как правило производится командой GO. ЗЫ: это если речь идёт о MSSQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2007, 12:18 |
|
||
|
Автоматическое исполнение DDL скрипта
|
|||
|---|---|---|---|
|
#18+
хмм, тогда наверно не подходит SqlCommand, то есть проблема в том что надо откатить весь скрипт если одна из команд не выполнена. (Имплицит-ТА тут наверно тоже не помогут, ведь это тоже отдельные ТА будут). Реально ли весь скрипт запихать в одну ТА (все CREATE TABLE и CREATE TRIGGER)? Или как откатить до начала скрипта, если скажем из 20-ти ТА сбилась последняя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2007, 17:27 |
|
||
|
Автоматическое исполнение DDL скрипта
|
|||
|---|---|---|---|
|
#18+
Алексей К ЗЫ: это если речь идёт о MSSQL. Таки-да о нём, 2005-том. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2007, 17:29 |
|
||
|
Автоматическое исполнение DDL скрипта
|
|||
|---|---|---|---|
|
#18+
Ur@хмм, тогда наверно не подходит SqlCommand, то есть проблема в том что надо откатить весь скрипт если одна из команд не выполнена. (Имплицит-ТА тут наверно тоже не помогут, ведь это тоже отдельные ТА будут). Реально ли весь скрипт запихать в одну ТА (все CREATE TABLE и CREATE TRIGGER)? Или как откатить до начала скрипта, если скажем из 20-ти ТА сбилась последняя?Не пойму, в чем проблема. Берём SqlCommand, и далее: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2007, 07:29 |
|
||
|
Автоматическое исполнение DDL скрипта
|
|||
|---|---|---|---|
|
#18+
Ur@Имплицит-ТА тут наверно тоже не помогут, ведь это тоже отдельные ТА будутМожно и через implicit. Транзакция действует на уровне соединения. зы: Рекомендую ознакомится с классами Transaction и TransactionScope. Это альтернатива "ручного" управления транзакциями в соединении MSSQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2007, 08:38 |
|
||
|
Автоматическое исполнение DDL скрипта
|
|||
|---|---|---|---|
|
#18+
проблема в том что я всё никак не могу начать сам пробовать, потому что занят больше писаниной - пора сдавать, а имплементировать потом. Алексей К большое спасибо, за Ваши ответы, в принципе именно так я и представлял. Просто как-то сомнения закрались. Особенно после Вашого замечания по поводу GO, в DB2 как-то точки с запятой хватало... Если скрипт без GO то можно в одну SqlCommand пихать что-ли или всё равно разбивать на отдельные? Пока что мне GO нужно только что бы CREATE TABLE от CREATE TRIGGER отделить. Иначе MSSQL не хочет: 'CREATE TRIGGER' must be the first statement in a query batch. Можно ли два скрипта - в одном таблицы, в другом триггеры, оба без разделения GO пускать вот так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. О TransactionScope буду читать, спасибо ещё раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2007, 21:06 |
|
||
|
Автоматическое исполнение DDL скрипта
|
|||
|---|---|---|---|
|
#18+
команды Create trigger, create procedure, create view должны быть в отдельных пакетах каждая. если у вас несколько триггеров, то на каждый триггер свой пакет. а вообще справку читайте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2007, 00:22 |
|
||
|
|

start [/forum/topic.php?fid=17&msg=34852244&tid=1352586]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
49ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
27ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 343ms |

| 0 / 0 |
