O VWD2005 inclui o SQL Server 2005 Express Edition, uma versão gratuita do SQL Server 2005 voltada para desenvolvedores não profissionais ou entusiastas que desejam criar aplicativos com uma solução simples de banco de dados. Como o SQL Server Express oferece suporte ao modelo completo de programação do SQL Server, como SQLCLR, T-SQL, procedimentos armazenados, visualizações, gatilhos e tipos de dados XML, você pode usar o SQL Server Express para aprender sobre essas tecnologias e garantir que seus aplicativos possam ser executados Em plataformas de nível superior (como SQL Server Enterprise Edition). O SQL Server Express é fácil de baixar e instalar (tem menos de 36 MB) e está incluído no Visual Studio 2005 e no Visual Web Developer 2005.
O Visual Studio inclui ferramentas para gerenciamento de banco de dados, como Database Explorer e Query Builder, que você pode usar para gerenciar bancos de dados SQL Server Express. O Visual Studio também oferece suporte a um novo banco de dados baseado em arquivo para a construção de bancos de dados SQL Server Express como parte de um projeto. Ao mesmo tempo, o Visual Studio 2005 e o SQL Server 2005 Express fornecem uma solução completa para criar e implantar aplicativos Web orientados a dados, incluindo os seguintes recursos:
· Itens de dados do projeto de banco de dados
· Conexão de banco de dados local
· Gerenciamento de navegador de banco de dados
· Conexão de caminho relativo Strings
· Suporte à implantação do XCopy
· Suporte integrado à depuração
Este artigo descreve a abordagem de banco de dados baseado em arquivo no Visual Studio 2005 e como o designer cria e usa esses bancos de dados.
Visual Web Developer e DataVisual
Web Developer fornecem diversas ferramentas para usar bancos de dados com aplicativos da Web. Você pode usar o Database Browser para conectar-se facilmente a um banco de dados e criar ou visualizar um diagrama ou esquema de banco de dados. Você também pode usar a caixa de diálogo do construtor de consultas e a tabela de resultados da consulta para consultar o banco de dados e preencher os dados. A criação de novos bancos de dados (usando arquivos locais) também é fornecida como itens de dados do projeto.
Depois de se conectar ao banco de dados no Visual Web Developer, você pode arrastar e soltar tabelas de banco de dados diretamente na página para criar um controle GridView vinculado a dados. O Visual Web Developer cria automaticamente um controle de fonte de dados associado e configura suas operações de seleção, atualização, inserção e exclusão com base na tabela de dados. Essa operação rápida economiza muito trabalho necessário para criar manualmente uma fonte de dados e você pode substituir facilmente o GridView por um controle vinculado a dados adequado, conforme necessário.
Bancos de dados locais e de servidor
Você já deve estar familiarizado com bancos de dados baseados em servidor e cadeias de conexão. Neste caso, o servidor de banco de dados (como o SQL Server 2005) associa o nome do banco de dados ao arquivo de banco de dados mantido pelo servidor. Você pode se conectar a um banco de dados baseado em servidor especificando o nome do servidor, o nome do banco de dados e as credenciais, por exemplo:
"server=(local)SQLExpress;database=Pubs;Integrated Security=true"
No entanto, o Visual Studio 2005 também oferece suporte ao conceito de bancos de dados locais, que é um arquivo adicionado ao diretório App_Data da aplicação web atual. É seguro armazenar arquivos de dados no diretório App_Data porque o conteúdo desse diretório nunca responderá às solicitações do usuário. Este diretório também é o local recomendado para armazenar arquivos XML e outros armazenamentos de dados. Os bancos de dados nativos do SQL Server Express têm uma extensão .MDF (como "MyDatabase.MDF"), que é um formato de arquivo padrão compatível com o SQL Server. Quando conectado ao servidor, o banco de dados também possui um arquivo de log associado (como "MyDatabase_log.LDF"). A localização do arquivo de banco de dados e do arquivo de log devem estar juntas.
Podemos anexar automaticamente um banco de dados de arquivo local ao SQL Server Express usando uma string de conexão de caminho relativo. Os caminhos relativos garantem que a conexão com o banco de dados não será interrompida quando o aplicativo for movido para qualquer outro local. A cadeia de conexão do caminho relativo no aplicativo Web é semelhante a esta:
"server=(local)SQLExpress;AttachDbFileName=|DataDirectory|MyDatabase.mdf;Integrated Security=true;User Instance=true"
A cadeia de conexão acima possui mais dois atributos adicionais . A propriedade AttachDbFileName especifica o local do arquivo de banco de dados que é anexado dinamicamente ao servidor quando a conexão é aberta. Embora esta propriedade possa aceitar um caminho completo para o banco de dados (por exemplo, usando a sintaxe |DataDirectory|), em tempo de execução esse caminho será substituído pelo diretório App_Data da aplicação. Isto também garante que as conexões não sejam interrompidas quando o aplicativo for movido para outro local. A segunda propriedade é User Instance=true, que especifica como o SQL Server Express anexa o banco de dados. Neste caso, o SQL Server Express cria um novo processo para anexar o banco de dados à nova instância, executando como o usuário que abriu a conexão. Em um aplicativo ASP.NET, esse usuário é a conta ASPNET local ou o Serviço de Rede padrão, dependendo do sistema operacional. Para anexar com segurança arquivos de banco de dados fornecidos por contas que não sejam de administrador (como contas ASP.NET), é necessário criar uma instância de usuário separada do SQL Server.
Observação: como, por padrão, todos os aplicativos ASP.NET são executados no mesmo processo, todos os aplicativos anexarão o banco de dados local à mesma instância do SQL Server Express. Isso significa que todos os aplicativos têm o mesmo acesso a todos os bancos de dados anexados a esta instância, independentemente do banco de dados ao qual o aplicativo foi originalmente anexado. Para isolar aplicativos diferentes, cada aplicativo deve ser executado em um processo de trabalho ou pool de aplicativos diferente (no IIS 6). Por esse motivo, um banco de dados SQL Server local tem como objetivo principal facilitar o desenvolvimento e não substituir um banco de dados baseado em servidor em um ambiente de hospedagem compartilhada.
Outro ponto importante é que não é permitido que dois usuários se conectem a um banco de dados local ao mesmo tempo. Ao projetar um aplicativo no Visual Studio, o designer libera automaticamente a conexão para garantir que o Visual Studio e o ASP.NET possam compartilhar arquivos de banco de dados (por exemplo, ao depurar um aplicativo em execução no designer).
Criando um banco de dados local
Você pode criar facilmente um banco de dados local em um projeto de aplicativo Web do Visual Studio. Como o Visual Studio vem com o SQL Server Express instalado, você pode usar as etapas a seguir para criar um banco de dados local, adicionar tabelas e preencher os dados.
Para criar um banco de dados local:
1. Clique com o botão direito no Solution Browser e selecione a opção "Adicionar Novo Item...".
2. Selecione o item “Banco de dados SQL” e especifique um nome de arquivo, como “Database.mdf”.
3. O Visual Studio solicita que este arquivo seja adicionado ao diretório App_Data. Clique em "Sim".
4. O Visual Studio adiciona esse arquivo e se conecta automaticamente ao banco de dados usando o Database Browser.
Para adicionar uma tabela de dados ao banco de dados local:
1. Clique com o botão direito no nó Tabelas no navegador do banco de dados e selecione a opção "Adicionar Nova Tabela".
2. Insira o nome e o tipo da coluna no banco de dados e, opcionalmente, defina outras propriedades da coluna na tabela de propriedades. Para configurar o exemplo de banco de dados de Contatos, siga as etapas abaixo.
3. Defina o nome da primeira coluna como “ContactID” e o tipo de dados como “int”. Desmarque a caixa de seleção "Permitir nulos".
4. Clique com o botão direito no quadrado cinza à esquerda da coluna ContactID e selecione a opção “Definir como chave primária”.
5. Na tabela "Propriedades da coluna" abaixo, expanda o nó "Especificação do identificador" e defina "É um identificador" como "Sim".
6. Defina o nome da segunda coluna como "ContactName" e o tipo de dados como "varchar(50)". Deixe a caixa de seleção "Permitir nulos" marcada.
7. Pressione Ctrl-S para salvar a tabela e defina o nome da tabela como “Contatos”. Clique em OK para salvar a tabela.
8. Feche a janela de definição de tabela.
Para preencher uma tabela com dados:
1. Clique com o botão direito no nó da tabela de dados (por exemplo, "Contatos") no Navegador do Banco de Dados e selecione a opção "Mostrar Dados da Tabela".
2. Insira os dados das linhas da tabela de dados no formulário exibido. Se você usar o exemplo de Contatos acima, poderá inserir um valor na coluna ContactName e o banco de dados gerará automaticamente o valor ContactID correspondente.
3. Feche a janela da tabela.
Vinculando a um banco de dados local
Para vincular a um banco de dados local, você precisa configurar o controle de fonte de dados ASP.NET para conectar-se ao arquivo usando uma conexão de caminho relativo. Para simplesmente vincular um banco de dados SQL Server Express aos controles SqlDataSource e GridView, use as seguintes etapas:
1. Clique duas vezes em uma página no Solution Browser (por exemplo, "Default.aspx"). O Visual Studio abrirá esta página.
2. Selecione a guia "Design View" na parte inferior da janela da página para alternar para o modo de design.
3. Clique duas vezes no arquivo de banco de dados (por exemplo "Database.mdf") no Solution Browser. O Visual Studio abre um navegador de banco de dados para a conexão.
4. Expanda o nó Tabelas para exibir as tabelas no banco de dados.
5. Arraste e solte a tabela no Navegador de Banco de Dados para a página aberta no modo Design. O Visual Studio cria um GridView vinculado ao controle SqlDataSource.
6. Expanda o "Painel de Transação Inteligente" do controle GridView e selecione paginação, classificação e edição.
7. Pressione Ctrl-F5 para executar a página (sem depuração).
O exemplo a seguir mostra um controle GridView e SqlDataSource conectado a um banco de dados local. Para executar este exemplo, a conta do processo ASP.NET deve ter permissões de leitura/gravação para os arquivos MDF e LDF no diretório ~/App_Data. O processo de configuração de permissão é o seguinte:
1. Selecione o arquivo ~/App_Data/Database.MDF no navegador do Windows e selecione "Propriedades".
2. Selecione a aba “Segurança” e clique em “Adicionar”.
3. Clique em "Local...", selecione o nome do seu computador (no topo da lista) e clique em "OK".
4. Na área de texto Nome do objeto, insira o nome da conta do processo ASP.NET. Por padrão, o nome no IIS 6.0 é “Serviço de Rede” e no IIS 5.x é “ASPNET”.
5. Selecione “Ler” e “Escrever” na coluna “Permitir” e clique em “OK”.
6. Se houver um arquivo LDF no diretório App_Data, você precisará repetir as etapas acima para definir as propriedades do arquivo LDF.
Se você usar o Visual Studio para criar um aplicativo em seu computador local, por padrão, você terá as permissões acima no diretório App_Data. Se um arquivo de banco de dados precisar alterar as permissões após ter sido anexado, você deverá primeiro fechar o domínio do aplicativo para que as novas permissões entrem em vigor.
<asp:GridView AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="ContactID" DataSourceID="SqlDataSource1" ID="GridView1" runat="server">
<Colunas>
<asp:BoundField DataField="ContactID" HeaderText="ID" ReadOnly="True" SortExpression="ID" />
<asp:BoundField DataField="NomeContato" HeaderText="Nome" SortExpression="Nome" />
</Colunas>
</asp:GridView>
<asp:SqlDataSource ConnectionString="<%$ ConnectionStrings:ContactsDatabase %>" ID="SqlDataSource1" runat="server" SelectCommand="SELECT [ContactID], [ContactName] FROM [Contacts]" OnSelected="SqlDataSource1_Selected"></ asp:SqlDataSource>
Implantando um banco de dados local
Uma das vantagens de um arquivo de banco de dados local é que ele pode acompanhar a aplicação, ser movido como parte da aplicação para outros locais ou para outros computadores (é claro que o computador também deve estar executando o SQL Server Expressar). Ao mover o banco de dados, o arquivo deve estar em estado desbloqueado. O arquivo fica bloqueado enquanto o designer ou aplicativo está conectado ao banco de dados. Para desbloquear, todas as conexões ativas com o banco de dados devem ser fechadas. Você pode usar as seguintes técnicas para fechar a conexão com o banco de dados:
· Se o ASP.NET abriu a conexão, você pode fechar o domínio do aplicativo adicionando um arquivo "app_offline.htm" ao diretório raiz do aplicativo web. Sua função é fechar o domínio da aplicação (não o processo) e redirecionar todas as solicitações da aplicação para este arquivo (retornando um código de resposta 404). Se quiser reiniciar o aplicativo, basta excluir este arquivo. Observe que simplesmente fechar a conexão no código da página não liberará o bloqueio do arquivo, porque, por padrão, o pool de conexões ADO.NET mantém conexões ativas.
O Visual Studio fornece o recurso Copiar Web, que pode copiar arquivos de aplicativo do diretório de trabalho para o servidor de destino usando xcopy, FTP ou a extensão de servidor FrontPage. O computador de destino pode ser local ou remoto. Você pode chamar o recurso Copiar Web selecionando "Site > Copiar Site..." na barra de menus do Visual Studio.
Embora você possa usar Copy Web ou uma operação simples de xcopy ou FTP para mover o banco de dados, para que o aplicativo continue funcionando, o computador de destino deve estar executando o SQL Server Express (sob o mesmo nome de instância). Mencionamos anteriormente que, como todos os aplicativos que executam ASP.NET estão conectados à mesma instância SQL, todos os aplicativos no computador de destino devem confiar uns nos outros. Se um aplicativo não puder ver o banco de dados de outro aplicativo, recomendamos usar uma abordagem baseada em servidor (usando autenticação SQL ou outras técnicas de separação) em vez do banco de dados local. Se você usar o SQL Server Express como ferramenta de desenvolvimento, precisará copiar o conteúdo do banco de dados SQL Server Express para os clientes como parte da implantação de produção.