https://es.slideshare.net/SILVA19_PAMELA/laboratorio-de-programacin-i-78071554
“AÑO DEL BUEN SERVICIO AL CIUDADANO”
TEMA: OBJETO SQLDATAADAPTER.
CURSO: LABORATORIO DE PROGRAMACIÓN I.
ESPECIALIDAD:
INGENIERIA DE SISTEMAS Y TELEMATICA.
NOMBRE: GILDA PAMELA
APELLIDO:
SILVA FLORES
DOCENTE: MARCO AURELIO
PORRO CHULL.
CILCO: IV – A AULA: 501
BAGUA GRANDE– PERÚ
2017
1.
Contenido
·
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 DataAdapter 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 enActualizar orígenes de datos con DataAdapters.
El
método Fill de DataAdapter se usa para rellenar
un objeto DataSet con
los resultados del elemento SelectCommand de DataAdapter. Fill toma como argumentos un
elemento DataSet que
se debe rellenar y un objeto DataTable o
el nombre del objeto DataTable que
se debe rellenar con las filas que devuelve SelectCommand.
TENER
EN CUENTA
Cuando utilizamos un objeto del tipo DataAdapter (por
ejemplo SqlDataAdapter)
éste se encarga de crear la conexión a la base de datos, abrir dicha conexión y
después de actualizar los datos también se encarga de cerrar la conexión. Y lo
importante es que NUNCA necesitamos un objeto Connection específico
(e independiente) para hacer todo ese proceso de conexión, ya que el adaptador
se encarga de todo ese tema por nosotros.
Pero para que todo esto de las transacciones con un DataAdapter funcione,
lo mejor es crear nuestro objeto Connection para
poder obtener la transacción por medio del método BeginTransaction (a
lo mejor hay otra forma más fácil de hacerlo, pero esta es la que yo conozco y
es la que te explico).
El segundo punto que debemos tener en cuenta es que si los comandos de
actualización, inserción y eliminación los automatizamos con un objeto del
tipo CommandBuilder tendremos
que hacer un pequeño truco para que todo funcione como debe funcionar, ya que a
esos comandos debemos asignarle el objeto Transaction que hemos obtenido por
medio del método BeginTransaction de
la conexión.
Si los comandos de actualización los creamos de forma manual, tendremos
que hacer lo
que te expliqué en el artículo anterior para asignar el objeto Transaction que
cada comando debe usar. Aunque esto no es demasiado útil, al menos si queremos
tener la "automatización" que nos da el modo desconectado... pero
bueno, que sepas que se puede hacer.
En cualquier caso, solo debemos asignar el
objeto de la transacción a los comandos INSERT, UPDATE y DELETE, pero no al de
selección. Y si algunos de esos tres comandos no vamos a usarlo, por ejemplo
porque no permitamos eliminar datos, no será necesario crear el comando
correspondiente y por tanto no hay que asignarle nada... pero ante la duda...
lo mejor es asignarlo a todos, al menos si usamos un objeto SqlCommandBuilder,
para que no tengamos un error por falta de "previsión".
·
Propiedades
NOMBRE
|
DESCRIPCIÓN
|
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).
|
|
Obtiene IContainer que contiene Component. (Heredado de Component).
|
|
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).
|
|
Obtiene o establece una
instrucción Transact-SQL o un procedimiento almacenado para eliminar
registros del conjunto de datos.
|
|
Obtiene o establece una instrucción Transact-SQL
o procedimiento almacenado para insertar nuevos registros en el origen de
datos.
|
|
Determina la acción que se
realizará cuando los datos de entrada no tienen una tabla o columna
correspondiente. (Heredado de DataAdapter).
|
|
Obtiene o establece el comportamiento del comando
utilizado para rellenar el adaptador de datos. (Heredado de DbDataAdapter).
|
|
Obtiene o establece el LoadOption que determina cómo
rellena el adaptador el DataTable desde el DbDataReader.(Heredado
de DataAdapter).
|
·
Métodos
NOMBRE
|
DESCRIPCIÓN
|
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).
|
|
Agrega o actualiza filas en el DataSet que
coincidan con las de origen de datos utilizando el DataSet y DataTable nombres.(Heredado
de DbDataAdapter).
|
|
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).
|
|
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).
|
|
Agrega una DataTable denominada
"Table" para el DataSet especificado
y configura el esquema para que coincida con el origen de datos basado en
el SchemaType especificado.(Heredado
de DbDataAdapter).
|
|
Agrega un elemento DataTable denominado
"Table" para el elemento DataSet especificado
y configura el esquema para que coincida con el del origen de datos basado en
los elementos especificados SchemaType y DataTable.(Heredado
de DbDataAdapter).
|
|
Configura el esquema del elemento DataTable especificado
en función del elemento SchemaTypeespecificado.
(Heredado de DbDataAdapter).
|
|
Obtiene los parámetros establecidos por el
usuario al ejecutar una instrucción SELECT de SQL. (Heredado de DbDataAdapter).
|
|
Recupera el objeto de servicio de duración actual
que controla la directiva de duración de esta instancia. (Heredado de MarshalByRefObject).
|
|
Obtiene un objeto de servicio de duración para
controlar la directiva de duración de esta instancia. (Heredado de MarshalByRefObject).
|
|
Restablece FillLoadOption a
su estado predeterminado y causas DataAdapter.Fill respetando AcceptChangesDuringFill.(Heredado
de DataAdapter).
|
|
Actualiza los valores de la base de datos
mediante la ejecución de las instrucciones INSERT, UPDATE o DELETE
respectivas para cada inserta, actualiza o elimina la fila de la matriz
especificada en el DataSet.
(Heredado de DbDataAdapter).
|
|
Actualiza los valores de la base de datos
mediante la ejecución de las instrucciones INSERT, UPDATE o DELETE
respectivas para cada inserta, actualiza o elimina la fila de la manera
especificada DataSet.
(Heredado de DbDataAdapter).
|
|
Actualiza los valores de la base de datos
mediante la ejecución de las instrucciones INSERT, UPDATE o DELETE
respectivas para cada uno de ellos insertarlos, actualizarlos o fila
eliminada de la DataSet con
los valores especificados DataTable nombre.(Heredado
de DbDataAdapter).
|
|
Actualiza los valores de la base de datos
mediante la ejecución de las instrucciones INSERT, UPDATE o DELETE
respectivas para cada inserta, actualiza o elimina la fila de la manera
especificada DataTable.
(Heredado de DbDataAdapter).
|
·
Ejemplos
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.
' 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 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
' 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
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.
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"
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
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.
'
Cerramos la conexión,
'
aunque no es necesario ya que al finalizar
' el
using se cerrará
con.Close()
End Using
1.
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.
Transact SQL .Es el lenguaje de programación que proporciona SQL Server
para ampliar SQL con los elementos característicos de los lenguajes de
programación: variables, sentencias de control de flujo.
En
realidad no tiene mucho sentido hacer este tipo de comprobaciones de que todo
va bien cuando usamos un adaptador, ya que la actualización (o modificación de
los datos) se hace siempre en modo desconectado, por tanto siempre podemos
comprobar que la información que hemos alterado está bien antes de hacer que se
actualice la base de datos, pero... como siempre puede ocurrir cualquier
imprevisto a la hora de que el adaptador ejecute los comandos correspondientes,
pues no estará de más que tengamos esta forma de comprobar que esa
actualización de datos se ha hecho de forma correcta, y lo mejor para comprobar
que todo se hace bien es usando una transacción.
2.
Summary
Represents a set of data commands and a
database connection that are used to populate a DataSet and update a SQL Server
database. This class can not be inherited. SqlDataAdapter, Used as a bridge
between DataSet and SQL Server to retrieve and save data. SqlDataAdapter
provides this bridge by assigning Fill, which changes the data in the DataSet
to match the data in the data source; And Update, which changes the data in the
data source to match the data in the DataSet by using the Transact-SQL
statements in the appropriate data source.
DbDataAdapter.Fill. Populate a DataSet object
or a DataTable object.
DbDataAdapter.Update. Calls the respective
INSERT, UPDATE, or DELETE statements for each row inserted, updated, or deleted
in DataSet.
Transact SQL. It is the programming language
that provides SQL Server to extend SQL with the characteristic elements of
programming languages: variables, flow control statements.
Actually it does not make much sense to make
these kind of checks that everything goes well when we use an adapter, since updating
(or modifying the data) is always done in disconnected mode, so we can always
verify that the information we have altered Is okay before making the database
update, but ... as always can happen any unforeseen when the adapter executes
the corresponding commands, it will not be bad if we have this way to verify
that this update of Data has been done correctly, and the best thing to check
that everything is done right is using a transaction.
3.
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.
4.
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.
5.
Glosario de términos
Ø Constructor
(constructor) (C++). Una función
miembro (método) con el mismo nombre de una clase en la que está definida. Un
constructor se invoca para inicializar nuevas instancias de la clase. En C++ un
constructor tiene el mismo nombre que su clase.
Class Text {
Public:
Text(); // constructor
};
En C++ el compilador llama a
un constructor por defecto siempre que se define una instancia de una clase. Un
tipo definido por el usuario (clase)
puede tener más de un constructor, pero ninguno puede ser visual.
Ø 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.
Ø Declaration (declaración). Una sentencia que anuncia la existencia de una
variable, función o clase pero no la define. Especifica un nombre y tipo de
identificador.
Ø Default constructor (constructor por defecto). Un
constructor que se puede invocar sin parámetros.
6.
Bibliografía o
Linkografía
·
https://msdn.microsoft.com/es-es/.../system.data.sqlclient.sqldataadapter(v=vs.110).aspx
·
https://msdn.microsoft.com/es-es/library/bh8kx08z(v=vs.110).aspx
·
https://juanmaritoniadi.wordpress.com/2010/09/28/que-es-sqldataadapter/
·
https://es.slideshare.net/DEYSYSEGURAMONTENEGR/sqldataadapter
·
https://ja.scribd.com/presentation/234619358/DATAADAPTER-1
https://es.scribd.com/document/.../Instructivo-Conexion-SQL-Server-Desde-NET
No hay comentarios:
Publicar un comentario