Shopping Hospedagem Fórum Contato
     
   O portal do desenvolvedor ASP Florianópolis-SC, Sábado - 18 de Novembro de 2017  
Busca

Menu do site
Efetuar Login
Usuário:

Senha:

 Esqueceu a senha?
Login automático

 Cadastre-se
Acessando vários tipos de bancos de dados.
Avaliações: 7   -   Minha nota: Média Geral: 15  

Acessando uma fonte de dados

O ADO (ActiveX Data Objects) é uma tecnologia fácil de usar, apesar de extensível, para adicionar acesso a bancos de dados a páginas da Web. Você pode usá-lo para gravar scripts compactos escalonáveis para se conectar a fontes de dados compatíveis com OLE (Object Linking and Embedding, vinculação e incorporação de objetos) DB (banco de dados OLE), como bancos de dados, planilhas, arquivos de dados seqüenciais ou diretórios de correio eletrônico. O OLE DB é uma interface de programação no nível do sistema que fornece um conjunto padrão de interfaces COM para a exposição da funcionalidade do sistema de gerenciamento de banco de dados. Com o modelo de objeto do ADO, é simples acessar essas interfaces (usando linguagens de script, como VBScript ou JScript) para adicionar funcionalidade de banco de dados a aplicativos da Web. Além disso, você também pode usar o ADO para acessar bancos de dados compatíveis com Open Database Connectivity (ODBC, conectividade aberta de banco de dados).

Se você for um criador de scripts com conhecimentos básicos sobre conectividade de banco de dados, achará a sintaxe de comandos do ADO simples e fácil de usar. Se você for um desenvolvedor experiente, desfrutará o acesso escalonável de alto desempenho que o ADO propicia a várias fontes de dados.

Para obter mais informações sobre o ADO, visite o site da Web Microsoft Universal Data Access (UDA) em http://www.microsoft.com/data/.

Criando uma seqüência de caracteres de conexão

A primeira etapa na criação de um aplicativo de dados para a Web é fornecer ao ADO uma maneira de localizar e identificar a sua fonte de dados. Isso é realizado através de uma seqüência de caracteres de conexão, vários argumentos delimitados por ponto-e-vírgula que definem parâmetros, como o provedor e a localização da fonte de dados. O ADO usa a seqüência de caracteres de conexão para identificar e direcionar o provedor do OLE DB para a fonte de dados. O provedor é um componente que representa a fonte de dados e apresenta informações ao aplicativo na forma de conjuntos de linhas.

A tabela abaixo lista as seqüências de caracteres de conexão com bancos de dados OLE para várias fontes de dados comuns:

Fonte de dados

Seqüência de caracteres de conexão com bancos de dados OLE

Microsoft® Access

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=caminho físico do arquivo .mdb

Microsoft SQL Server

Provider=SQLOLEDB.1;Data Source=caminho do banco de dados no servidor

Oracle

Provider=MSDAORA.1;Data Source=caminho do banco de dados no servidor

Microsoft Indexing Service

Provider=MSIDXS.1;Data Source=caminho do arquivo

Para permitir a compatibilidade com versões anteriores, o provedor de bancos de dados OLE para ODBC oferece suporte à sintaxe da seqüência de caracteres de conexão ODBC. A tabela a seguir lista as seqüências de caracteres de conexão ODBC usadas com mais freqüência:

Driver da fonte de dados

Seqüência de caracteres de conexão ODBC

Microsoft Access

Driver={Driver do Microsoft Access (*.mdb)};DBQ=caminho físico do arquivo .mdb

SQL Server

DRIVER={SQL Server};SERVER=caminho do servidor

Oracle

DRIVER={Microsoft ODBC para Oracle};SERVER=caminho do servidor

Microsoft Excel

Driver={Driver do Microsoft Excel (*.xls)};DBQ=caminho físico do arquivo .xls; DriverID=278

Microsoft Excel 97

Driver={Driver do Microsoft Excel (*.xls)};DBQ=caminho físico do arquivo .xls;DriverID=790

