Conheça SilentIdea e aproveite melhor suas horas diante do micro

Visual Basic, VB .NET, ASP, Active X, Access, SQL Server

MSDE

Bancos de dados Access são baratos, mas funcionam bem apenas para pequenas aplicações  ou aplicações monousuário. SQL é poderoso o bastante para suportar grandes bancos de dados com múltiplos usuários simultâneos, mas é muito caro. Que tal se você encontrasse uma solução intermediária? Neste artigo, Rod Stephens explica como você pode usar o MSDE para criar pequenas aplicações multiusuários enquanto prepara-se para crescer se o seu banco de dados precisar de performance aumentada.

Access versus SQL Server

Bancos de dados Access são relativamente baratos. Na verdade, você pode abrir um banco de dados Access, modificar sua estrutura usando SQL, buscar registros, modificar e atualizar dados, deletar registros usando uma aplicação sem ter que comprar o produto Access.

Contudo, bancos de dados Access têm suas desvantagens. Eles têm algumas restrições de tamanho (no máximo 2 GB por banco de dados), fornecem pouco controle de acesso de usuários e têm pouco suporte para múltiplos usuários simultâneos.

SQL Server (também pronunciado "sequel server"), por outro lado, fornece suporte para grandes bancos de dados (até 1 TB= 1024 GB), múltiplos usuários simultâneos e controle de acesso por usuários bem detalhado. O grande defeito do SQL Server é o seu preço. Dependendo da sua instalação, as licenças podem custar milhares de reais.

Infelizmente, não há uma forma simples de migrar do Access para o SQL Server. Idealmente, você desenvolveria uma aplicação usando o banco de dados barato do Access. Posteriormente, se você decidisse que a aplicação necessitaria de um tamanho maior, múltiplos usuários, ou os recursos de segurança fornecidos pelo SQL Server, você poderia migrar o banco de dados. Infelizmente, Access e SQL Server são muito diferentes para tornar isto fácil. Seus esquemas de segurança de usuários são completamente diferentes e suas arquiteturas básicas tornam problemático um upgrade rápido.

Figura 1 mostra uma representação esquemática da arquitetura usada por aplicações Access. Diferentes aplicações usam rotinas de acesso a banco de dados para interagir com cada bancos de dados individualmente.

Figure 1 No Access, diferentes aplicações acessam o banco de dados independentemente.

Figura 2 mostra a arquitetura usada pelo SQL Server. Aqui, as aplicações se conectam a um servidor que contém um ou mais bancos de dados. O servidor coordena as interações entre as aplicações e os bancos de dados. Isto torna tarefas tais como o gerenciamento de privilégios de usuários bem mais fáceis.

Figura 2 No SQL Server, diferentes aplicações acessam o banco de dados usando um servidor compartilhado.

A migração de uma arquitetura Access para a arquitetura SQL Server costuma exigir muitas mudanças no modo como uma aplicação interage com os bancos de dados. Felizmente, o MSDE oferece uma alternativa possível.

Apresentando o MSDE

O MSDE (Microsoft Data Engine) é uma versão restrita do SQL Server que preenche o vazio entre os pequenos programas monousuários e as grandes aplicações multiusuários. O MSDE está disponível gratuitamente na página  MSDE da Microsoft se você possui um dos seguintes produtos:

MSDE também está incluído nos CD-ROMs do Visual Studio .NET e Office 2000 Premium.

Por ser uma versão do SQL Server, o MSDE usa a mesma arquitetura do SQL Server (vista na Figura 2). Isto significa que você pode atualizar uma aplicação feita com o MSDE para um SQL Server completo de forma relativamente fácil. Você pode criar aplicações inicialmente baratas usando o MSDE. Se, mais tarde, você decidir que precisa de recursos mais sofisticados do SQL Server, você poderá fazer um upgrade com um mínimo de trabalho.

O MSDE combina com os planos da Microsoft para o futuro das aplicações de pequenos bancos de dados, assim sendo, é bem provável que valha a pena o seu esforço para aprender a usá-lo. Estes planos fazem sentido do ponto de vista da Microsoft, porque encorajam você a preparar sua aplicação para um upgrade para o dispendioso produto SQL Server.

