Conférence ASP 7 : ASP et base de données (2)
Auteur:Eve Cole
Date de mise à jour:2009-05-30 19:55:02
Dans la leçon précédente, nous avons appris comment établir une connexion avec la base de données et récupérer des données de la base de données. Le contenu d'aujourd'hui est de savoir comment ajouter de nouvelles données à la base de données, modifier et supprimer des données dans la base de données.
1. Méthode 1 pour ajouter de nouvelles données à la base de données : Utilisez des instructions SQL, par exemple wuf50.asp.
Afin de simplifier les procédures futures, la partie connexion avec la base de données Access est placée dans un fichier. Ce fichier ne sera pas expliqué quand il sera nécessaire dans le futur.
<% 'AdoAccess.asp
Option explicite
Réponse.Expire = 0
'Partie 1 : Établir une connexion
Dim Cnn, StrCnn
Définir Cnn = Server.CreateObject("ADODB.Connection")
StrCnn = "Fournisseur = Microsoft.Jet.OLEDB.4.0 ; Source de données = C:InetpubhomeaspNorthwind.mdb"
Cnn.Ouvrir StrCnn
%>
Programme wuf50.asp
<% @LANGUAGE = VBScript %>
<!--#include file="AdoAccess.asp"-->
<% ' wuf50.asp
'Partie 2 : Ajouter de nouvelles données à l'aide de l'objet Execute of Connection
Faible StrSQL, rsTest
StrSQL = "INSÉRER DANS L'expéditeur (nom de la société, numéro de téléphone) VALEURS('wu''feng','0571-7227298')"
Cnn.Exécuter StrSQL
%>
<HTML>
<CORPS>
<% 'Partie 3 : Afficher le jeu d'enregistrements obtenu sur le navigateur
Définir rsTest = Cnn.Execute("Sélectionner * De l'opérateur")
Faire sans rsTest.EOF
Réponse.Écrire rsTest(0) & " " & rsTest(1) & " " & rsTest(2) & " " & "<BR>"
rsTest.MoveNext
Boucle
'Partie 4 : Nettoyer le champ de bataille
Cnn.close
Définir rsTest = Rien : Définir Cnn = Rien
%>
</CORPS>
</HTML>
Veuillez noter les points suivants :
1. Lorsque vous utilisez des instructions SQL pour ajouter des données à une base de données Access, vous devez utiliser Insérer dans. Pour ajouter des données à une base de données SQL Server, utilisez simplement Insérer.
2. Le format d'ajout de données à l'aide d'instructions SQL est comme dans l'exemple ci-dessus. Notez que « wu'feng » doit être ajouté dans l'instruction car les instructions SQL utilisent « comme délimiteur de chaînes.
3. En combinant cet exemple avec ce que vous avez appris précédemment, vous pouvez ajouter des données à partir d'un formulaire HTML.
4. Notez qu'il existe un champ avec un type de données de numérotation automatique, tel que « ID de l'expéditeur » dans cet exemple, vous n'avez donc pas besoin de réfléchir à la façon d'écrire du code pour obtenir un numéro incrémentiel.
Méthode 2 : utilisez la méthode Addnew de l'objet Recordset, par exemple wuf51.asp.
<% @LANGUAGE = VBScript %>
<!--#include file="AdoAccess.asp"-->
<!--#include file="adovbs.inc"-->
<% ' wuf51.asp
'Partie 2 : Ajouter de nouvelles données à l'aide de la méthode AddNew de l'objet Recordset
Faible StrSQL, rsTest
Définir rsTest = server.CreateObject("ADODB.Recordset")
rsTest.CursorType = adOpenKeySet 'adOpenDynamic
« Sans la phrase suivante, la base de données ne pourra pas être mise à jour. Pourquoi ?
rsTest.LockType = adLockOptimistic
rsTest.Ouvrir "Expéditeur",Cnn,,,adCmdTable
rsTest.AddNew
rsTest("Nom de la société") = "wu'feng"
rsTest("Téléphone") = "0571-7227298"
rsTest.Mise à jour
%>
<HTML>
<CORPS>
<% 'Partie 3 : Afficher le jeu d'enregistrements obtenu sur le navigateur
'Déplacer le pointeur de la base de données vers le premier enregistrement de la table
Si Non rsTest.EOF <> 0 Alors
Response.Write "Il y a [" & rsTest.RecordCount & "] éléments de données dans le tableau" & "<Br><Br>"
rsTest.MoveFirst
Fin si
Faire sans rsTest.EOF
Réponse.Écrire rsTest(0) & " " & rsTest(1) & " " & rsTest(2) & " " & "<BR>"
rsTest.MoveNext
Boucle
'Partie 4 : Nettoyer le champ de bataille
Cnn.close
Définir rsTest = Rien : Définir Cnn = Rien
%>
</CORPS>
</HTML>
analyser:
1. Pourquoi définir rsTest.LockType = adLockOptimistic
La propriété LockType de l'objet Recordset a quatre valeurs facultatives :
adLockReadOnly - la valeur par défaut, indiquant que le jeu d'enregistrements est ouvert en mode lecture seule, donc les données ne peuvent pas être modifiées. Dans ce cas, une erreur se produira lors de l'utilisation de la méthode AddNew.
adLockPessimistic - Verrouillage conservateur des enregistrements (entrée par entrée). Utilisez la méthode de verrouillage immédiat des enregistrements de la source de données lors de l'édition. Pour le moment, les autres utilisateurs ne peuvent pas accéder aux données.
adLockOptimistic – Verrouillage d'enregistrement ouvert (entrée par entrée). Les enregistrements sont verrouillés uniquement lorsque la méthode Update est appelée. Pensez-y, cette propriété est-elle similaire aux propriétés Lock et Unlock de l'objet Application dont nous avons parlé ?
adLockBatchOptimistic - ouvre les mises à jour par lots. Utilisé pour mettre à jour les données par lots, correspondant à la méthode UpdateBatch.
Au fait, mentionnons l'attribut CursorType mentionné dans le cours précédent, qui a également quatre valeurs :
adOpenForwardOnly : le curseur vers l'avant uniquement, valeur par défaut, ne peut faire défiler que vers l'avant dans l'enregistrement. Cela économise des ressources et améliore les performances.
adOpenStatic - curseur statique. Copie statique d'une collection d'enregistrements pouvant être utilisée pour rechercher des données ou générer des rapports. De plus, les ajouts, modifications ou suppressions effectués par d'autres utilisateurs ne sont pas visibles. Il est recommandé d'utiliser uniquement ces deux curseurs en ASP.
adOpenKeyset - Curseur de jeu de clés. Les curseurs Keyset sont similaires aux curseurs dynamiques, sauf qu'il leur est interdit d'afficher les enregistrements ajoutés par d'autres utilisateurs et qu'il leur est interdit d'accéder aux enregistrements supprimés par d'autres utilisateurs. Les modifications de données apportées par d'autres utilisateurs seront toujours visibles.
adOpenDynamic - curseur dynamique. Peut voir les ajouts, les modifications et les suppressions effectués par d'autres utilisateurs. Tous les types de déplacements au sein du jeu d'enregistrements sont autorisés.
Ce qui est sûr, c’est qu’une description aussi abstraite est quelque peu spécieuse, et je ne la comprends toujours pas très bien.
(1) Si vous récupérez uniquement des données, utilisez simplement la valeur par défaut ;
(2) Si vous utilisez la méthode Update pour mettre à jour une donnée, utilisez adLockOptimistic pour l'attribut LockType et utilisez adLockBatchOptimistic si vous utilisez la méthode UpdataBatch pour mettre à jour les données par lots.
(3) S'il existe une action d'écriture dans la base de données, il suffit généralement d'utiliser adOpenKeyset pour l'attribut CursorType.
Et ça ? Même si vous ne le comprenez pas encore, vous pouvez l’utiliser.
2. Si vous n'êtes pas familier avec les bases de données, il est souvent avantageux d'utiliser rsTest.MoveFirst pour déplacer le pointeur vers le premier enregistrement avant que la sortie ne soit affichée. Toutefois, s'il n'y a aucune donnée dans la base de données, la méthode MoveFirst ne peut pas être utilisée, utilisez donc l'attribut rsTest.EOF pour déterminer s'il y a des données dans la base de données avant utilisation.
3. La propriété RecordCount (pour obtenir le nombre d'enregistrements dans le jeu d'enregistrements) peut être utilisée uniquement lorsque le type de curseur est défini sur adOpenKeyset ou adOpenStatic.
2. Modifiez les données existantes dans la base de données. Méthode 1 : utilisez les instructions SQL. Par exemple, wuf52.asp, le programme est fondamentalement similaire à wuf50.asp, seuls les éléments clés sont répertoriés ici.
'Partie 2 : Modifier les données à l'aide de la méthode Execute de l'objet Connection
Faible StrSQL, rsTest
StrSQL = "MISE À JOUR de l'opérateur SET phone = '(503) 555-3188' OÙ le téléphone COMME '%99%'"
Cnn.Exécuter StrSQL
Pour modifier les données, vous n'avez pas besoin d'utiliser INSERT INTO...VALUES, mais utilisez l'instruction UPDATE...SET. La clause WHERE signifie changer le numéro de téléphone contenant la chaîne "99" ("LIKE" et "%). " sont souvent utilisés dans les requêtes floues) au (503) 555-3188, si aucune condition n'est définie, tous les numéros de téléphone du tableau seront modifiés.
Méthode 2 : utilisez la méthode Update de l’objet Recordset. Programme wuf53.asp (similaire à la routine wuf51.asp)
'Partie 2 : Modifier les données à l'aide de la méthode Update de l'objet Recordset
Faible StrSQL, rsTest
Définir rsTest = server.CreateObject("ADODB.Recordset")
rsTest.LockType = adLockOptimistic
StrSQL = "SELECT nom, prénom, date de naissance FROM employé OÙ date de naissance = #55-03-04#"
rsTest.Open StrSQL, Cnn,,,adCmdText
rsTest("nom") = "Chinois"
rsTest.Mise à jour
analyser:
1. Dans l'instruction SQL, si la base de données est une base de données Access, la date doit être placée entre #55-03-04#, comme dans cet exemple, s'il s'agit d'une base de données SQL Server, la date doit être placée entre '55-03 ; -04'.
2. Dans rsTest.Open StrSQL, Cnn,,,adCmdText, puisque le premier paramètre est une instruction SQL, le cinquième paramètre est adCmdText. En fait, le cinquième paramètre peut être omis, mais son ajout rendra l'exécution du script plus efficace.
3. En utilisant la première méthode, vous pouvez mettre à jour tous les enregistrements qui remplissent les conditions (plusieurs enregistrements ou un enregistrement) en même temps, mais la mise à jour dans la deuxième méthode ne peut modifier que l'enregistrement actuel (le premier enregistrement qui remplit les conditions).
3. Supprimez les données de la base de données Méthode 1 : utilisez les instructions SQL. Routine wuf55.asp
'Partie 2 : Utiliser des instructions SQL pour supprimer des données
Faible StrSQL, rsTest
StrSQL = "SUPPRIMER DE L'opérateur OÙ numéro de téléphone = '0571-7227298'"
Cnn.Exécuter StrSQL
Méthode 2 : utilisez la méthode Supprimer de l’objet Recordset. Routine wuf56.asp
'Partie 2 : Utiliser la méthode Supprimer de l'objet Recordset pour supprimer des données
Faible StrSQL, rsTest
Définir rsTest = server.CreateObject("ADODB.Recordset")
rsTest.LockType = adLockOptimistic
StrSQL = "SELECT * FROM carrier WHERE numéro de téléphone = '0571-7227298'"
rsTest.Open StrSQL, Cnn,,,adCmdText
Bien que ce ne soit pas rsTest.EOF
rsTest.Supprimer
rsTest.MoveNext
Wende
Si plusieurs enregistrements dans le jeu d'enregistrements remplissent les conditions, vous devez utiliser une boucle. Sinon, la méthode Supprimer supprime uniquement l'enregistrement actuel, c'est-à-dire le premier enregistrement qui remplit les conditions.
4. Autres connaissances utiles
1. Mise à jour des données par lots Nous avons expliqué ci-dessus comment utiliser la méthode Update de l'objet Recordset pour mettre à jour les données. En fait, l'objet Recordset peut prendre en charge deux types de mises à jour : les mises à jour immédiates et les mises à jour par lots.
Avec une mise à jour immédiate, toutes les modifications apportées aux données seront immédiatement écrites dans la source de données actuelle une fois la méthode Update appelée.
Les mises à jour par lots permettent à un fournisseur de mettre en cache les modifications apportées à plusieurs enregistrements, puis d'utiliser la méthode UpdateBatch pour les transférer vers la base de données en un seul appel. Lors de la mise à jour de plusieurs enregistrements, les mises à jour par lots sont plus efficaces que les mises à jour immédiates.
La valeur par défaut est le mode de mise à jour immédiate. Pour utiliser le mode de mise à jour par lots, utilisez un curseur client, tel que wuf54.asp.
<% @LANGUAGE = VBScript %>
<!--#include file="AdoAccess.asp"-->
<!--#include file="adovbs.inc"-->
<% ' wuf54.asp
'Partie 2 : Mode de mise à jour par lots
Faible StrSQL, rsTest
Définir rsTest = server.CreateObject("ADODB.Recordset")
rsTest.CursorLocation = adUseClient 'Utiliser le type de curseur client
rsTest.LockType = adLockBatchOptimistic
StrSQL = "SELECT * FROM carrier WHERE phone LIKE '%99%'"
rsTest.Open StrSQL, Cnn,,,adCmdText
rsTest.MoveFirst
Bien que ce ne soit pas rsTest.EOF
rsTest("Nom de la société") = "Chinois"
rsTest.MoveNext
Wende
rsTest.UpdateBatch
%>
<HTML>
<CORPS>
<% 'Partie 3 : Afficher le jeu d'enregistrements obtenu sur le navigateur
rsTest.Requery
Faire sans rsTest.EOF
Réponse.Écrire rsTest(0) & " " & rsTest(1) & " " & rsTest(2) & " " & "<BR>"
rsTest.MoveNext
Boucle
'Partie 4 : Nettoyer le champ de bataille
Cnn.close
Définir rsTest = Rien : Définir Cnn = Rien
%>
</CORPS>
</HTML>
Avis:
1) rsTest.CursorLocation = adUseClient a deux valeurs, l'autre valeur est adUseServer (par défaut). Pour les débutants, le type de curseur de l'objet Recordset est une partie difficile. Je ne le présenterai pas en détail ici pour éviter de devenir de plus en plus confus. . Veuillez explorer lentement le traitement réel (essayez davantage).
2) rsTest.Requery : utilisez la méthode Requery pour actualiser l'intégralité du contenu de l'objet Recordset de la source de données. Appeler cette méthode équivaut à appeler successivement les méthodes Close et Open.
2. Apprenez à utiliser la propriété Filter de l'objet Recordset
<% @LANGUAGE = VBScript %>
<!--#include file="AdoAccess.asp"-->
<!--#include file="adovbs.inc"-->
<% ' wuf57.asp
'Partie 2 : Utilisation de la propriété Filter de l'objet Recordset
Faible StrSQL, rsTest
Définir rsTest = server.CreateObject("ADODB.Recordset")
rsTest.CursorType = adOpenStatic
rsTest.LockType = adLockOptimistic
rsTest.Ouvrir "Expéditeur",Cnn,,,adCmdTable
'Filtrer les enregistrements qui répondent aux critères, tandis que les autres enregistrements sont filtrés
rsTest.Filter = "Nom de la société = 'wu''feng'"
Si rsTest.EOF Alors 'S'il n'existe pas d'enregistrement de ce type, ajoutez-le
rsTest.AddNew
rsTest("Nom de la société") = "wu'feng"
rsTest("Téléphone") = "0571-7227298"
rsTest.Mise à jour
Sinon 'S'il existe un enregistrement qui remplit la condition, modifiez le premier enregistrement qui remplit la condition
rsTest("Téléphone") = "(571) 7227298"
rsTest.Mise à jour
Fin si
%>
<HTML>
<CORPS>
<% 'Partie 3 : Afficher le jeu d'enregistrements obtenu sur le navigateur
"Veuillez comparer attentivement la différence entre oui et non dans la phrase suivante
'rsTest.Filter="" 'Utilisé pour effacer l'attribut Filtre
rsTest.MoveFirst
Faire sans rsTest.EOF
Réponse.Écrire rsTest(0) & " " & rsTest(1) & " " & rsTest(2) & " " & "<BR>"
rsTest.MoveNext
Boucle
'Partie 4 : Nettoyer le champ de bataille
Cnn.close
Définir rsTest = Rien : Définir Cnn = Rien
%>
</CORPS>
</HTML>
3. En plus des deux méthodes présentées ci-dessus, vous pouvez également utiliser des instructions SQL et la méthode Excute de l'objet Command pour gérer la base de données. Exemple wuf58.asp
<% @LANGUAGE = VBScript %>
<!--#include file="AdoAccess.asp"-->
<!--#include file="adovbs.inc"-->
<% ' wuf58.asp
'Partie 2 : Maintenir la base de données à l'aide d'instructions SQL et de la méthode Excute de l'objet Command
Dim StrSQL, rsTest, cmdChange
StrSQL = "INSÉRER DANS L'expéditeur (nom de la société, numéro de téléphone) VALEURS('wu''feng','0571-7227298')"
'Créer un objet de commande.
Définir cmdChange =server.CreateObject("ADODB.Command")
Définir cmdChange.ActiveConnection = Cnn
cmdChange.CommandText = StrSQL
cmdChange.Execute
%>
<HTML>
<CORPS>
<% 'Partie 3 : Afficher le jeu d'enregistrements obtenu sur le navigateur
Définir rsTest = server.CreateObject("ADODB.Recordset")
rsTest.Ouvrir "Expéditeur", Cnn, , , adCmdTable
Faire sans rsTest.EOF
Réponse.Écrire rsTest(0) & " " & rsTest(1) & " " & rsTest(2) & " " & "<BR>"
rsTest.MoveNext
Boucle
'Partie 4 : Nettoyer le champ de bataille
Cnn.close
Définir rsTest = Rien : Définir Cnn = Rien
%>
</CORPS>
</HTML>
Cette conférence présente principalement trois méthodes de conservation des données. Les débutants n'ont qu'à maîtriser les deux premières méthodes. D'une manière générale, essayez d'utiliser des instructions SQL pour résoudre des problèmes, ce qui est simple et clair ; le plus grand avantage de l'utilisation des objets Recordset est que vous pouvez utiliser son grand nombre de propriétés et ses types de curseur riches, et que vous avez plus de choix, mais cela apporte également quelques difficultés à utiliser. La clé Il s’agit d’explorer davantage et d’expérimenter davantage.