Leobreda.Net

HTML | DHTML | JavaScript | DOM | Ajax | Asp | Asp.net | PHP | Ms. SQL | MySQL

TAG cloud

.net     ajax     api     arquivo     array     asp     asp.net     banco de dados     bing     bloqueio     boas práticas     bug     c sharp     c#     c#     chart     classe     collate     collation     complemento     complementos     componente     conexão sql     connection string     css     cursor location     desativar programas     dom     erro cs0246     explorer     ferramenta de busca     firefox     ftp     função     global.asa     global.asax     google     gráfico     helicon     hospedagem ruim     hostphd     http 301     imagem     include     indexação     inicialização     insert     internet lenta     legendas     limit

Pesquisa por: função

Boas práticas para trabalhar com ASP - Parte III

asp, banco de dados, boas práticas, função, insert, sql, update

27 de setembro de 2008     22:00376 visitas

Conforme os POSTs anteriores, estou enviando mais uma dica à respeito de Conexão ao Banco de Dados. Desta vez, estarei falando sobre o comando INSERT e UPDATE.

Atualmente, o comando SELECT é utilizado para ler resultados de um banco de dados. Já o INSERT, é um comando para INSERIR dados neste mesmo banco de dados. E para atualizar os dados, temos o UPDATE.

Seguindo os mesmos caminhos do Include CONEXAO.ASP, informado no post Boas práticas para trabalhar com ASP - Parte II ...

 

Arquivo conexao.asp

<%
Dim objConexao
Dim objComando
Dim executa

sub abreconexao()
Set objConexao = CreateObject("ADODB.Connection")
objConexao.commandTimeout=20

'MySQL Localhost
objConexao.ConnectionString = "Driver={MySQL ODBC 3.51 Driver};

Server=localhost;Database=leobredacom; User=root;Password=root;Option=3;"
objConexao.Open
conexao_executa=true
end sub

sub executaconexao(comando)
if conexao_executa=false then
call abreconexao
end if

set objComando = CreateObject("ADODB.Command")
objComando.ActiveConnection = objConexao
objComando.CommandText = comando
objComando.Execute()
Set objComando = Nothing
call fechaconexao
end sub

sub fechaconexao()
objConexao.Close : Set objconexao = Nothing
conexao_executa=false
end sub
%>  

 

O arquivo pagina.asp, fazendo um SELECT, ...

<!--#include file="conexao.asp"-->

Olá, agora são <%=now()%>

<% strSQL = "SELECT ESTADO_DESC FROM TB_ESTADO WHERE PAIS='Brasil' ORDER BY ESTADO_DESC"
   call abreConexao : set objRecordset = CreateObject("ADODB.Recordset") : objRecordset.Open strSQL, objConexao

   while NOT objRecordset.EOF%>

      Estado: <%=ObjRecordset("ESTADO_DESC")%><br />

<% objRecordset.MoveNext : Wend : objRecordset.Close : set objRecordset = Nothing : call fechaConexao%>

 

 

... inserindo e atualizando os resultados utilizando a sub executaConexao().

<!--#include file="conexao.asp"-->

<% strSQL = "INSERT INTO TB_ESTADO (PAIS, ESTADO) VALUES ('Brasil', 'São Paulo')"

   executaConexao(strSQL)

 

   strSQL = "UPDATE TB_ESTADO SET PAIS='Paraguai' WHERE ESTADO_DESC='Assunción'"

   executaConexao(strSQL) %>

 

A própria sub abreConexao() faz a conexão ao banco de dados, e a execução do INSERT (ou UPDATE, conforme a necessidade).

Boas práticas para trabalhar com ASP - Parte II

asp, boas práticas, conexão sql, função, include, recordset

23 de setembro de 2008     22:00544 visitas

Existem mil maneiras para fazer com que sua aplicação se conecte a um banco de dados, desde as piores, até as mais eficientes.

Uma delas é aquela que você cria os objetos de conexão, informa as strings de conexão, monta a query, lê os resultados e esquece que tem que destruir o objeto (é, infelizmente o Prof. Agnaldo esqueceu de comentar isso quando eu aprendi ASP na Impacta). No final do dia, você tem um computador de última geração com processador em 99% de uso e não sabe o que aconteceu.

No meu caso foi assim: meu primeiro programa foi montar um sistema que consultava uns dados no banco de dados, populava os mesmos numa tabela e fim de papo; quando a gente é iniciante, fica se gabando com aquelas páginas rodando no IIS com dados dinâmicos e esquece aquelas hospedagens gratuitas do tempo do Geocities.

