API do Microsoft SQL Server

1

Eu tenho uma idéia para um aplicativo, mas idealmente ele seria capaz de escrever uma espécie de mecanismo de "sql rewriting" para MSSQL (da mesma forma que os servidores HTTP podem ter módulos de "URL Rewriting") que poderiam se cruzar instruções sql antes que o servidor as manipule e execute algum outro código primeiro.

Isso é possível mesmo com o MSSQL ou precisarei buscar um método alternativo para alcançar meu objetivo?

    
por Nippysaurus 14.07.2009 / 01:51

5 respostas

1

A questão não é "como" fazer uma reescrita, mas "onde" você quer que a reescrita aconteça. Você disse que quer algo no IIS, mas isso não é possível no MSSQL. No IIS, você tem o pipeline de processamento de solicitações e há muitos pontos em que você pode inserir seu código personalizado nesse pipelene (por exemplo, criar sua própria extensão ISAPI, HTTPModule, eventos no Global.asax)

No SQL Server, não há pipeline SQL aberto para desenvolvedores. Quando a solicitação SQL chegou ao servidor SQL, não é possível reescrevê-la. Triggers BEFORE ou INSTEAD OF update / insert / delete não resolverão o problema se você quiser substituir o nome da tabela na consulta original porque, se essa tabela não existir, você receberá uma exceção antes de poder executar qualquer transação personalizada. lógica nos gatilhos.

No entanto, você pode "reescrever" SQL no cliente (não no SQL Server) criando o provedor de dados personalizado (se você tiver o aplicativo ADO.NET). Consulte MSDN - Implementando um provedor de dados do .NET Framework . Esta não é uma tarefa fácil e exigirá muitos esforços. Em seu código, você pode reutilizar a maioria dos recursos padrão do MSSQL Data Provider padrão (System.Data.SqlClient) e substituir somente as funções nas quais deseja analisar SQL e substituir certos comandos.

Por favor, olhe também no link - este projeto consistia em criar um provedor de dados .NET personalizado para o SQL Server que pudesse fornecer automaticamente "nova tentativa na função "erro". Portanto, este não é um regravador SQL, mas pode ser usado como um exemplo para criar o seu próprio.

    
por 14.07.2009 / 12:42
1

Você pode usar acionadores para INSERT, UPDATE e DELETE, mas não há um gatilho equivalente para SELECT.

Uma abordagem alternativa seria escrever um programa que intercepta chamadas de TDS , modifica-as e as passa para o SQL servidor. Então você teria seu programa escutar na porta 1433 ou algo assim e no seu programa de instalação alterar a porta do servidor SQL para escutar na porta 1434.

    
por 14.07.2009 / 02:30
1

Provavelmente você está pensando em criar uma camada de negócios no SQL. Se você estiver tentando modificar um aplicativo existente, poderá ter alguns problemas, já que os adaptadores SQL são todos proprietários, mas, se seus aplicativos puderem ser modificados, você provavelmente poderia escrever uma camada de negócios no DB, que processaria os comandos em o servidor SQL usando uma conexão de memória compartilhada.

Outra opção é um procedimento armazenado de CLR mágica, no qual você alimenta o SQL, que então o edita e executa no banco de dados SQL (usando uma conexão de contexto que é ainda mais rápida que a memória compartilhada).

Tenha em mente que o SQL Server é muito bem escrito, algo como o que você está tentando alcançar provavelmente seria melhor alcançado no cliente usando uma API para que o processamento seja distribuído pelo número de clientes e permitindo que o SQL Server otimize o SQL real sendo executado.

    
por 14.07.2009 / 02:44
1

Quando você diz "URL Rewriting", você realmente quer dizer "URL"? Porque eu não sabia que o SQL Server era acessado por URL.

Se você quis dizer isso como uma analogia, poderia, por favor, esclarecer?

    
por 14.07.2009 / 02:55
0

Você pode escrever gatilhos que empregam classes .net.

http://www.15seconds.com/issue/041006.htm

link

http://www.google.com/search?rlz=1C1_____enUS397US397&sourceid=chrome&ie=UTF-8&q=sql+.net+trigger

boa sorte.

    
por 29.10.2010 / 03:20

Tags