Paradox

Driver={Driver do Microsoft Paradox (*.db)};DBQ=caminho físico do arquivo .db;DriverID=26

Texto

Driver={Driver de texto da Microsoft (*.txt;*.csv)};DefaultDir=caminho físico do arquivo .txt

Microsoft Visual FoxPro® (com um recipiente de banco de dados)

Driver={Driver do Microsoft Visual FoxPro};SourceType=DBC;SourceDb=caminho físico do arquivo .dbc

Microsoft Visual FoxPro (sem um recipiente de banco de dados)

Driver={Driver do Microsoft Visual FoxPro};SourceType=DBF;SourceDb=caminho físico do arquivo .dbf


Observação   As seqüências de caracteres de conexão que usam um caminho UNC (Universal Naming Convention, convenção universal de nomenclatura) para fazer referência a uma fonte de dados localizada em um computador remoto podem representar um possível problema de segurança. Para impedir o acesso não autorizado à sua fonte de dados, crie uma conta do Windows para os computadores que precisarem ter acesso aos dados e aplique as permissões NTFS (Windows NT File System, sistema de arquivos do Windows NT) apropriadas à fonte de dados. Para obter mais informações.

Questões avançadas a serem consideradas durante a 
criação de aplicativos de dados para a Web

Por questões de desempenho e confiabilidade, recomenda-se a utilização de um motor de banco de dados cliente-servidor para a distribuição de aplicativos da Web controlados por dados, que exigem acesso de grande demanda por mais de 10 usuários ao mesmo tempo. Embora o ADO trabalhe com qualquer fonte de dados compatível com bancos de dados ODBC, ele já foi amplamente testado e foi concebido para trabalhar com bancos de dados cliente-servidor, como o Microsoft SQL Server ou o Oracle.

O ASP dá suporte para bancos de dados de arquivos compartilhados (Microsoft Access ou Microsoft FoxPro) como fontes de dados válidas. Embora alguns exemplos na documentação do ASP usem um banco de dados de arquivo compartilhado, é recomendável que esses tipos de motores de banco de dados sejam usados apenas para desenvolvimento ou distribuição limitada. Os bancos de dados de arquivos compartilhados podem não ser tão adequados quanto os bancos de dados cliente-servidor para aplicativos da Web de produção-qualidade de grande demanda.

Se você estiver desenvolvendo um aplicativo de banco de dados ASP que pretenda conectar a um banco de dados remoto do SQL Server, lembre-se dos seguintes pontos:

  • Escolhendo o esquema de conexão para o SQL Server Você pode optar entre os métodos Soquetes TCP/IP (Transmission Control Protocol/Internet Protocol, protocolo de controle de transmissão/protocolo Internet) e Pipes denominados para acessar um banco de dados remoto do SQL Server. Com pipes denominados, os clientes do banco de dados devem ser autenticados pelo Windows antes do estabelecimento de uma conexão, levantando a possibilidade de que um computador remoto que esteja executando pipes denominados possa negar acesso a um usuário que possua as credenciais apropriadas para acesso ao SQL Server, mas não tenha uma conta de usuário do Windows nesse computador. Por outro lado, conexões que usam o Soquetes TCP/IP são estabelecidas diretamente com o servidor de banco de dados, sem um computador intermediário, como ocorre com Pipes denominados. E, como as conexões feitas com Soquetes TCP/IP são estabelecidas diretamente com o servidor de banco de dados, os usuários podem obter acesso através da autenticação do SQL Server, em vez da autenticação do Windows.

  • Erro ODBC 80004005 Se o esquema de conexão para acessar o SQL Server não for definido corretamente, os usuários que estiverem exibindo o aplicativo de banco de dados poderão receber uma mensagem de erro ODBC 80004005. Para corrigir essa situação, tente usar uma conexão por pipe denominado local em vez de uma conexão por pipe denominado de rede, caso o SQL Server esteja em execução no mesmo computador que o IIS. As regras de segurança do Windows 2000 não serão impostas, pois o pipe é uma conexão local e não uma conexão de rede, que pode ser representada por uma conta de usuário anônimo. Além disso, na seqüência de caracteres de conexão do SQL Server (no arquivo Global.asa ou em um script em nível de página), altere o parâmetro SERVER=nome do servidor para SERVER=(local). A palavra-chave (local) é um parâmetro especial reconhecido pelo driver ODBC do SQL Server. Caso essa solução não funcione, tente usar um protocolo não autenticado entre o IIS e o SQL Server, como Soquetes TCP/IP. Esse protocolo funcionará quando o SQL Server estiver em execução localmente ou em um computador remoto.

    Observação   Para aprimorar o desempenho em conexões com bancos de dados remotos, use Soquetes TCP/IP.

  • Segurança do SQL Server Se você usar os recursos de segurança integrados ou mistos do SQL Server e o banco de dados do SQL Server residir em um servidor remoto, não poderá utilizar a autenticação integrada do Windows. Especificamente, você não poderá encaminhar credenciais de autenticação integrada do Windows para o computador remoto. Isso significa que talvez seja necessário utilizar a autenticação básica, que depende do usuário para o fornecimento de informações sobre o nome e a senha do usuário.