MSDE também faz sentido do seu ponto de vista. Ele lhe permite criar uma aplicação inicial barata enquanto lhe dá a opção de um futuro upgrade. Ao mesmo tempo lhe dá acesso a uma base de dados dotada de maiores recursos que o Access e o lança no domínio de tecnologias de acesso a dados mais valorizadas no mercado de trabalho.

Instalando o MSDE

O plano básico para instalar o MSDE é típico de qualquer instalação de produto:

  1. Baixe o kit de instalação ou peça-o por CD à Microsoft por um pequeno preço e taxa de envio.

  2. Descompacte o kit de instalação se ele estiver compactado.

  3. Leia o arquivo readme.txt e outras documentações.

  4. Rode o setup.exe.

Contudo, há várias versões diferentes do MSDE disponíveis e suas instruções de instalação diferem ligeiramente. Os dois links a seguir podem ajudá-lo se você pretende rodar o MSDE com o Visual Basic 6.

Este artigo foca a versão 2000 do MSDE que está incluída nos cds do Visual Studio .NET. Esta versão é também chamada de MSDE 2000 ou SQL Server 2000 Desktop Engine, assim você pode encontrar, na Web, páginas e outras documentações que se referem a ele por estes nomes.

Quando você executa o programa de instalação do Visual Studio .NET para instalar o Visual Basic, o MSDE é selecionado por padrão. Se você não remover a seleção, o MSDE é instalado automaticamente. Se você não tem certeza de ter removido ou não a seleção, examine este diretório:

C:\Arquivos de Programas\Microsoft Visual Studio .NET\Setup\MSDE

Se este diretório existir, você provavelmente instalou o MSDE. Se este diretório não existir, você provavelmente removeu a seleção do MSDE durante a instalação. Neste caso, re-insira o primeiro cd do Visual Studio .NET e execute o programa de instalação. Marque a caixa de checagem Desktop Engine e siga as instruções do programa de instalação.

O programa de instalação do Visual Studio .NET copia os arquivos do MSDE para o disco rígido do seu computador, mas não finaliza a instalação do MSDE. Ele sugere que você o faça tão logo termine a instalação do Visual Studio, mas você não deve seguir esta sugestão, pois há duas coisas por fazer antes.

Após o programa de instalação do Visual Studio terminar, abra este arquivo no editor de textos:

C:\Arquivos de Programas\Microsoft Visual Studio .NET\Setup\MSDE\setup.ini

Inicialmente o arquivo exibe isto:

[Options]
INSTANCENAME=VSdotNET

Edite o arquivo e mude o parâmetro padrão de INSTANCENAME de VSdotNET para qualquer nome que você queira dar para o servidor. Por exemplo, para nomear o servidor NetSDK, eu mudei a linha para INSTANCENAME=NetSDK. O nome do meu computador é Bender, assim os programas referenciarão este servidor como Bender\NetSDK.

A seguir, adicione o parâmetro SECURITYMODE=SQL no final do arquivo. Isto faz com que o servidor use o modelo de segurança do SQL Server ao invés de usar o esquema de autenticação de usuário do Windows. Mudar isto agora previne alguns problemas posteriores.

O arquivo deve ficar algo parecido com isto:

[Options]
INSTANCENAME=NetSDK
SECURITYMODE=SQL

Agora você está pronto para terminar a instalação do MSDE. As instruções dizem para você executar o programa:

C:\Arquivos de Programas\Microsoft Visual Studio .NET\Setup\MSDE\setup.exe

Quando você o fizer, o programa cria o servidor no seu computador.

Instalando o Último Service Pack

Agora que você criou o servidor, você precisa instalar o último service pack. O MSDE é uma versão do SQL Sever, assim você precisa instalar a última versão do service pack para o SQL Server.

Certifique-se de que você está usando um service pack que seja apropriado para a versão de MSDE que voce instalou. Se você instalou o MSDE 7 para rodar com o Visual Basic 6, esteja certo de instalar o service pack para o SQL Server 7. Se você seguiu as instruções prévias e instalou o MSDE 2000 do CD-ROM do Visual Studio .NET, instale o último service pack para o SQL Server 2000.

Para baixar a versão em português do Service Pack 3 para o SQL Server 2000 clique aqui.

