ASP Conferencia 7: ASP y base de datos (2)
Autor:Eve Cole
Fecha de actualización:2009-05-30 19:55:02
En la conferencia anterior, aprendimos cómo establecer una conexión con la base de datos y recuperar datos de la base de datos. El contenido de hoy es cómo agregar nuevos datos a la base de datos, modificar y eliminar datos en la base de datos.
1. Método 1 para agregar nuevos datos a la base de datos: use declaraciones SQL, por ejemplo wuf50.asp.
Para simplificar procedimientos futuros, la parte de conexión con la base de datos de Access se coloca en un archivo. Este archivo no se explicará cuando sea necesario en el futuro.
<% 'AdoAccess.asp
Opción explícita
Respuesta.Expira = 0
'Parte 1: Establecer una conexión
Dim Cnn, StrCnn
Establecer Cnn = Server.CreateObject ("ADODB.Connection")
StrCnn = "Proveedor = Microsoft.Jet.OLEDB.4.0; Fuente de datos = C:InetpubhomeaspNorthwind.mdb"
Cnn.Abrir StrCnn
%>
Programa wuf50.asp
<% @LANGUAGE = VBScript %>
<!--#include file="AdoAccess.asp"-->
<% ' wuf50.asp
'Parte 2: Agregar nuevos datos usando el objeto Ejecutar de conexión
Dim StrSQL, rsTest
StrSQL = "INSERTAR EN el remitente (nombre de la empresa, número de teléfono) VALUES('wu''feng','0571-7227298')"
Cnn.Ejecutar StrSQL
%>
<HTML>
<CUERPO>
<% 'Parte 3: Mostrar el conjunto de registros obtenidos en el navegador
Establecer rsTest = Cnn.Execute("Seleccionar * Del operador")
Hacer mientras no rsTest.EOF
Respuesta.Escribir rsTest(0) & " " & rsTest(1) & " " & rsTest(2) & " " & "<BR>"
rsTest.MoveNext
Bucle
'Parte 4: Limpiar el campo de batalla
CNN.cerrar
Establecer rsTest = Nada: Establecer Cnn = Nada
%>
</CUERPO>
</HTML>
Tenga en cuenta los siguientes puntos:
1. Cuando utilice declaraciones SQL para agregar datos a una base de datos de Access, debe usar Insertar en. Para agregar datos a una base de datos de SQL Server, simplemente use Insertar.
2. El formato para agregar datos usando declaraciones SQL es como en el ejemplo anterior. Tenga en cuenta que se debe agregar 'wu'feng' en la declaración porque las declaraciones SQL usan ' como delimitador de cadenas.
3. Al combinar este ejemplo con lo que aprendió anteriormente, puede agregar datos desde un formulario HTML.
4. Tenga en cuenta que hay un campo con un tipo de datos de numeración automática, como "ID del remitente" en este ejemplo, por lo que no necesita pensar en cómo escribir código para obtener un número incremental.
Método 2: utilice el método Addnew del objeto Recordset, por ejemplo wuf51.asp.
<% @LANGUAGE = VBScript %>
<!--#include file="AdoAccess.asp"-->
<!--#include file="adovbs.inc"-->
<% ' wuf51.asp
'Parte 2: Agregar nuevos datos usando el método AddNew del objeto Recordset
Dim StrSQL, rsTest
Establecer rsTest = server.CreateObject("ADODB.Recordset")
rsTest.CursorType = adOpenKeySet 'adOpenDynamic
'Sin la siguiente oración, no se permitirá la actualización de la base de datos. ¿Por qué?
rsTest.LockType = adLockOptimista
rsTest.Abrir "Remitente", CNN,,,adCmdTable
rsTest.AñadirNuevo
rsTest("Nombre de la empresa") = "wu'feng"
rsTest("Teléfono") = "0571-7227298"
rsTest.Actualización
%>
<HTML>
<CUERPO>
<% 'Parte 3: Mostrar el conjunto de registros obtenidos en el navegador
'Mueve el puntero de la base de datos al primer registro de la tabla
Si no es rsTest.EOF <> 0 entonces
Respuesta.Escriba "Hay [" & rsTest.RecordCount & "] datos en la tabla" & "<Br><Br>"
rsTest.MoveFirst
Terminar si
Hacer mientras no rsTest.EOF
Respuesta.Escribir rsTest(0) & " " & rsTest(1) & " " & rsTest(2) & " " & "<BR>"
rsTest.MoveNext
Bucle
'Parte 4: Limpiar el campo de batalla
CNN.cerrar
Establecer rsTest = Nada: Establecer Cnn = Nada
%>
</CUERPO>
</HTML>
analizar:
1. ¿Por qué configurar rsTest.LockType = adLockOptimistic?
La propiedad LockType del objeto Recordset tiene cuatro valores opcionales:
adLockReadOnly: el valor predeterminado, que indica que el conjunto de registros se abre en modo de solo lectura, por lo que los datos no se pueden cambiar. En este caso, se producirá un error al utilizar el método AddNew.
adLockPessimistic: bloqueo conservador de registros (entrada por entrada). Utilice el método de bloquear inmediatamente los registros de la fuente de datos al editar. En este momento, otros usuarios no pueden acceder a los datos.
adLockOptimistic: bloqueo de registros abiertos (entrada por entrada). Los registros se bloquean solo cuando se llama al método Actualizar. Piénselo, ¿esta propiedad es similar a las propiedades Bloquear y Desbloquear del objeto Aplicación del que hablamos?
adLockBatchOptimistic: abre actualizaciones por lotes. Se utiliza para actualizar datos en lotes, correspondiente al método UpdateBatch.
Por cierto, mencionemos el atributo CursorType mencionado en la lección anterior, que también tiene cuatro valores:
adOpenForwardOnly: cursor de solo avance, valor predeterminado, solo puede desplazarse hacia adelante en el registro. Esto ahorra recursos y mejora el rendimiento.
adOpenStatic: cursor estático. Una copia estática de una colección de registros que se puede utilizar para buscar datos o generar informes. Además, las adiciones, cambios o eliminaciones realizadas por otros usuarios no son visibles. Se recomienda utilizar sólo estos dos cursores en ASP.
adOpenKeyset: cursor del conjunto de claves. Los cursores de conjunto de claves son similares a los cursores dinámicos, excepto que tienen prohibido ver registros agregados por otros usuarios y tienen prohibido acceder a registros eliminados por otros usuarios. Los cambios de datos realizados por otros usuarios seguirán siendo visibles.
adOpenDynamic: cursor dinámico. Puede ver las adiciones, cambios y eliminaciones realizadas por otros usuarios. Se permiten todos los tipos de movimientos dentro del conjunto de registros.
Lo cierto es que una descripción tan abstracta es algo engañosa y todavía no la entiendo del todo.
(1) Si solo recupera datos, utilice el valor predeterminado;
(2) Si usa el método Update para actualizar un dato, use adLockOptimistic para el atributo LockType y use adLockBatchOptimistic si usa el método UpdataBatch para actualizar datos en lotes.
(3) Si hay una acción de escritura en la base de datos, normalmente es suficiente usar adOpenKeyset para el atributo CursorType.
¿Qué tal? Incluso si aún no lo entiendes, puedes usarlo.
2. Si no está bien versado en bases de datos, a menudo resulta beneficioso utilizar rsTest.MoveFirst para mover el puntero al primer registro antes de que se muestre la salida. Sin embargo, si no hay datos en la base de datos, no se puede utilizar el método MoveFirst, así que utilice el atributo rsTest.EOF para determinar si hay datos en la base de datos antes de su uso.
3. La propiedad RecordCount (para obtener el número de registros en el conjunto de registros) solo se puede usar cuando el tipo de cursor está establecido en adOpenKeyset o adOpenStatic.
2. Modificar los datos existentes en la base de datos. Método 1: utilizar sentencias SQL. Por ejemplo, wuf52.asp, el programa es básicamente similar a wuf50.asp, aquí solo se enumeran las partes clave.
'Parte 2: Modificar datos usando el método Execute del objeto Connection
Dim StrSQL, rsTest
StrSQL = "ACTUALIZAR operador SET teléfono = '(503) 555-3188' DONDE teléfono COMO '%99%'"
Cnn.Ejecutar StrSQL
Para modificar los datos, no necesita usar INSERT INTO...VALUES, pero use la instrucción UPDATE...SET. La cláusula WHERE significa cambiar el número de teléfono que contiene la cadena "99" ("LIKE" y "%). " se utilizan a menudo en consultas difusas) al (503) 555-3188; si no se establecen condiciones, se cambiarán todos los números de teléfono de la tabla.
Método 2: utilice el método Update del objeto Recordset. Programa wuf53.asp (similar a la rutina wuf51.asp)
'Parte 2: Modificar datos usando el método Update del objeto Recordset
Dim StrSQL, rsTest
Establecer rsTest = server.CreateObject("ADODB.Recordset")
rsTest.LockType = adLockOptimista
StrSQL = "SELECCIONE apellido, nombre, fecha de nacimiento DEL empleado DONDE fecha de nacimiento = #55-03-04#"
rsTest.Open StrSQL, CNN,,,adCmdText
rsTest("nombre") = "chino"
rsTest.Actualización
analizar:
1. En la declaración SQL, si la base de datos es una base de datos de Access, la fecha debe incluirse en #55-03-04#, como en este ejemplo, si es una base de datos de SQL Server, la fecha debe incluirse en '55-03; -04'.
2. En rsTest.Open StrSQL, Cnn, adCmdText, dado que el primer parámetro es una declaración SQL, el quinto parámetro es adCmdText. De hecho, el quinto parámetro se puede omitir, pero agregarlo hará que la ejecución del script sea más eficiente.
3. Con el método uno, puede actualizar todos los registros que cumplan las condiciones (varios registros o un registro) a la vez, pero Actualizar en el método dos solo puede modificar el registro actual (el primer registro que cumple las condiciones).
3. Eliminar datos en la base de datos. Método 1: utilizar declaraciones SQL. Rutina wuf55.asp
'Parte 2: Utilice sentencias SQL para eliminar datos
Dim StrSQL, rsTest
StrSQL = "ELIMINAR DEL operador DONDE número de teléfono = '0571-7227298'"
Cnn.Ejecutar StrSQL
Método 2: utilice el método Eliminar del objeto Recordset. Rutina wuf56.asp
'Parte 2: Utilice el método Eliminar del objeto Recordset para eliminar datos
Dim StrSQL, rsTest
Establecer rsTest = server.CreateObject("ADODB.Recordset")
rsTest.LockType = adLockOptimista
StrSQL = "SELECCIONAR * DEL operador DONDE número de teléfono = '0571-7227298'"
rsTest.Open StrSQL, CNN,,,adCmdText
Mientras no sea rsTest.EOF
rsTest.Delete
rsTest.MoveNext
Encaminarse a
Si hay varios registros en el conjunto de registros que cumplen las condiciones, debe utilizar un bucle. De lo contrario, el método Eliminar solo elimina el registro actual, es decir, el primer registro que cumple las condiciones.
4. Otros conocimientos útiles
1. Actualización de datos en lotes Anteriormente hablamos sobre cómo usar el método de actualización del objeto Recordset para actualizar datos. De hecho, el objeto Recordset puede admitir dos tipos de actualizaciones: actualizaciones inmediatas y actualizaciones por lotes.
Con la actualización inmediata, todos los cambios en los datos se escribirán en la fuente de datos actual inmediatamente una vez que se llame al método de actualización.
Las actualizaciones por lotes permiten a un proveedor almacenar en caché los cambios en varios registros y luego utilizar el método UpdateBatch para transferirlos a la base de datos en una sola llamada. Al actualizar varios registros, las actualizaciones por lotes son más eficientes que las actualizaciones inmediatas.
El valor predeterminado es el modo de actualización inmediata. Para utilizar el modo de actualización por lotes, utilice un cursor de cliente, como wuf54.asp.
<% @LANGUAGE = VBScript %>
<!--#include file="AdoAccess.asp"-->
<!--#include file="adovbs.inc"-->
<% ' wuf54.asp
'Parte 2: modo de actualización por lotes
Dim StrSQL, rsTest
Establecer rsTest = server.CreateObject("ADODB.Recordset")
rsTest.CursorLocation = adUseClient 'Usar tipo de cursor de cliente
rsTest.LockType = adLockBatchOptimista
StrSQL = "SELECCIONAR * DEL operador DONDE el teléfono COMO '%99%'"
rsTest.Open StrSQL, CNN,,,adCmdText
rsTest.MoveFirst
Mientras no sea rsTest.EOF
rsTest("Nombre de la empresa") = "Chino"
rsTest.MoveNext
Encaminarse a
rsTest.UpdateBatch
%>
<HTML>
<CUERPO>
<% 'Parte 3: Mostrar el conjunto de registros obtenidos en el navegador
rsTest.Requery
Hacer mientras no rsTest.EOF
Respuesta.Escribir rsTest(0) & " " & rsTest(1) & " " & rsTest(2) & " " & "<BR>"
rsTest.MoveNext
Bucle
'Parte 4: Limpiar el campo de batalla
CNN.cerrar
Establecer rsTest = Nada: Establecer Cnn = Nada
%>
</CUERPO>
</HTML>
Aviso:
1) rsTest.CursorLocation = adUseClient tiene dos valores, el otro valor es adUseServer (predeterminado). Para los principiantes, el tipo de cursor del objeto Recordset es una parte difícil. No lo presentaré en detalle aquí para evitar confundirme cada vez más. Explore lentamente durante el procesamiento real (pruebe más).
2) rsTest.Requery: utilice el método Requery para actualizar todo el contenido del objeto Recordset de la fuente de datos. Llamar a este método equivale a llamar a los métodos Cerrar y Abrir sucesivamente.
2. Aprenda a utilizar la propiedad Filter del objeto Recordset
<% @LANGUAGE = VBScript %>
<!--#include file="AdoAccess.asp"-->
<!--#include file="adovbs.inc"-->
<% ' wuf57.asp
'Parte 2: uso de la propiedad Filter del objeto Recordset
Dim StrSQL, rsTest
Establecer rsTest = server.CreateObject("ADODB.Recordset")
rsTest.CursorType = adOpenStatic
rsTest.LockType = adLockOptimista
rsTest.Abrir "Remitente", CNN,,,adCmdTable
'Filtrar registros que cumplen con los criterios, mientras que otros registros se filtran
rsTest.Filter = "Nombre de la empresa = 'wu''feng'"
Si rsTest.EOF Entonces 'Si no existe dicho registro, agréguelo
rsTest.AñadirNuevo
rsTest("Nombre de la empresa") = "wu'feng"
rsTest("Teléfono") = "0571-7227298"
rsTest.Actualización
De lo contrario 'Si hay un registro que cumple la condición, modificar el primer registro que cumpla la condición
rsTest("Teléfono") = "(571) 7227298"
rsTest.Actualización
Terminar si
%>
<HTML>
<CUERPO>
<% 'Parte 3: Mostrar el conjunto de registros obtenidos en el navegador
'Por favor compare cuidadosamente la diferencia entre sí y no en la siguiente oración
'rsTest.Filter="" 'Se utiliza para borrar el atributo Filtro
rsTest.MoveFirst
Hacer mientras no rsTest.EOF
Respuesta.Escribir rsTest(0) & " " & rsTest(1) & " " & rsTest(2) & " " & "<BR>"
rsTest.MoveNext
Bucle
'Parte 4: Limpiar el campo de batalla
CNN.cerrar
Establecer rsTest = Nada: Establecer Cnn = Nada
%>
</CUERPO>
</HTML>
3. Además de los dos métodos presentados anteriormente, también puede utilizar declaraciones SQL y el método Excute del objeto Command para mantener la base de datos. Ejemplo wuf58.asp
<% @LANGUAGE = VBScript %>
<!--#include file="AdoAccess.asp"-->
<!--#include file="adovbs.inc"-->
<% ' wuf58.asp
'Parte 2: Mantener la base de datos usando sentencias SQL y el método Excute del objeto Command
Dim StrSQL, rsTest, cmdChange
StrSQL = "INSERTAR EN el remitente (nombre de la empresa, número de teléfono) VALUES('wu''feng','0571-7227298')"
'Crear objeto de comando.
Establecer cmdChange =server.CreateObject("ADODB.Command")
Establecer cmdChange.ActiveConnection = Cnn
cmdChange.CommandText = StrSQL
cmdChange.Ejecutar
%>
<HTML>
<CUERPO>
<% 'Parte 3: Mostrar el conjunto de registros obtenidos en el navegador
Establecer rsTest = server.CreateObject("ADODB.Recordset")
rsTest.Open "Remitente", CNN, , , adCmdTable
Hacer mientras no rsTest.EOF
Respuesta.Escribir rsTest(0) & " " & rsTest(1) & " " & rsTest(2) & " " & "<BR>"
rsTest.MoveNext
Bucle
'Parte 4: Limpiar el campo de batalla
CNN.cerrar
Establecer rsTest = Nada: Establecer Cnn = Nada
%>
</CUERPO>
</HTML>
Esta conferencia presenta principalmente tres métodos para mantener datos. Los principiantes solo necesitan dominar los dos primeros métodos. En términos generales, intente usar declaraciones SQL para resolver problemas, lo cual es simple y claro. La mayor ventaja de usar objetos Recordset es que puede aprovechar su gran cantidad de propiedades y tipos de cursor enriquecidos, y tiene más opciones; También trae algunas dificultades de uso. La clave es explorar más y experimentar más.