Para obter mais informações sobre essas questões, visite o site da Web Serviços de Suporte aos Produtos Microsoft em http://www.microsoft.com/brasil/suporte .

Conectando-se a uma fonte de dados

O ADO fornece o objeto Connection para o estabelecimento e o gerenciamento de conexões entre os aplicativos e fontes de dados compatíveis com bancos de dados OLE ou bancos de dados compatíveis com ODBC. O objeto Connection apresenta propriedades e métodos que você pode utilizar para abrir e fechar conexões de banco de dados e emitir consultas para atualizar informações.

Para estabelecer uma conexão de banco de dados, primeiro crie uma instância do objeto Connection. Por exemplo, o script a seguir cria uma instância do objeto Connection e, em seguida, abre uma conexão:

<%

  'Create a connection object.

  Set cnn = Server.CreateObject("ADODB.Connection")

  'Open a connection using the OLE DB connection string.

  cnn.Open  "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MarketData\ProjectedSales.mdb"

%>

Observação   A seqüência de caracteres de conexão não contém espaços antes nem depois do sinal de igualdade (=).

Neste caso, o método Open do objeto Connection se refere à seqüência de caracteres de conexão.

Executando consultas SQL com o objeto Connection

Com o método Execute do objeto Connection, você pode emitir comandos para as fontes de dados, como consultas Structured Query Language (SQL, linguagem de consulta estruturada). SQL, uma linguagem padrão da indústria para comunicação com bancos de dados, define comandos para recuperar e atualizar informações. O método Execute aceita parâmetros que especificam o comando (ou consulta), o número de registros de dados afetados e o tipo de comando em uso.

O script a seguir usa o método Execute para emitir uma consulta na forma de um comando SQL INSERT, que insere dados em uma tabela específica do banco de dados. Neste caso, o bloco de scripts insere o nome José Lemos em uma tabela do banco de dados denominada Clientes.

<%

  'Define the OLE DB connection string.

  strConnectionString  = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Employees.mdb"



  'Instantiate the Connection object and open a database connection.

  Set cnn = Server.CreateObject("ADODB.Connection")

  cnn.Open strConnectionString



  'Define SQL SELECT statement.

  strSQL = "INSERT INTO Customers (FirstName, LastName) VALUES ('José','Lemos')"



  'Use the Execute method to issue a SQL query to database.

  cnn.Execute strSQL,,adCmdText + adExecuteNoRecords

%>

