1. “AÑO DEL BUEN SERVICIO AL CUIDADANO”
TEMA: OBJETO SQLDATAADAPTER.
CURSO: LABORATORIO DE PROGRAMACIÓN I.
ESPECIALIDAD: INGENIERIA DE SISTEMAS Y TELEMATICA.
NOMBRE Y APELLIDO: GILDA PAMELA SILVA FLORES
DOCENTE: MARCO AURELIO PORRO CHULLI.
CILCO: IV – A AULA: 501
BAGUA GRANDE– PERÚ
2017
2.
3. Definición
DataSet es una representación residente en memoria de datos que
proporciona un modelo de programación relacional coherente e independiente
del origen de datos. DataSet representa un conjunto completo de datos que
incluye tablas, restricciones y relaciones entre las tablas.Dado que DataSet es
independiente del origen de datos, DataSet puede incluir datos locales de la
aplicación y datos de otros muchos orígenes. La interacción con los orígenes
de datos existentes se controla mediante el DataAdapter.
La propiedad SelectCommand de DataAdapter es un objeto Command que
recupera datos del origen de datos. Las
propiedades InsertCommand, UpdateCommand y DeleteCommand de DataAd
apter son objetos Command que permiten administrar las actualizaciones de
los datos en el origen de datos para reflejar las modificaciones efectuadas en
los datos de DataSet. Estas propiedades se describen más detalladamente en
Actualizar orígenes de datos con DataAdapters.
4.
5. Propiedades
NOMBRE DESCRIPCIÓN
AcceptChangesDuringFill Obtiene o establece un valor que indica si AcceptChanges se llama en
un DataRow después de agregarlo a la DataTable durante alguno de
los rellenar operaciones.(Heredado de DataAdapter).
AcceptChangesDuringUpdate Obtiene o establece si AcceptChanges se llama durante una Update.
(Heredado de DataAdapter).
Container Obtiene IContainer que contiene Component. (Heredado
de Component).
ContinueUpdateOnError Obtiene o establece un valor que específica si generar una excepción
cuando un error se produce durante una actualización de fila.
(Heredado de DataAdapter).
DeleteCommand Obtiene o establece una instrucción Transact-SQL o un procedimiento
almacenado para eliminar registros del conjunto de datos.
InsertCommand Obtiene o establece una instrucción Transact-SQL o procedimiento
almacenado para insertar nuevos registros en el origen de datos.
MissingMappingAction Determina la acción que se realizará cuando los datos de entrada no
tienen una tabla o columna correspondiente. (Heredado
de DataAdapter).
FillCommandBehavior Obtiene o establece el comportamiento del comando utilizado para
rellenar el adaptador de datos. (Heredado de DbDataAdapter).
FillLoadOption Obtiene o establece el LoadOption que determina cómo rellena el
adaptador el DataTable desde el DbDataReader.(Heredado
de DataAdapter).
6.
7. Métodos
NOMBRE DESCRIPCIÓN
CreateObjRef(Type) Crea un objeto que contiene toda la información relevante necesaria
para generar a un proxy que se utiliza para comunicarse con un objeto
remoto. (Heredado de MarshalByRefObject).
Dispose() Libera todos los recursos que usa Component. (Heredado
de Component).
Equals(Object) Determina si el objeto especificado es igual al objeto actual.
(Heredado de Object).
Fill(DataSet) Agrega o actualiza filas en el DataSet. (Heredado de DbDataAdapter).
Fill(DataSet, Int32, Int32,
String)
Agrega o actualiza filas en un intervalo especificado en el DataSet que
coincidan con las de origen de datos utilizando el DataSet y DataTable
Fill(DataSet, String) Agrega o actualiza filas en el DataSet que coincidan con las de origen
de datos utilizando el DataSet y DataTable nombres.(Heredado
de DbDataAdapter).
Fill(DataTable) Agrega o actualiza filas en un intervalo especificado en el DataSet que
coincidan con las de origen de datos utilizando el DataTable nombre.
(Heredado de DbDataAdapter).
Fill(Int32, Int32,
DataTable[])
Agrega o actualiza filas en un DataTable que coincidan con las del
origen de datos, empezando en el registro especificado y recuperar
hasta el número máximo especificado de registros. (Heredado
de DbDataAdapter).
8.
9.
10. Ejemplos
' La cadena de conexión
Dim csb As New SqlConnectionStringBuilder
With csb
' El servidor al que nos conectamos .DataSource = "(local)SQLEXPRESS"
' La base de datos que vamos a usar .InitialCatalog = "prueba"
' Usamos la seguridad integrada .IntegratedSecurity = True
End With
' Creamos la conexión
' la ponemos dentro de Using para asegurarnos de que se cierre si hay
errores Using con As New
Paso 1. Creamos el adaptador (y la conexión y el objeto Connection)
El comando SELECT es necesario para que el CommandBuilder sepa cómo
debe crear los comandos.
11. SqlConnection(csb.ConnectionString)
Dim dt As New DataTable
' Creamos el adaptador usando el objeto Connection
Dim da As New SqlDataAdapter("SELECT * FROM Table1",
con)da.MissingSchemaAction = MissingSchemaAction.AddWithKey
Paso 2. Creamos los comandos y los asignamos al adaptador, si no lo hacemos
de esta forma, al intentar acceder a los comandos desde el objeto
del DataAdapter... obtendremos un error indicando que no están creados (son
nulos).
' Creamos los comandos con el CommandBuilder
Dim cb As New SqlCommandBuilder(da)
' pero para asignarle el objeto Transaction debemos
' obtenerlos por medio de los métodos Get...Command
12. ' ya que si intentamos acceder directamente a esos comandos
' del adaptador nos indicará que no están asignados (son nulos)
da.InsertCommand = cb.GetInsertCommand()
da.UpdateCommand = cb.GetUpdateCommand()
da.DeleteCommand = cb.GetDeleteCommand()
Paso 3. Abrimos la conexión y creamos el objeto Transaction llamando al
método BeginTransaction, y asignamos ese objeto a cada uno de los comandos
del adaptador, salvo al comando de selección.
' Abrimos la conexión
con.Open() ' Creamos el objeto Transaction
Dim tran As SqlTransaction = con.BeginTransaction ' Asignamos el objeto Transaction a
los comandos
da.InsertCommand.Transaction = tran
da.UpdateCommand.Transaction = tran
da.DeleteCommand.Transaction = tran
13. Paso 4. Dentro de un bloque Try/Catch (para detectar los errores) es cuando actualizamos
los datos llamando al método Update del adaptador. Es importante que la conexión siga
abierta, ya que el objeto de la variable tran depende de esa conexión, pero el adaptador no
depende directamente de la conexión abierta en la variable con, ya que el adaptador
gestiona por su cuenta las conexiones y si ve que está cerrada, la abrirá, pero esa apertura
es independiente del objeto que hemos usado para indicarle cuál es la conexión que debe
usar... ¡un lío! pero es así...
Hay que tener en cuenta que la "aceptación" de los cambios del DataTable (o DataSet) se
hace de forma independiente de la llamada a los métodos Commit (o Rollback) del
objeto Transaction. En el caso de que todo vaya bien, el propio método Update del
adaptador se encarga de decirle a la tabla que acepte los cambios, por tanto no es necesario
llamar de forma explícita al método AcceptChanges, ya que esa es la forma
"predeterminada" de actuar (lee el comentario del código si quieres saber algo más de esto...
y, por supuesto, después te lees la documentación para informarte mejor, que con un par de
líneas de comentarios no lo vas a aprender todo). Cuando se cancela la actualización (en el
bloque Catch del ejemplo), se hace una llamada al método Rollback del objeto Transaction, y
también podrías llamar al método RejectChanges de la tabla, pero esto supondría perder
TODAS las modificaciones que hayas hecho en los datos que están en memoria. Y debido a
que esos datos están en memoria, puedes volver a actualizarlos posteriormente si así lo
consideras necesario. Nuevamente te invito a que leas los comentarios del código para que
veas qué debes hacer.
14. Try
' Para probar con un error
If chkProducirError.Checked Then
Throw New Exception("Candemore")
End If
' Actualizamos los datos de la tabla
da.Update(dt)
' Si llega aquí es que todo fue bien,
' por tanto, llamamos al método Commit
tran.Commit()
' Esto no es necesario si dejamos el valor predeterminado
' de la propiedad AcceptChangesDuringUpdate del adaptador
dt.AcceptChanges()
txtInfo.Text = "Se han actualizado los datos"
15. Catch ex As Exception
' Si hay error, desahacemos lo que se haya hecho
tran.Rollback()
' Desechar los cambios del DataTable
' si así lo estimamos oportuno,
' pero esto obligará a volver a añadir, modificar o eliminar
' nuevamente los datos.
' Por tanto, solo debemos hacerlo si no intentaremos nuevamente
' la actualización de los datos.
' Yo preguntaría al usuario antes de hacerlo...
'dt.RejectChanges()
txtInfo.Text = "ERROR: " & vbCrLf & ex.Message
End Try
16. ' Cerramos la conexión,
' aunque no es necesario ya que al finalizar
' el using se cerrará
con.Close()
End Using
Paso 5. Finalmente cerramos la conexión, aunque no es necesario hacerlo de forma
explícita ya que al incluir el objeto Connection dentro de un bloque Using, se cerrará
automáticamente.
17. Resumen
Representa un conjunto de comandos de datos y una
conexión de base de datos que se utilizan para rellenar
un DataSet y actualizar una base de datos de SQL
Server. Esta clase no se puede heredar.
SqlDataAdapter, Se utiliza como un puente entre
DataSet y SQL Server para recuperar y guardar datos.
SqlDataAdapter proporciona este puente mediante la
asignación de Fill, que cambia los datos en DataSet
para que coincidan con los datos del origen de datos; y
Update, que cambia los datos en el origen de datos
para que coincidan con los datos en DataSet utilizando
las instrucciones de Transact-SQL en el origen de datos
adecuado.
DbDataAdapter.Fill. Rellena un objeto DataSet o un
objeto DataTable.
DbDataAdapter.Update. Llama a las instrucciones
INSERT, UPDATE o DELETE respectivas para cada fila
insertada, actualizada o eliminada en DataSet.
18. Recomendaciones
Si se va a utilizar procedimientos almacenados de SQL Server para editar o
eliminar datos con DataAdapter, asegúrese de que no utiliza SET NOCOUNT
ON en la definición del procedimiento almacenado. Esto hace que el recuento
de filas afectadas vuelva a cero, lo que DataAdapter interpreta como un
conflicto de simultaneidad.
Una InvalidOperationException se producirá si el Fill se llama al método y la
tabla contiene un tipo definido por el usuario que no está disponible en el
equipo cliente.
El SqlDataAdapter se utiliza junto con SqlConnection y SqlCommand para
aumentar el rendimiento al conectarse a una base de datos de SQL Server.
19. Conclusiones
El SqlDataAdapter, actúa como puente entre un DataSet
y SQL Server para recuperar y guardar datos y
proporciona este puente mediante la asignación de Fill,
que cambia los datos en el DataSet coincidan con los
datos del origen de datos, y Update, que cambia los
datos del origen de datos coincidan con los datos en el
DataSet, mediante las instrucciones de Transact-SQL
adecuadas en el origen de datos.
La actualización se realiza por fila. Para cada fila
insertada, modificada y eliminada, el Update método
determina el tipo de cambio que se ha realizado en ella
(Insert, Update, o Delete). Según el tipo de cambio que
se haya ejecutado, el Insert, Update, o Delete plantilla del
comando se ejecuta para propagar la fila modificada al
origen de datos, cuando el SqlDataAdapter.
20. Glosario de términos
Constructor function (función constructor). La función miembro ejecutada
cuando el programa declara una instancia de una clase.
Container class (clase recipiente o contenedora). Clases utilizadas como
estructuras de datos que pueden contener un número de elementos.
Copy constructor (constructor de copia). Una función que inicializa un objeto
como una copia de otro objeto.
Coupling (acoplamiento). Grado en el que los componentes independientes de
un software se conectan. Contrasta con cohesión (cohesion).
CPU (Central Processing Unit). La parte de una computadora que ejecuta las
instrucciones de máquina.
Data field (campo de datos). Una variable que está presente en cada objeto de
una clase.
Data member (miembro dato) (C++.) Véase instance variable (variable de
instancia). Características de un tipo. Un componente dato de una clase o una
estructura.