Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Podczas aktualizacji tabeli uruchom akcję w moim kodzie .NET

Musisz zadać kilka pytań.

Czy nie chcesz żadnej logiki biznesowej na poziomie bazy danych? Oczywiście może to zrobić wyzwalacz bazy danych (wykonać jakąś akcję, gdy wartość zostanie zmieniona, nawet jeśli jest to tylko bardzo konkretna wartość).

Widziałem kilka systemów, które są ciężkie od wyzwalania db. Ich „logika” jest głęboko i silnie powiązana z platformą db. Ma to pewne zalety, ale większość ludzi prawdopodobnie stwierdziłaby, że wady są zbyt duże (sprzężenie, brak enkapsulacji/wielokrotnego użytku).

W zależności od tego, co robisz i swoich skłonności, możesz:

  1. Upewnij się, że wszystkie obiekty DAO/BusinessFunctoin wywołują Twoje „zdarzenie” object.function robić to, co chcesz, gdy nastąpi pewna zmiana wartości.

  2. Użyj wyzwalacza, aby wywołać swoje „zdarzenie” object.function gdy nastąpi pewna zmiana wartości.

  3. Twój wyzwalacz robi wszystko.

Osobiście skłaniałbym się ku Opcji 2, w której masz minimalny wyzwalacz (który po prostu uruchamia wywołanie zdarzenia do twojego object.function ), aby nie powiązać bazy danych z logiką biznesową.

Opcja 1 jest w porządku, ale może być trochę kłopotliwa, chyba że masz bardzo wąski zestaw BF/DAO, które komunikują się z tym polem db table.field, które chcesz oglądać.

Opcja 3 jest najgorszym wyborem, ponieważ łączysz logikę z bazą danych i zmniejszasz jej dostępność do warstwy logiki biznesowej.

Mając to na uwadze, oto kilka informacji, jak to zrobić za pomocą Opcji 2:

Korzystając z tego przykładu z MSDN:http://msdn.microsoft.com/en -us/biblioteka/938d9dz2.aspx .

To pokazuje, jak uruchomić wyzwalacz i wywołać obiekt CLR w projekcie.

Skutecznie w swoim projekcie tworzysz wyzwalacz i każesz mu wywołać twoją klasę.

Zwróć uwagę na wiersz:[SqlTrigger(Name="UserNameAudit", Target="Users", Event="FOR INSERT")]

Definiuje to, kiedy kod zostanie uruchomiony, a następnie w kodzie możesz sprawdzić swoje ograniczenie, a następnie uruchomić resztę metody (lub nie) lub wywołać inny object.method w razie potrzeby.

Podstawowa różnica między przejściem bezpośrednio do bazy danych a dodaniem wyzwalacza polega na tym, że zapewnia dostęp do wszystkich obiektów w projekcie po ich wspólnym wdrożeniu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyświetl listę kont skojarzonych z profilem poczty bazy danych w SQL Server

  2. Utwórz datę z dnia, miesiąca i roku za pomocą T-SQL

  3. Jak znaleźć wszystkie zależności tabeli na serwerze sql

  4. Jak w programie SQL Server wygenerować identyfikator klucza podstawowego automatycznego przyrostu, który składa się z roku , znaku specjalnego i numeru serii sekwencyjnej?

  5. SqlFunction nie otwiera połączenia kontekstowego pomimo obecności DataAccessKind.Read