Observe que dois parâmetros são especificados na instrução usada para executar a consulta: adCmdText e adExecuteNoRecords. O parâmetro opcional adCmdText especifica o tipo de comando, indicando que o provedor deverá avaliar a instrução de consulta (neste caso, uma consulta SQL) como uma definição textual de um comando. O parâmetro adExecuteNoRecords instrui o ADO a não criar um conjunto de registros de dados se nenhum resultado retornar ao aplicativo. Esse parâmetro funciona somente com os tipos de comandos especificados como uma definição de texto, como consultas SQL, ou procedimentos armazenados de banco de dados. Embora os parâmetros adCmdText e adExecuteNoRecords sejam opcionais, você deverá especificá-los ao utilizar o método Execute para aprimorar o desempenho do aplicativo de dados.

Importante   Os parâmetros do ADO, como adCmdText, devem ser definidos antes de serem usados em um script. Uma maneira conveniente de definir os parâmetros é usar uma biblioteca de tipos do componente, que é um arquivo que contém definições de todos os parâmetros do ADO. Antes de ser implementada, a biblioteca de tipos do componente deverá ser declarada. Adicione a marca <METADATA> após o arquivo .asp ou Global.asa para declarar a biblioteca de tipos do ADO:

<!--METADATA NAME="Microsoft ActiveX Data Objects 2.5 Library" TYPE="TypeLib" 

UUID="{00000205-0000-0010-8000-00AA006D2EA4}"-->

Além do comando SQL INSERT, você pode usar os comandos SQL UPDATE e DELETE para alterar e remover informações do banco de dados.

Com o comando SQL UPDATE, você pode alterar os valores de itens em uma tabela do banco de dados. O script a seguir usa o comando UPDATE para alterar os campos FirstName da tabela Clientes para Roberto em todos os campos LastName que contenham o sobrenome Amaral.

<%

  Set cnn = Server.CreateObject("ADODB.Connection")

  cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Employees.mdb"

  cnn.Execute "UPDATE Customers SET FirstName = 'Roberto' WHERE LastName = 'Amaral' 

",,adCmdText + adExecuteNoRecords

%>

Para remover registros específicos de uma tabela do banco de dados, use o comando SQL DELETE. O script a seguir remove todas as linhas da tabela Clientes em que o sobrenome seja Amaral:

<%

  Set cnn = Server.CreateObject("ADODB.Connection")

  cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Employees.mdb"

  cnn.Execute "DELETE FROM Customers WHERE LastName = 'Amaral'",,adCmdText + adExecuteNoRecords

%>

Observação   O comando DELETE do SQL deve ser usado com muito cuidado. Um comando DELETE que não esteja acompanhado de uma cláusula WHERE excluirá todas as linhas de uma tabela. Certifique-se de incluir uma cláusula SQL WHERE, que especifica as linhas exatas a serem excluídas.

Utilizando o objeto Recordset para manipular resultados

Para recuperar dados, examinar resultados e fazer alterações em um banco de dados, o ADO fornece o objeto Recordset. Como seu nome diz, o objeto Recordset tem recursos que você pode usar, dependendo das suas restrições de consulta, para recuperar e exibir um conjunto de linhas do banco de dados ou registros. O objeto Recordset mantém a posição de cada registro retornado por uma consulta, permitindo que você percorra os resultados, um item de cada vez.

Recuperando um conjunto de Registros

Aplicativos de banco de dados bem-sucedidos empregam o objeto Connection para estabelecer um link e o objeto Recordset para manipular os dados retornados. Combinando as funções especializadas dos dois objetos, você poderá desenvolver aplicativos de banco de dados para executar quase todas as tarefas que envolvem manipulação de dados. Por exemplo, o script do lado do servidor a seguir usa o objeto Recordset para executar um comando SQL SELECT. Esse comando recupera um conjunto específico de informações com base em restrições de consulta. A consulta também contém uma cláusula SQL WHERE, usada para limitar uma consulta a um critério específico. Neste exemplo, a cláusula WHERE limita a consulta a todos os registros que contenham o sobrenome Amaral na tabela Clientes do banco de dados.

