none
Procedure que "chama" método ou classe RRS feed

  • Pergunta

  • Olá a todos!!!

    Estou com um problema e não consigo encontrar a solução, vou descrever-lhes rapidamente como está meu ambiente:

    Tenho que criar uma trigger que ao ser inserido um registro em uma tabela do SQL Server, ela crie um registro em um tabela de uma banco de dados em Progress. O problema é que o ODBC do Progress não funciona a instrução INSERT no SQL Server. Eu só consigo fazer INSERT no banco progress via c#.

    No caso há como eu dentro de uma procedure ou trigger do SQL Server "chamar" uma classe c# passando os parametros? se não houver como, alguem me sugere alguma outra solução para este caso?

    Desde ja agradeço.

    quinta-feira, 5 de julho de 2012 00:33

Respostas

  • Boa Noite,

    O SQL Server dispõe da possibilidade de fazer procedures em CLR com o uso do C#, VB.NET ou qualquer linguagem suportada pelo Framework .NET (2.0 e superiores). Entretanto, ainda que você possa codificar a procedure em C# (e assim chamar o método) há alguns inconvenientes. O primeiro é naturalmente o desempenho. Se via TSQL, já será lento aguardar que o INSERT no Progress seja concluído, chamar uma trigger que chama algo em C# para instanciar uma conexão será ainda mais lento com certeza.

    Outro ponto é que se você precisa fazer o INSERT no Progress de forma transacionada, ou seja, se o INSERT no Progress falhar o INSERT do SQL Server precisa ser revertido, dificilmente conseguirá escapar do problema com uma procedure CLR. Se esse for o caso, vejo duas alternativas:

    - Eleve tudo para a camada de aplicação e transacione o acesso às duas fontes de dados (acredito que o namespace system.transactions possa lhe ajudar). Transacione e em caso de erro reverta.

    - Verifique com o fabricante do driver suporta transações via provider OLEDB para que o Linked Server possa fazê-lo (se o Provider funcionar, então via Linked Server tem de funcionar)

    Por fim, se a necessidade não é síncrona e o DELAY é permitido, considere exportar os dados do SQL Server para o Progress de tempos em tempos ou ainda utilize uma outra solução como mensageria (na aplicação ou no Service Broker do SQL Server).

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos:http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível

    • Sugerido como Resposta Roberson Naves quinta-feira, 5 de julho de 2012 20:28
    • Marcado como Resposta Heloisa Pires terça-feira, 10 de julho de 2012 14:22
    quinta-feira, 5 de julho de 2012 02:04