Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Приложение C# + SQL Server 2008


Автор: Areostar 22.4.2011, 15:18
Пишу приложение с использованием SQL Server 20008. для того чтоб приложение можно было устанавить на другие компы, во время инстоляции прогримма должна выполнить определённый SQL-скрипт. Скрипт у меня уже есть. Но вот как прописать впроге исполнение скрипта, причём только один раз при установке программы!?


     Подскажите пожалуйста!

Автор: A5uKa 22.4.2011, 15:47
ExecuteNonQuery ?

Автор: Areostar 22.4.2011, 16:26

 ЗА функцию спасибо! А вот вак сделать чтоб она выпольнялась только при установке!?

Автор: chip_and_dayl 22.4.2011, 17:11
Скрипт я так понимаю создает базу!?! Так в чем проблема сделать проверку на наличие соответствующей базы?

Добавлено через 1 минуту и 45 секунд
Еще как вариант можно скрипт запускать всегда, просто в теле скрипта можно поставить проверку, если база существует то отменяется выполнение скрипта. Но тут есть свой минус, скрип всегда выполняется

А вообще такое лучше отделять от приложения. Или переложить на инсталятор или на отдельную утилиту

Автор: jonie 22.4.2011, 20:36
в ExecuteNonQuery надо передавать один батч (батчи по умолчанию словом GO разделяются). Сам он ничего не разделит, т.е. еще надо написать batchParser.

Если есть желание то можете мой проектик "допилить" https://bitbucket.org/jonie/sqlinstaller/overview , хотя он был вроде как самостоятельный, и там C++

Автор: Areostar 23.4.2011, 07:52
Цитата

еще надо написать batchParser.


   А по подробнее об этом рассказать можете?

Автор: jonie 23.4.2011, 11:33
А что там рассказывать? По приведенной мной ссылке есть написанной мной же парсер батчей.
https://bitbucket.org/jonie/sqlinstaller/src/0303f07a02f7/BatchParserLib/BatchScript.h

и он, кстати, более корректный, нежели в MSSQL 2008 например (не парсит тамшний парсер некоторые вещи, например GO/*commented*/) ....

только у меня НЕ умеет парсить конструкции GO integer, они и не поддерживаются уже в 2008-ом парсере...

Автор: Areostar 24.4.2011, 09:05
На счёт вашего исходника! Что-то немогу понять как передавать туда содержимое файла(скрипт) и получать обработанные куски на исполнение!?

И ещё если разделить скрипт на запросы и вбить в код - это будет работать!?

Автор: jonie 24.4.2011, 09:12
а рядом чО, не судьба посмотреть?)
Код

CString script = L"create table blablabla .....";

                                CBatchScript parser(script);
                                for(CBatchScript::script_iterator scriptIt = parser.begin(); scriptIt!=parser.end(); ++scriptIt) {
                                        executedScript = *scriptIt;
                                        if(executedScript.Trim().GetLength()==0) continue;

                                        conn->Execute(_bstr_t(executedScript), &vtMissing, ADODB::adOptionUnspecified);
                                        //Sleep(200);
                                }

Автор: Areostar 24.4.2011, 09:24
 а на счёт второй части вопроса что скажете!? Глупость или можно попробывать! smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)