<%

  'Establish a connection with data source.

  strConnectionString  = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Employees.mdb"

  Set cnn = Server.CreateObject("ADODB.Connection")

  cnn.Open strConnectionString



  'Instantiate a Recordset object.

  Set rstCustomers = Server.CreateObject("ADODB.Recordset")



  'Open a recordset using the Open method

  'and use the connection established by the Connection object.

  strSQL = "SELECT FirstName, LastName FROM Customers WHERE LastName = 'Amaral' "

  rstCustomers.Open  strSQL, cnn



  'Cycle through record set and display the results

  'and increment record position with MoveNext method.

   Set objFirstName = rstCustomers("FirstName")

   Set objLastName = rstCustomers("LastName")

   Do Until rstCustomers.EOF

     Response.Write objFirstName & " " & objLastName & "<BR>"

     rstCustomers.MoveNext

   Loop



%>

Observe que, no exemplo anterior, o objeto Connection estabeleceu a conexão de banco de dados e o objeto Recordset usou a mesma conexão para recuperar resultados do banco de dados. Esse método será útil quando for necessário configurar com precisão a maneira como o link com o banco de dados é estabelecido. Por exemplo, se você precisasse especificar o intervalo de tempo antes de uma tentativa de conexão ser anulada, seria necessário usar o objeto Connection para definir essa propriedade. No entanto, se você desejasse somente estabelecer uma conexão usando as propriedades de conexão padrão do ADO, poderia usar o método Open do objeto Recordset para estabelecer um link:

<%

  strConnectionString  = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Employees.mdb"

  strSQL = "SELECT FirstName, LastName FROM Customers WHERE LastName = 'Amaral' "

  Set rstCustomers = Server.CreateObject("ADODB.Recordset")



  'Open a connection using the Open method

  'and use the connection established by the Connection object.

  rstCustomers.Open  strSQL, strConnectionString



  'Cycle through the record set, display the results,

  'and increment record position with MoveNext method.

   Set objFirstName = rstCustomers("FirstName")

   Set objLastName = rstCustomers("LastName")

   Do Until rstCustomers.EOF

      Response.Write objFirstName & " " & objLastName & "<BR>"

      rstCustomers.MoveNext

   Loop

%>

Ao estabelecer uma conexão, usando o método Open do objeto Recordset, você estará usando implicitamente o objeto Connection para proteger o link. Para obter mais informações, consulte a documentação do Microsoft ActiveX Data Objects (ADO), disponível no site da Web Microsoft Universal Data Access em http://www.microsoft.com/data/.

Observação   Para aprimorar consideravelmente o desempenho dos aplicativos de banco de dados ASP, considere a possibilidade de armazenar em cache o conjunto de registros no estado de Aplicativo. Para obter mais informações.

Normalmente, é útil contar o número de registros retornados em um conjunto de registros. O método Open do objeto Recordset permite que você especifique um parâmetro de cursor opcional, que determina como o provedor recupera os registros de dados e navega nos mesmos. Ao adicionar o parâmetro de cursor adOpenKeyset à instrução usada para executar a consulta, você permitirá que o aplicativo do cliente navegue por todo o conjunto de registros. Conseqüentemente, o aplicativo poderá usar a propriedade RecordCount para contar com precisão o número de registros do conjunto de registros. Consulte o seguinte exemplo:

<%

	Set rs = Server.CreateObject("ADODB.Recordset")

	rs.Open "SELECT * FROM NewOrders", "Provider=Microsoft.Jet.OLEDB.3.51;Data 

Source='C:\CustomerOrders\Orders.mdb'", adOpenKeyset, adLockOptimistic, adCmdText



	'Use the RecordCount property of the Recordset object to get count.

	If rs.RecordCount >= 5 then

	  Response.Write "Recebemos estes " & rs.RecordCount & " novos pedidos<BR>"



	  Do Until rs.EOF

	  	Response.Write rs("CustomerFirstName") & " " & rs("CustomerLastName") & "<BR>"

		Response.Write rs("AccountNumber") & "<BR>"

		Response.Write rs("Quantity") & "<BR>"

		Response.Write rs("DeliveryDate") & "<BR><BR>"

	      	rs.MoveNext

	  Loop



  	Else

	  Response.Write "Há menos de " & rs.RecordCount & " novos pedidos."

	End If



   rs.Close

