.NET - Novos recursos do SQL Server 2005 Express
Uma grande parte das aplicações existentes possui de uma forma ou de outra um banco de dados dando suporte a persistência das informações, seja para armazenar um catálogo de produtos , gerenciar logins, armazenar dados dos clientes , das compras e por ai caminha a humanidade na ...
Para aqueles que usam o SQL Server, este suporte oferecido tem um preço : geralmente é requerida uma instalação completa do SQL Server na máquina de desenvolvimento.
Com advento da nova versão da plataforma .NET e do lançamento da família Express pela Microsoft, se você usar VB.NET/ASP.NET 2.0 existe uma outra opção em termos de banco de dados para usar no seu projeto. Estou falando do SQL Server 2005 Express Edition, daqui para frente apenas SSE. O SSE é uma versão mais enxuta do SQL Server 2005 mas possui algumas características interessantes que podem fazer dele uma escolha adequada para o ambiente de desenvolvimento.
Neste artigo vou falar de duas características que fazem o SQL Server 2005 Express um candidato com fortes chances de ser usado no seu ambiente de desenvolvimento:
Anexação automática de banco de dados (Auto-Attached DataBases)
Um problema com o ambiente de desenvolvimento que usa banco de dados é a necessidade de ter o SQL Server instalado, onde você precisa anexar o banco de dados , criar um login para o SQL Server e incluir o login no banco de dados. E isto precisa ser feito geralmente em cada máquina de desenvolvimento.(Ou você vai querer que todo mundo esteja logado como Administrador do sistema ?)
O SSE Edition suporta a anexação automática de banco de dados pela inclusão da seguinte string de conexão:
AttacheDbFilename=db.mdf
Com esta string de conexão , o SSE irá automaticamente anexar ao banco de dados quando a aplicação iniciar. Você pode evitar ter que colocar o caminho completo para o banco de dados no seu código usando o novo diretório App_Data e uma característica especial para apontar para ele.
Como exemplo se você estiver usando a seguinte string de conexão:
Data Source=.\SQLEXPRESS; AttachDbFilename=|DataDirectory|db.mdf
A string |DataDirectory| será substituída pelo caminho para o diretório App_Data, evitando assim que você tenha que incluir o caminho completo no seu código.
Mesmo com a anexação automática o problema das permissões ainda existem. Como pode um banco de dados ser automaticamente anexado se o usuário não tem permissão ?. A instanciação do usuário é a solução para este problema e desta forma os usuários não necessitam ter poderes de administrador. Vejamos...
Instanciação de usuário
Para compreender a instanciação de usuário , você precisa saber como a instância do SQL Server funciona. Por padrão, o SSE irá ser instalado com uma instância de nome SQLEXPRESS, é por este motivo que .\SQLEXPRESS é usado nas strings de conexão, pois assim você esta se conectando explicitamente a uma instância do SSE.
A conta de serviço padrão que o SSE roda é "NT AUTHORITY\NETWORK SERVICE"; esta é a conta sob a qual a instância irá rodar quando o processo inicia. Neste contexto, ainda será necessário um login explícito e a criação de um usuário.
A instanciação de usuário resolve o problema, pois cria uma instância na demanda, e, ao invés de usar a conta de serviço padrão, uma instância de usuário usa a conta de usuário como uma conta de serviço. Desta forma , o processo roda sob as credenciais do usuário, e não é necessário um login explícito; porque o processo esta rodando como o usuário , a auto-anexação não necessita de permissões adicionais e o proprietário do processo automaticamente possui os direitos de administrador para o banco de dados, mesmo se o usuário não for o administrador na máquina.
Tudo isto ocorre sob demanda, quando a aplicação inicia, logo, não é necessário efetuar nenhuma configuração. O processo do SSE rodando a instância do usuário permanece ativa por 60 minutos depois da última conexão, mas isto pode ser configurado com a stored procedure sp_configure, opção "user instance timeout".
Você pode habilitar a instanciação de usuário incluindo o seguinte código na sua string de conexão:
User Instance = True
A instanciação de usuário somente funciona com a segurança integrada, de forma que a string de conexão completa seria :
Data Source=.\SQLEXPRESS; AttachDbFilename=|DataDirectory|db.mdf; User Instance=True; Integrated Security=True;
A instanciação de usuário foi criada para o cenário de desenvolvimento evitando assim a necessidade de se efetuar diversas configurações.
Mas nem tudo são flores, existem algumas limitações :
A string de conexão geralmente é armazenada no arquivo web.config, que na versão 1.0/1.1, usava a seção appSettings. Na versão 2.0 existe uma nova seção chamada connectionStrings que fornece uma valor parecido para chave/valor.
Exemplo:
<connectionStrings> <add name="AW" connectionString="Data Source=.\SQLEXPRESS; . . ." providerName="System.Data.SqlClient" /> </connectionStrings>
Embora o atributo providerName não seja obrigatório a string de conexão não irá aparecer nos diálogos do Configure Data Source sem a definição de um nome para o provider.
Para aplicações você pode acessar estas strings de conexão de duas formas:
A primeira é usar a propriedade ConnectionStrings do objeto ConfigurationManager. Exemplo:
SqlConnection conn = new SqlConnection(); conn.ConnectionString = ConfigurationManager.ConnectionStrings["MAC"].ConnectionString;
A propriedade ConnectionStrings contém uma coleção de strings de conexões da seção no arquivo web.config, de maneira que você pode usar a propriedade name como um índice para a coleção. Esta propriedade retorna a string de conexão atual.
Em páginas ASP.NET você usa um construtor de expressão, que é um novo recurso da ASP.NET 2.0. O Construtor de expressão (Expression Builder) permite a você acessar via declarações, características como strings de conexão, configuração da aplicação, e recursos. Vejamos um exemplo:
<asp:SqlDataSource id="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:MAC %> "
O construtor de expressão usa a marcação
<% %> do lado do servidor , mas quando o
primeiro caractere na marcação é o símbolo $
isto indica que uma expressão será usada. Cada expressão possui um prefixo
conhecido,e , para strings de conexão o prefixo é ConnectionStrings.
A segunda forma de obter o mesmo resultado é usar o atributo name a
partir da seção do arquivo web.config para
identificar a string de conexão requerida, usando dois pontos (:) para separar o
prefixo da expressão do nome.
Estas novas características visam facilitar a vida e o bolso dos desenvolvedores oferecendo um ambiente mais integrado e de fácil utilização.
Bom estudo e até o próximo artigo .NET
José Carlos Macoratti