Após terminado o download, dê um duplo clique no arquivo para descompactá-lo. Feita a descompactação leia as instruções contidas no arquivo sp3readme.htm. Mas aqui está o que funcionou para mim. Abra uma janela de prompt do DOS e navegue no diretório contendo os arquivos descompactados do service pack. Então execute o seguinte comando substituindo o nome do servidor NetSDK pelo nome que você especificou na criação do seu servidor.

Setup.exe /p SQLRUN INSTANCENAME=NetSDK

Dê um reboot, e você estará quase pronto para usar o servidor.

Inicie o Servidor

Após o MSDE estar instalado e você ter instalado o último service pack, você pode iniciar o processo servidor. Logue como Administrador. Você deverá ver um novo ícone do servidor na sua barra de tarefas. Como exibido na Figura 3, o ícone é o segundo vindo da esquerda. O círculo branco contendo um pequeno retângulo vermelho indica que o servidor não está rodando.

Figura 3 Um ícone na barra de tarefas mostra o servidor MSDE não ativo.

Dê um duplo clique sobre este ícone para abrir o SQL Service Manager mostrado na Figura 4.

Figura 4 Use o SQL Service Manager para iniciar o servidor.

Clique no botão Start/Continue. Após o serviço se iniciar, certifique-se de que a caixa de checagem Auto-start esteja checada e feche o Service Manager. O ícone da barra de tarefas deverá aparecer agora como na Figura 5.

Figura 5 Uma seta verde indica que o servidor está em execução.

Você provavelmente não deverá permanecer logado com a conta de Administrador, assim, faça o logoff e torne a se logar como um usuário comum. Agora você está pronto para dar ao novo servidor um pouco de exercício.

Inicie a Programação!

Com o MSDE instalado e o servidor rodando, você está pronto para usá-lo nas suas aplicações. Outros artigos posteriores exporão como usar bancos de dados MSDE com o Visual Basic .NET, mas esta seção fornece o bastante para iniciá-lo. 

A rotina BuildBD, exibida na listagem 1, mostra uma forma de interagir com o servidor. A rotina inicia criando uma string de conexão que identifica o nome de usuário que o programa quer usar (sa) e o servidor de banco de dados (Bender\NetSDK). Ele usa a string de conexão para criar um novo objeto SQLConnection e abre este objeto. Isto conecta o programa ao servidor.

A rotina então cria um objeto SqlCommand anexado à conexão. Ela irá usar este objeto rapidamente para executar uma série de comandos SQL.

BuildDB atribui à propriedade CommandText do objeto SqlCommand um comando de SQL que cria um banco de dados chamado MyBD. Os parâmetros para o comando dizem ao servidor o seguinte:

Em seguida, a subrotina chama o método ExecuteNonQuery para executar o comando SQL e criar o banco de dados.

A subrotina repete o processo atribuindo um comando SQL à propriedade CommandText e então chamando o método ExecuteNonQuery para selecionar o novo banco de dados, criar uma tabela, inserir um registro, parar o uso do banco de dados e destruir o banco de dados. Uma aplicação real não realizará estas tarefas de criar e destruir o banco de dados, mas este é um bom teste para este exemplo.

A rotina termina fechando a conexão ao banco de dados. Isto é importante. No Visual Basic .NET, conexões a bancos de dados são armazenadas em  um pool  de conexões. Quando um programa fecha uma conexão, ela é adicionada ao pool. Posteriormente, se este ou outro programa necessita usar a mesma conexão, o sistema a recupera do pool. Isto economiza tempo e recursos. Se o programa não fecha a conexão quando não mais necessita dela, a conexão não é adicionada ao pool e desperdiça recursos. Isto não tem importância para esta pequena aplicação de teste, mas causaria problemas para um sistema grande, assim sendo, você pode iniciar adquirindo bons hábitos desde já.

Listagem 1 Subrotina BuildDB cria um banco de dados, adiciona uma tabela, insere um registro na tabela e destrói o banco de dados.