%>

Aprimorando as consultas com o objeto Command

Com o objeto Command do ADO, você pode executar consultas da mesma maneira que as executa com os objetos Connection e Recordset, exceto pelo fato de que, com o objeto Command, você pode preparar ou compilar a consulta na origem do banco de dados e, em seguida, reemitir repetidas vezes a consulta com um conjunto diferente de valores. A vantagem de compilar consultas dessa maneira é que você pode reduzir consideravelmente o tempo necessário para reemitir modificações em uma consulta existente. Além disso, você pode deixar suas consultas SQL parcialmente indefinidas, com a opção de alterar partes delas momentos antes de sua execução.

A coleção Parameters do objeto Command evita o trabalho de reconstruir a consulta sempre que ela for reemitida. Por exemplo, se for preciso atualizar regularmente informações sobre custos e oferta no sistema de inventário baseado na Web, você poderá predefinir a consulta da seguinte maneira:

<%

    'Open a connection using Connection object. Notice that the Command object

    'does not have an Open method for establishing a connection.

    strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data 

Source=C:\Data\Inventory.mdb"

    Set cnn = Server.CreateObject("ADODB.Connection")

    cnn.Open strConnectionString



    'Instantiate Command object; use ActiveConnection property to attach

    'connection to Command object.

    Set cnn = Server.CreateObject("ADODB.Command")

    Set cmn.ActiveConnection = cnn



    'Define SQL query.

    cmn.CommandText = "INSERT INTO Inventory (Material, Quantity) VALUES (?, ?)"



    'Save a prepared (or pre-compiled) version of the query specified in CommandText

    'property before a Command object's first execution.

    cmn.Prepared = True



    'Define query parameter configuration information.

    cmn.Parameters.Append cmn.CreateParameter("material_type",adVarChar, ,255 )

    cmn.Parameters.Append cmn.CreateParameter("quantity",adVarChar, ,255 )



    'Define and execute first insert.

    cmn("material_type") = "lâmpadas"

    cmn("quantity") = "40"

    cmn.Execute ,,adCmdText + adExecuteNoRecords



    'Define and execute second insert.

    cmn("material_type") = "fusíveis"

    cmn("quantity") = "600"

    cmn.Execute ,,adCmdText + adExecuteNoRecords

    .

    .

    .

  %>

Importante   Os parâmetros do ADO, como adCmdText, são apenas variáveis, o que significa que antes de usar um parâmetro do ADO em um script de acesso a dados, você deverá definir o seu valor. Como o ADO usa um grande número de parâmetros, é mais fácil defini-los através de uma biblioteca de tipos do componente, um arquivo que contém definições de todos os parâmetros e constantes do ADO. Para obter detalhes sobre a implementação da biblioteca de tipos do ADO.

