2010-06-17 4 views
1

У меня есть бизнес-логика приложения, подобная документообороту, в библиотеке классов C#, но в конце каждого месяца необходимо вызвать определенный процесс в библиотеке, Я думал, что идеальным механизмом для вызова этого запланированного выполнения является использование агента сервера Sql (желательно sql-job, хотя я открыт, чтобы даже перейти в SSIS-ад, если это абсолютно необходимо), но возникает вопрос, как я могу вызвать процесс библиотека приложений из работы sql?SQL Server CLR для внедрения бизнес-логики и выполнения расписания с помощью агента SQL Server

библиотека приложения также используется из asp.net страниц, поэтому, как правило, имеет контекст веб-приложения (web.config) с сконфигурированных входных и выходных баз данных

Я понимаю, что шаги более или менее

1) встроить библиотеку классов в сборке CLR в SQL Server, сильный ключ знак и развернуть его 2) вызвать библиотеку

вещи я не ясно, при развертывании такой сборки CLR, что происходит с контекст веб-приложения? как я точно пойду для развертывания CLR с подходящим app.config? мне нужно повторно развертывать CLR, если мне нужно изменить строки подключения?

Я также не уверен, что CLR необходимо подключиться к базе данных, которая вызывает его (для чтения и записи таблицы), но я предполагаю, что нужно быть осторожным, чтобы избежать самозапускания и такого рода вещь.

+0

нет идей по этому вопросу? – lurscher

ответ

1

Во-первых, этот пост заканчивается в «использовать SSIS» :-P

До тех пор, как ваша библиотека содержит ссылки на System.Web.dll Я не думаю, что вы будете иметь возможность зарегистрировать его в SQL Сервер как сборка SQLCLR. Сборники SQLCLR очень ограничены и не могут содержать ссылок.

Вы можете переместить интерфейсные части бизнес-логики в отдельную библиотеку уровня представления. Это, как правило, лучшее решение, чем смешивание бизнес-логики и классов представления, таких как контекст веб-приложения. После этого вы можете попытаться развернуть свою сборку на SQL Server.

Теперь вы можете создать вторую библиотеку SQLCLR, содержащую хранимые процедуры .NET, которые организуют ваши бизнес-объекты.

Однако, я действительно не вижу преимущества SQLCLR. Это потребует огромных изменений в исходном коде и вызывает несколько ограничений для всего вашего приложения.

Мои личные предпочтения будут Либо используйте пакет SSIS. Здесь вы можете сослаться на любую другую DLL и использовать ее функциональность. Или напишите простое консольное приложение .NET, которое будет запущено SQL Agent. В обоих случаях реализация почти равна.

SQLCLR специально разработан для обработки задач, специфичных для конкретной базы данных, которые попадают в стенку возможных (и наводящих) функций T-SQL.

+0

Действительно, вы можете развернуть System.Web и многие другие библиотеки FCL для SQL, но только 2.0/3.0/3.5 - not 4.0 – abatishchev

+0

отличный ответ, спасибо. SSIS это тогда – lurscher