Voltando para o programa, TODAS as páginas eu colocava logo na primeira linha um INCLUDE contendo os dados de conexão com o Banco de dados, e abria logo de cara, mesmo sem necessidade de utilizar Banco de Dados em algumas páginas.

 

O include CONEXAO.ASP seria este aqui:

 Set objConexao = CreateObject("ADODB.Connection")

 

'MySQL
objConexao.ConnectionString = "Driver={MySQL ODBC 3.51 Driver};Server=localhost;Database=leobredacom; User=root;Password=root;Option=3;"
objConexao.Open()

 

E esta seria uma página

<!--#include file="conexao.asp"-->

Olá, agora são <%=now()%>

 

 

Olha a tremenda merda que eu fiz: para escrever "Hello, Wordl!" não precisa de Banco de Dados.

 

E esta seria uma outra página, agora sim conectando a um banco de dados ;-)

<!--#include file="conexao.asp"-->

Olá, agora são <%=now()%>

<% strSQL = "SELECT ESTADO_DESC FROM TB_ESTADO WHERE PAIS='Brasil' ORDER BY ESTADO_DESC"
   set objRecordset = CreateObject("ADODB.Recordset") : objRecordset.Open strSQL, objConexao

   while NOT objRecordset.EOF%>

      Estado: <%=ObjRecordset("ESTADO_DESC")%><br/>

<% objRecordset.MoveNext : Wend : objRecordset.Close : set objRecordset = Nothing : objConexao.Close : Set objConexao = Nothing

%>

 

 

*DICA: Experimente colocar várias instruções na mesma linha E separadas por ":" (dois pontos). Assim não precisa ficar aquele monte de linha com apenas 3 palavras.

 

O resultado do Recordset acima faria retornar todos os Estados do Brasil. Mas ainda assim:

  • ATÉ o momento em que deseja mostrar os resultados, vem o cabeçalho da página (os HTML, TITLE e os BODY da vida...), e o Objeto que realiza a conexão com o banco estaria aberto (a latência reduz, mas não é eliminada);
  • Para fazer uma nova consulta, NÃO poderia destruir o objeto objConexao (objConexao.Close : Set objConexao = Nothing), deixando assim, o objeto aberto sempre para uma consulta futura, e que nem sempre destruia na última conexão por nosso esquecimento.

 

Estudando um pouco mais, tive a necessidade de descobrir uma maneira mais eficiente (eu não tinha usado a lógica) de contornar este problema.

Então faria assim:

  • Crio a Query (strSQL);
  • Chamo uma função, onde a mesma conecta o Banco de Dados
  • Executo a leitura do banco
  • Chamo outra função para destruir a conexão

 

E cada vez que eu preciso de consultar o Banco de Dados, faço esta rotina repetidamente, desta maneira:

 

O include CONEXAO.ASP

Dim objConexao
sub abreconexao()

    Set objConexao = CreateObject("ADODB.Connection")
    objConexao.ConnectionString = "Driver={MySQL ODBC 3.51 Driver};Server=localhost;Database=leobredacom; User=root;Password=root;Option=3;"
    objConexao.Open()

end sub


sub fechaconexao
    objConexao.Close : Set objConexao=Nothing
end sub

 

 

Já esta página, agora TODA VEZ QUE preciso conectar ao banco de dados, chamo a função abreConexao()

<!--#include file="conexao.asp"-->Olá, agora são <%=now()%>

<% strSQL = "SELECT ESTADO_DESC FROM TB_ESTADO WHERE PAIS='Brasil' ORDER BY ESTADO_DESC"
   call abreConexao() : set objRecordset = CreateObject("ADODB.Recordset") : objRecordset.Open strSQL, objConexao

   while NOT objRecordset.EOF%>

      Estado: <%=ObjRecordset("ESTADO_DESC")%><br/>

<% objRecordset.MoveNext : Wend : objRecordset.Close : set objRecordset = Nothing : call fechaConexao()%>

 

 

Este é um método eficiente de conectar ao Banco de dados APENAS quando desejamos.

  • Quando não há necessidade de puxar os dados do banco, não há conexão. Consequentemente, mais rapidez nas páginas.
  • Podemos conectar e desconectar sempre que houver necessidade, não importa a quantidade de novas consultas.

 

 

No próximo POST, estarei incrementando este artigo, na qual é possível montar uma GRID separando o HTML do ASP - ver Spaghetti.

2010 - Leonardo Breda