Examinando o exemplo anterior, você observará que o script constrói e reemite repetidas vezes uma consulta SQL com valores diferentes, sem precisar redefinir e reenviar a consulta à origem do banco de dados. Compilar as consultas com o objeto Command também oferece a vantagem de evitar problemas que podem surgir em decorrência da concatenação de seqüências de caracteres e variáveis para formar consultas SQL. Em particular, usando a coleção Parameter do objeto Command, você pode evitar problemas relacionados à definição de determinados tipos de variáveis de seqüência de caracteres, data e hora. Por exemplo, os valores de consultas SQL que contêm apóstrofos (') podem gerar uma falha na consulta:

  strSQL = "INSERT INTO Customers (FirstName, LastName) VALUES ('Roberto','O'Hara')" 

Observe que o sobrenome O'Hara contém um apóstrofo, que entra em conflito com os apóstrofos usados para denotar dados na palavra-chave SQL VALUES. Vinculando o valor de consulta como um parâmetro do objeto Command, você evitará esse tipo de problema.

Combinando formulários HTML e acesso a bancos de dados

Páginas da Web que contêm formulários HTML podem permitir que os usuários consultem remotamente um banco de dados e recuperem informações específicas. Com o ADO, você pode criar scripts surpreendentemente simples, que coletam as informações dos formulários dos usuários, criam uma consulta personalizada ao banco de dados e retornam informações ao usuário. Usando o objeto Request do ASP, você pode recuperar informações digitadas em um formulário HTML e incorporá-las em instruções SQL. Por exemplo, o bloco de scripts a seguir insere informações fornecidas por um formulário HTML em uma tabela. O script coleta as informações do usuário com a coleção Form do objeto Request.

<%

  'Open a connection using Connection object. The Command object

  'does not have an Open method for establishing a connection.

   strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=

D:\CompanyCatalog\Seeds.mdb"

 	Set cnn = Server.CreateObject("ADODB.Connection")

 	cnn.Open strConnectionString



  'Instantiate Command object

  'and  use ActiveConnection property to attach

  'connection to Command object.

  Set cnn = Server.CreateObject("ADODB.Command")

  Set cmn.ActiveConnection = cnn



  'Define SQL query.

  cmn.CommandText = "INSERT INTO MySeedsTable (Type) VALUES (?)"



  'Define query parameter configuration information.

  cmn.Parameters.Append cmn.CreateParameter("type",adVarChar, ,255)



  'Assign input value and execute update.

  cmn("type") = Request.Form("SeedType")

  cmn.Execute ,,adCmdText + adExecuteNoRecords

%>

Para obter mais informações sobre formulários e sobre como usar o objeto Request do ASP.

Gerenciando conexões a bancos de dados

Um dos principais desafios da criação de um aplicativo de banco de dados sofisticado para a Web, como um aplicativo para entrada de pedidos on-line para atender a milhares de clientes, é gerenciar de forma adequada as conexões de banco de dados. Abrir e manter essas conexões, mesmo quando nenhuma informação estiver sendo transmitida, pode afetar seriamente os recursos de um servidor de bancos de dados e resultar em problemas de conectividade. Aplicativos de banco de dados para a Web bem-estruturados reciclam as conexões de banco de dados e compensam os atrasos decorrentes do tráfego na rede.

Estabelecendo tempo limite para uma conexão

Um aumento repentino na atividade de um servidor de bancos de dados poderá criar um backlog, o que aumentará consideravelmente o tempo necessário para estabelecer uma conexão de banco de dados. Conseqüentemente, atrasos excessivos na conexão poderão reduzir o desempenho do aplicativo de banco de dados.

Com a propriedade ConnectionTimeout do objeto Connection, você pode limitar o tempo que o aplicativo aguardará antes de abandonar a tentativa de conexão e emitir uma mensagem de erro. Por exemplo, o script a seguir define a propriedade ConnectionTimeout para aguardar 20 segundos antes de cancelar a tentativa de conexão:

Set cnn = Server.CreateObject("ADODB.Connection")

cnn.ConnectionTimeout = 20

cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Inventory.mdb"

O padrão da propriedade ConnectionTimeout é 30 segundos.

Observação   Antes de incorporar a propriedade ConnectionTimeout em aplicativos de banco de dados, certifique-se de que o seu provedor de conexão e a sua fonte de dados dêem suporte para essa propriedade.

Fazendo um pool de conexões

O pooling de conexões permite que o aplicativo da Web use uma conexão de um pool ou reservatório de conexões livres que não precisam ser restabelecidas. Depois que a conexão for criada e inserida em um pool, o aplicativo irá reutilizá-la sem que seja preciso executar o processo de conexão. Isso poderá resultar em ganhos significativos no desempenho, principalmente se o aplicativo estabelecer conexões em uma rede ou conectar-se e desconectar-se repetidas vezes. Além disso, uma conexão de pool pode ser usada repetidamente por vários aplicativos.

Pooling de sessões de OLE DB

O OLE DB possui um recurso de pooling, chamado pooling de sessões, otimizado para aprimorar o desempenho da conectividade em aplicativos de banco de dados grandes para a Web. O pooling de sessões preserva a segurança da conexão e outras propriedades. Uma conexão de pool será reutilizada somente se solicitações correspondentes forem feitas dos dois lados da conexão. Por padrão, os provedores de bancos de dados OLE do Microsoft SQL Server e Oracle dão suporte para o pooling de sessões. Isso significa que não há necessidade de configurar um aplicativo, servidor ou banco de dados para usar o pooling de sessões. No entanto, se o seu provedor não der, por padrão, suporte para o pooling de sessões, você deverá criar uma configuração no Registro para ativar o pooling de sessões. Para obter mais informações sobre o pooling de sessões, consulte a documentação do OLE DB 2.0 Software Development Kit (SDK).

Pooling de conexões ODBC

Para que um driver ODBC participe do pooling de conexões, você deverá configurar o driver específico do banco de dados e, em seguida, definir a propriedade CPTimeout do driver no Registro do Windows. A propriedade CPTimeout determina por quanto tempo uma conexão permanece no pool de conexão. Se a conexão permanecer no pool por um tempo superior à duração definida por CPTimeout, ela será fechada e removida do pool. O valor padrão de CPTimeout é 60 segundos.

Você pode definir seletivamente a propriedade CPTimeout para ativar o pooling de conexões de um driver de bancos de dados ODBC específico, criando uma chave de Registro com as seguintes configurações:

\HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\driver-name\CPTimeout = timeout

 (REG_SZ, units are in seconds)

Por exemplo, a chave a seguir define o tempo limite do pool de conexão como 180 segundos (3 minutos) para o driver do SQL Server.

\HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\SQL Server\CPTimeout = 180

Observação   Por padrão, o servidor Web ativa o pooling de conexões para o SQL Server definindo CPTimeout como 60 segundos.

Utilizando conexões em múltiplas páginas

Embora você possa reutilizar uma conexão em várias páginas armazenando-a no objeto Application do ASP, isso pode manter uma conexão aberta desnecessariamente, eliminando as vantagens do uso do pooling de conexões. Caso vários usuários precisem se conectar ao mesmo aplicativo de banco de dados ASP, um método mais adequado será reutilizar uma seqüência de caracteres de conexão a banco de dados em diversas páginas da Web, colocando essa seqüência no objeto Application do ASP. Por exemplo, você pode especificar a seqüência de caracteres de conexão no procedimento de evento Application_OnStart do arquivo Global.asa, como no seguinte script:

Application("ConnectionString") = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Inventory.mdb"

Assim, em cada arquivo ASP que acessar o banco de dados, você poderá gravar:

<OBJECT RUNAT=SERVER ID=cnn PROGID="ADODB.Connection"></OBJECT>

para criar uma instância do objeto Connection na página e usar o script

cnn.Open Application("ConnectionString")

para abrir a conexão. No fim da página, a conexão será fechada com

cnn.Close

No caso de um usuário individual que precise reutilizar uma conexão em várias páginas da Web, talvez seja mais conveniente usar o objeto Session, em vez do objeto Application, para armazenar a seqüência de caracteres de conexão.

Fechando conexões

Para usar o pooling de conexões da melhor maneira, feche explicitamente as conexões de banco de dados assim que possível. Por padrão, uma conexão é encerrada após o término da execução do script. No entanto, fechando explicitamente a conexão no script quando ela não for mais necessária, você reduzirá a demanda no servidor de bancos de dados e disponibilizará a conexão para outros usuários.

Você pode usar o método Close do objeto Connection para encerrar explicitamente uma conexão entre esse objeto e o banco de dados. O script a seguir abre e fecha uma conexão:

<%

  strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Inventory.mdb"

  Set cnn = Server.CreateObject("ADODB.Connection")

  cnn.Open strConnectionString

  cnn.Close

%>










SuperASP do Brasil Ltda

03.066.522/0001-84
Av. Rio Branco 433 - Centro - Florianopolis - SC
Contato

© 2001/2008 - Superasp do Brasil Ltda. Todos os direitos reservados