Private Sub BuildDB()
  ' Cria uma string de conexão.

  Dim connect_string As String = _
    "User Id=sa;Data Source=Bender\NetSDK"

  ' Conecta o servidor

  lblStatus.Text = "Conectando"
  lblStatus.Refresh()
  Dim db_connection As New SqlConnection(connect_string)
  db_connection.Open()

  ' Cria um objeto SqlCommand
  Dim sql_command As New SqlCommand()
  sql_command.Connection = db_connection

  ' Cria o banco de dados MyDB
  lblStatus.Text = "Criando o banco de dados"
  lblStatus.Refresh()
  sql_command.CommandText = _
    "CREATE DATABASE MyDB " & _
    "ON (" & _
    " NAME = MyDB_data, " & _
    " FILENAME = 'C:\Temp\MyDB.mdf'," & _
    " SIZE = 2MB," & _
    " MAXSIZE = 10MB," & _
    " FILEGROWTH = 2MB)" & _
    "LOG ON(" & _
    " NAME = MyDB_log," & _
    " FILENAME = 'C:\Temp\MyDB.ldf'," & _
    " SIZE = 1MB," & _
    " MAXSIZE = 5MB," & _
    "FILEGROWTH = 1MB)"
  sql_command.ExecuteNonQuery()

  ' Usa o novo banco de dados.
  lblStatus.Text = "Selecionando o banco de dados"
  lblStatus.Refresh()
  sql_command.CommandText = "USE MyDB"
  sql_command.ExecuteNonQuery()

  ' Cria a tabela Books.
  lblStatus.Text = "Criando tabela"
  lblStatus.Refresh()
  sql_command.CommandText = _
    "CREATE TABLE Books (" & _
    " Title  VARCHAR(60)  PRIMARY KEY," & _
    " URL   VARCHAR(60)  NOT NULL)"
  sql_command.ExecuteNonQuery()

  ' Insere um registro.
  lblStatus.Text = "Inserindo registro"
  lblStatus.Refresh()
  sql_command.CommandText = _
    "INSERT INTO Books VALUES (" & _
    "'Visual Basic .NET Database Programming'," & _
    "'http://www.vb-helper.com/vbdb.htm')"
  sql_command.ExecuteNonQuery()

  ' Cessa o uso do banco de dados.
  lblStatus.Text = "Usando Master"
  lblStatus.Refresh()
  sql_command.CommandText = "USE Master"
  sql_command.ExecuteNonQuery()

  ' Destrói o banco de dados.
  lblStatus.Text = "Destruindo o banco de dados"
  lblStatus.Refresh()
  sql_command.CommandText = "DROP DATABASE MyDB"
  sql_command.ExecuteNonQuery()

  ' Fecha a conexão.
  db_connection.Close()

  lblStatus.Text = "Feito"
End Sub

Clique aqui para baixar o projeto em Visual Basic .NET que usa este código para testar o servidor de banco de dados. Você precisará modificar ligeiramente o seu código para especificar o nome do seu servidor ao invés de  BENDER\NetSDK, e fornecer seu nome de usuário e senha se você não quiser usar sa (system administrator).

Um Último Problema

Um problema ocorreu enquanto eu estava tentando fazer este trabalho no meu computador. Quando meu programa tentou conectar o servidor, ele falhou com a seguinte mensagem:

Not associated with a trusted SQL Server connection.

Após uma longa investigação online, eu descobri que este problema ocorre se o MSDE reverte ao uso da autenticação do Windows. Ele não permitirá o usuário padrão sa conectar-se ao servidor, possivelmente por que não há nenhuma conta de usuário chamada sa em meu computador. Este problema pode ocorrer se você tiver tido uma versão prévia do MSDE instalada, e eu tinha.

Atribuindo o parâmetro SECURITYMODE=SQL no arquivo setup.ini antes de finalizar a instalação do MSDE previne este problema. Se lhe acontecer de ter este problema, examine este artigo no MSDN para maiores informações e soluções.

Conclusão

Com o MSDE, a Microsoft oferece aos desenvolvedores uma clara estratégia de migração: desenvolver com o MSDE e fazer upgrade para SQL Server se necessário. Você não mais precisa antecipar se um banco de dados Access irá ter o poder que você precisará para a sua aplicação. Se você decidir aumentar o volume de dados, você poderá simplesmente instalar o SQL Server e voltar ao trabalho ao invés de iniciar uma total recodificação.

Rod Stepthens é autor do livro: Visual Basic .NET Database Programming (Que, 2002, http://www.vb-helper.com/vbdb.htm).

Conheça SilentIdea e turbine sua mente enquanto trabalha