.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