ASP Aula 7: ASP e banco de dados (2)
Autor:Eve Cole
Data da Última Atualização:2009-05-30 19:55:02
Na palestra anterior, aprendemos como estabelecer uma conexão com o banco de dados e recuperar dados do banco de dados. O conteúdo de hoje é como adicionar novos dados ao banco de dados, modificar e excluir dados do banco de dados.
1. Método 1 para adicionar novos dados ao banco de dados: Use instruções SQL, por exemplo wuf50.asp.
Para simplificar procedimentos futuros, a parte de conexão com o banco de dados Access é colocada em um arquivo. Este arquivo não será explicado quando for necessário no futuro.
<% 'AdoAccess.asp
Opção Explícita
Resposta.Expira = 0
'Parte 1: Estabelecendo uma conexão
Dim Cnn, StrCnn
Definir Cnn = Server.CreateObject("ADODB.Connection")
StrCnn = "Provedor = Microsoft.Jet.OLEDB.4.0; Fonte de dados = C:InetpubhomeaspNorthwind.mdb"
Cnn.Open StrCnn
%>
Programa wuf50.asp
<% @LANGUAGE = VBScript%>
<!--#include file="AdoAccess.asp"-->
<% 'wuf50.asp
'Parte 2: Adicionar novos dados usando o objeto Execute of Connection
Dim StrSQL, rsTest
StrSQL = "INSERT INTO remetente (nome da empresa, número de telefone) VALUES('wu''feng','0571-7227298')"
Cnn.Execute StrSQL
%>
<HTML>
<CORPO>
<% 'Parte 3: Exibir o conjunto de registros obtido no navegador
Definir rsTest = Cnn.Execute("Selecionar * Da operadora")
Faça enquanto não rsTest.EOF
Response.Write rsTest(0) & " " & rsTest(1) & " " & rsTest(2) & " " & "<BR>"
rsTest.MoveNext
Laço
'Parte 4: Limpando o campo de batalha
Cnn.fechar
Definir rsTest = Nada: Definir Cnn = Nada
%>
</BODY>
</HTML>
Observe os seguintes pontos:
1. Ao usar instruções SQL para adicionar dados a um banco de dados Access, você deve usar Insert Into. Para adicionar dados a um banco de dados SQL Server, basta usar Insert.
2. O formato de adição de dados usando instruções SQL é como no exemplo acima. Observe que 'wu'feng' precisa ser adicionado na instrução porque as instruções SQL usam ' como delimitador de strings.
3. Combinando este exemplo com o que você aprendeu anteriormente, você pode adicionar dados de um formulário HTML.
4. Observe que existe um campo com um tipo de dados de numeração automática, como "Shipper ID" neste exemplo, portanto você não precisa pensar em como escrever código para obter um número incremental.
Método 2: Use o método Addnew do objeto Recordset, por exemplo wuf51.asp.
<% @LANGUAGE = VBScript%>
<!--#include file="AdoAccess.asp"-->
<!--#include file="adovbs.inc"-->
<% 'wuf51.asp
'Parte 2: Adicionar novos dados usando o método AddNew do objeto Recordset
Dim StrSQL, rsTest
Definir rsTest = server.CreateObject("ADODB.Recordset")
rsTest.CursorType = adOpenKeySet 'adOpenDynamic
'Sem a frase a seguir, o banco de dados não poderá ser atualizado. Por quê?
rsTest.LockType = adLockOptimistic
rsTest.Open "Remetente",Cnn,,,adCmdTable
rsTest.AddNew
rsTest("Nome da Empresa") = "wu'feng"
rsTest("Telefone") = "0571-7227298"
rsTest.Update
%>
<HTML>
<CORPO>
<% 'Parte 3: Exibir o conjunto de registros obtido no navegador
'Move o ponteiro do banco de dados para o primeiro registro da tabela
Se não for rsTest.EOF <> 0 Então
Response.Write "Existem [" & rsTest.RecordCount & "] dados na tabela" & "<Br><Br>"
rsTest.MoveFirst
Terminar se
Faça enquanto não rsTest.EOF
Response.Write rsTest(0) & " " & rsTest(1) & " " & rsTest(2) & " " & "<BR>"
rsTest.MoveNext
Laço
'Parte 4: Limpando o campo de batalha
Cnn.fechar
Definir rsTest = Nada: Definir Cnn = Nada
%>
</BODY>
</HTML>
analisar:
1. Por que definir rsTest.LockType = adLockOptimistic
A propriedade LockType do objeto Recordset possui quatro valores opcionais:
adLockReadOnly - o valor padrão, indicando que o conjunto de registros é aberto em modo somente leitura, portanto os dados não podem ser alterados. Nesse caso, ocorrerá um erro ao usar o método AddNew.
adLockPessimistic - Bloqueio conservador de registros (entrada por entrada). Use o método de bloqueio imediato dos registros da fonte de dados durante a edição. Neste momento, outros usuários não podem acessar os dados.
adLockOptimistic – Bloqueio de registros abertos (entrada por entrada). Os registros são bloqueados somente quando o método Update é chamado. Pense bem: essa propriedade é semelhante às propriedades Lock e Unlock do objeto Application de que falamos?
adLockBatchOptimistic - atualizações em lote abertas. Usado para atualizar dados em lotes, correspondendo ao método UpdateBatch.
Aliás, vamos citar o atributo CursorType mencionado na aula anterior, que também possui quatro valores:
adOpenForwardOnly - Cursor somente para frente, valor padrão, só pode rolar para frente no registro. Isso economiza recursos e melhora o desempenho.
adOpenStatic - cursor estático. Uma cópia estática de uma coleção de registros que pode ser usada para localizar dados ou gerar relatórios. Além disso, as adições, alterações ou exclusões feitas por outros usuários não são visíveis. Recomenda-se usar apenas esses dois cursores em ASP.
adOpenKeyset - Cursor do conjunto de chaves. Os cursores de conjunto de chaves são semelhantes aos cursores dinâmicos, exceto que são proibidos de visualizar registros adicionados por outros usuários e de acessar registros excluídos por outros usuários. As alterações de dados feitas por outros usuários ainda estarão visíveis.
adOpenDynamic - cursor dinâmico. Pode ver adições, alterações e exclusões feitas por outros usuários. Todos os tipos de movimentos dentro do conjunto de registros são permitidos.
O que é certo é que tal descrição abstrata é um tanto enganosa e ainda não a entendo muito bem.
(1) Se você recuperar apenas dados, basta usar o valor padrão;
(2) Se você usar o método Update para atualizar um dado, use adLockOptimistic para o atributo LockType e use adLockBatchOptimistic se usar o método UpdataBatch para atualizar dados em lotes.
(3) Se houver uma ação de gravação no banco de dados, geralmente é suficiente usar adOpenKeyset para o atributo CursorType.
Que tal? Mesmo que você ainda não entenda, você pode usá-lo.
2. Se você não tiver experiência em bancos de dados, geralmente é benéfico usar rsTest.MoveFirst para mover o ponteiro para o primeiro registro antes que a saída seja exibida. No entanto, se não houver dados no banco de dados, o método MoveFirst não poderá ser usado, portanto, use o atributo rsTest.EOF para determinar se há dados no banco de dados antes do uso.
3. A propriedade RecordCount (para obter o número de registros no conjunto de registros) pode ser usada somente quando o tipo de cursor estiver definido como adOpenKeyset ou adOpenStatic.
2. Modifique os dados existentes no banco de dados. Método 1: Use instruções SQL. Por exemplo, wuf52.asp, o programa é basicamente semelhante ao wuf50.asp, apenas as partes principais estão listadas aqui.
'Parte 2: Modificar dados usando o método Execute do objeto Connection
Dim StrSQL, rsTest
StrSQL = "ATUALIZAR operadora SET telefone = '(503) 555-3188' WHERE telefone LIKE '%99%'"
Cnn.Execute StrSQL
Para modificar os dados, você não precisa usar INSERT INTO...VALUES, mas usar a instrução UPDATE...SET A cláusula WHERE significa alterar o número de telefone que contém a string "99" ("LIKE" e "%). " são frequentemente usados em consultas difusas) para (503) 555-3188, se nenhuma condição for definida, todos os números de telefone na tabela serão alterados.
Método 2: Use o método Update do objeto Recordset. Programa wuf53.asp (semelhante à rotina wuf51.asp)
'Parte 2: Modificar dados usando o método Update do objeto Recordset
Dim StrSQL, rsTest
Definir rsTest = server.CreateObject("ADODB.Recordset")
rsTest.LockType = adLockOptimistic
StrSQL = "SELECIONE sobrenome, nome, data de nascimento FROM funcionário WHERE data de nascimento = #55-03-04#"
rsTest.Open StrSQL, Cnn,,,adCmdText
rsTest("nome") = "Chinês"
rsTest.Update
analisar:
1. Na instrução SQL, se o banco de dados for um banco de dados Access, a data deverá ser colocada entre #55-03-04#, como neste exemplo se for um banco de dados SQL Server, a data deverá ser colocada entre '55-03; -04'.
2. Em rsTest.Open StrSQL, Cnn,,,adCmdText, como o primeiro parâmetro é uma instrução SQL, o quinto parâmetro é adCmdText. Na verdade, o quinto parâmetro pode ser omitido, mas adicioná-lo tornará a execução do script mais eficiente.
3. Usando o método um, você pode atualizar todos os registros que atendem às condições (vários registros ou um registro) de uma só vez, mas a atualização no método dois só pode modificar o registro atual (o primeiro registro que atende às condições).
3. Exclua dados do banco de dados. Método 1: Use instruções SQL. Rotina wuf55.asp
'Parte 2: Use instruções SQL para excluir dados
Dim StrSQL, rsTest
StrSQL = "DELETE FROM operadora WHERE número de telefone = '0571-7227298'"
Cnn.Execute StrSQL
Método 2: Use o método Delete do objeto Recordset. Rotina wuf56.asp
'Parte 2: Use o método Delete do objeto Recordset para excluir dados
Dim StrSQL, rsTest
Definir rsTest = server.CreateObject("ADODB.Recordset")
rsTest.LockType = adLockOptimistic
StrSQL = "SELECIONE * DA operadora WHERE número de telefone = '0571-7227298'"
rsTest.Open StrSQL, Cnn,,,adCmdText
Embora não seja rsTest.EOF
rsTest.Delete
rsTest.MoveNext
Wend
Se houver vários registros no conjunto de registros que atendam às condições, você deverá usar um loop. Caso contrário, o método Delete excluirá apenas o registro atual, ou seja, o primeiro registro que atender às condições.
4. Outros conhecimentos úteis
1. Atualizando dados em lotes Acima falamos sobre como usar o método Update do objeto Recordset para atualizar dados. Na verdade, o objeto Recordset pode suportar dois tipos de atualizações: atualizações imediatas e atualizações em lote.
Com a atualização imediata, todas as alterações nos dados serão gravadas na fonte de dados atual imediatamente assim que o método Update for chamado.
As atualizações em lote permitem que um provedor armazene em cache alterações em vários registros e, em seguida, use o método UpdateBatch para transferi-las para o banco de dados em uma única chamada. Ao atualizar vários registros, as atualizações em lote são mais eficientes do que as atualizações imediatas.
O padrão é o modo de atualização imediata. Para usar o modo de atualização em lote, use um cursor de cliente, como wuf54.asp.
<% @LANGUAGE = VBScript%>
<!--#include file="AdoAccess.asp"-->
<!--#include file="adovbs.inc"-->
<% 'wuf54.asp
'Parte 2: Modo de atualização em lote
Dim StrSQL, rsTest
Definir rsTest = server.CreateObject("ADODB.Recordset")
rsTest.CursorLocation = adUseClient 'Usar tipo de cursor do cliente
rsTest.LockType = adLockBatchOptimistic
StrSQL = "SELECT * FROM operadora WHERE telefone LIKE '%99%'"
rsTest.Open StrSQL, Cnn,,,adCmdText
rsTest.MoveFirst
Embora não seja rsTest.EOF
rsTest("Nome da Empresa") = "Chinês"
rsTest.MoveNext
Wend
rsTest.UpdateBatch
%>
<HTML>
<CORPO>
<% 'Parte 3: Exibir o conjunto de registros obtido no navegador
rsTest.Requery
Faça enquanto não rsTest.EOF
Response.Write rsTest(0) & " " & rsTest(1) & " " & rsTest(2) & " " & "<BR>"
rsTest.MoveNext
Laço
'Parte 4: Limpando o campo de batalha
Cnn.fechar
Definir rsTest = Nada: Definir Cnn = Nada
%>
</BODY>
</HTML>
Perceber:
1) rsTest.CursorLocation = adUseClient tem dois valores, o outro valor é adUseServer (padrão). Para iniciantes, o tipo de cursor do objeto Recordset é uma parte difícil, não vou apresentá-lo em detalhes aqui para evitar ficar cada vez mais confuso. . Por favor, explore lentamente no processamento real (tente mais).
2) rsTest.Requery: Use o método Requery para atualizar todo o conteúdo do objeto Recordset da fonte de dados. Chamar esse método equivale a chamar os métodos Close e Open sucessivamente.
2. Aprenda a usar a propriedade Filter do objeto Recordset
<% @LANGUAGE = VBScript%>
<!--#include file="AdoAccess.asp"-->
<!--#include file="adovbs.inc"-->
<% 'wuf57.asp
'Parte 2: Usando a propriedade Filter do objeto Recordset
Dim StrSQL, rsTest
Definir rsTest = server.CreateObject("ADODB.Recordset")
rsTest.CursorType = adOpenStatic
rsTest.LockType = adLockOptimistic
rsTest.Open "Remetente",Cnn,,,adCmdTable
'Filtrar os registros que atendem aos critérios, enquanto outros registros são filtrados
rsTest.Filter = "Nome da empresa = 'wu''feng'"
If rsTest.EOF Then 'Se não existir tal registro, adicione-o
rsTest.AddNew
rsTest("Nome da Empresa") = "wu'feng"
rsTest("Telefone") = "0571-7227298"
rsTest.Update
Else 'Se houver um registro que atenda à condição, modifique o primeiro registro que atenda à condição
rsTest("Telefone") = "(571) 7227298"
rsTest.Update
Terminar se
%>
<HTML>
<CORPO>
<% 'Parte 3: Exibir o conjunto de registros obtido no navegador
'Por favor, compare cuidadosamente a diferença entre sim e não na frase a seguir
'rsTest.Filter="" 'Usado para limpar o atributo Filtro
rsTest.MoveFirst
Faça enquanto não rsTest.EOF
Response.Write rsTest(0) & " " & rsTest(1) & " " & rsTest(2) & " " & "<BR>"
rsTest.MoveNext
Laço
'Parte 4: Limpando o campo de batalha
Cnn.fechar
Definir rsTest = Nada: Definir Cnn = Nada
%>
</BODY>
</HTML>
3. Além dos dois métodos apresentados acima, você também pode usar instruções SQL e o método Excute do objeto Command para manter o banco de dados. Exemplo wuf58.asp
<% @LANGUAGE = VBScript%>
<!--#include file="AdoAccess.asp"-->
<!--#include file="adovbs.inc"-->
<% 'wuf58.asp
'Parte 2: Manter o banco de dados usando instruções SQL e o método Excute do objeto Command
Dim StrSQL, rsTest, cmdChange
StrSQL = "INSERT INTO remetente (nome da empresa, número de telefone) VALUES('wu''feng','0571-7227298')"
'Criar objeto de comando.
Definir cmdChange =server.CreateObject("ADODB.Command")
Definir cmdChange.ActiveConnection = Cnn
cmdChange.CommandText = StrSQL
cmdChange.Execute
%>
<HTML>
<CORPO>
<% 'Parte 3: Exibir o conjunto de registros obtido no navegador
Definir rsTest = server.CreateObject("ADODB.Recordset")
rsTest.Open "Remetente", Cnn, , , adCmdTable
Faça enquanto não rsTest.EOF
Response.Write rsTest(0) & " " & rsTest(1) & " " & rsTest(2) & " " & "<BR>"
rsTest.MoveNext
Laço
'Parte 4: Limpando o campo de batalha
Cnn.fechar
Definir rsTest = Nada: Definir Cnn = Nada
%>
</BODY>
</HTML>
Esta palestra apresenta principalmente três métodos de manutenção de dados. Os iniciantes só precisam dominar os dois primeiros métodos. De modo geral, tente usar instruções SQL para resolver problemas, o que é simples e claro. A maior vantagem de usar objetos Recordset é que você pode fazer uso de seu grande número de propriedades e tipos de cursor ricos, e você tem mais opções, mas tem mais opções; também traz algumas dificuldades de uso. A chave é explorar mais e experimentar mais.