SlideShare una empresa de Scribd logo
1 de 25
“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
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.
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).
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).
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.
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
' 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.
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.
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.
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.
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.
LABORATORIO DE PROGRAMACIÓN I.
LABORATORIO DE PROGRAMACIÓN I.
LABORATORIO DE PROGRAMACIÓN I.
LABORATORIO DE PROGRAMACIÓN I.
LABORATORIO DE PROGRAMACIÓN I.

Más contenido relacionado

La actualidad más candente (19)

Prepared statement
Prepared statementPrepared statement
Prepared statement
 
Guia7 java
Guia7 javaGuia7 java
Guia7 java
 
Prepared statement
Prepared statementPrepared statement
Prepared statement
 
Objeto Sql Command
Objeto Sql CommandObjeto Sql Command
Objeto Sql Command
 
Tutorial JPA Parte 1 : CRUD BASICO CON JPA Y SWING en NETBEANS
Tutorial  JPA Parte 1  : CRUD BASICO CON JPA Y SWING en NETBEANSTutorial  JPA Parte 1  : CRUD BASICO CON JPA Y SWING en NETBEANS
Tutorial JPA Parte 1 : CRUD BASICO CON JPA Y SWING en NETBEANS
 
Ayuda la clase statement
Ayuda la clase statementAyuda la clase statement
Ayuda la clase statement
 
Objeto command
Objeto commandObjeto command
Objeto command
 
Objeto sqlcomand
Objeto sqlcomandObjeto sqlcomand
Objeto sqlcomand
 
Statement
StatementStatement
Statement
 
Diapositivas de objeto sqlcommand
Diapositivas de objeto sqlcommandDiapositivas de objeto sqlcommand
Diapositivas de objeto sqlcommand
 
Objeto SqlCommand
Objeto SqlCommandObjeto SqlCommand
Objeto SqlCommand
 
CONECTAR C# CON POSTGRESQL USANDO NPGSQL 2.0.11
CONECTAR  C# CON POSTGRESQL  USANDO NPGSQL 2.0.11CONECTAR  C# CON POSTGRESQL  USANDO NPGSQL 2.0.11
CONECTAR C# CON POSTGRESQL USANDO NPGSQL 2.0.11
 
Objeto sqlcommand
Objeto sqlcommandObjeto sqlcommand
Objeto sqlcommand
 
Sqlcommand
SqlcommandSqlcommand
Sqlcommand
 
Objeto sql.data table
Objeto sql.data tableObjeto sql.data table
Objeto sql.data table
 
INFOSAN Delphi 603-752
INFOSAN Delphi  603-752INFOSAN Delphi  603-752
INFOSAN Delphi 603-752
 
Espacio de nombres system.data.sqlclient
Espacio de nombres system.data.sqlclientEspacio de nombres system.data.sqlclient
Espacio de nombres system.data.sqlclient
 
Find File Servlet DB
Find File Servlet DBFind File Servlet DB
Find File Servlet DB
 
JAVA CON BASE DE DATOS
JAVA CON BASE DE DATOSJAVA CON BASE DE DATOS
JAVA CON BASE DE DATOS
 

Similar a LABORATORIO DE PROGRAMACIÓN I. (20)

Active x data object ado.net
Active x data object ado.netActive x data object ado.net
Active x data object ado.net
 
Objeto sql.data.adapter
Objeto sql.data.adapterObjeto sql.data.adapter
Objeto sql.data.adapter
 
Vb net bd_2005_02
Vb net bd_2005_02Vb net bd_2005_02
Vb net bd_2005_02
 
Objeto SqlDataAdapter
Objeto SqlDataAdapterObjeto SqlDataAdapter
Objeto SqlDataAdapter
 
System.Data.SqlClient
System.Data.SqlClient System.Data.SqlClient
System.Data.SqlClient
 
Bases de Datos en Java - Intro a JDBC
Bases de Datos en Java - Intro a JDBCBases de Datos en Java - Intro a JDBC
Bases de Datos en Java - Intro a JDBC
 
Espacio de nombres system.data.sql client
Espacio de nombres system.data.sql clientEspacio de nombres system.data.sql client
Espacio de nombres system.data.sql client
 
Ado
AdoAdo
Ado
 
Java con base de datos
Java con base de datosJava con base de datos
Java con base de datos
 
ADO .NET
ADO .NETADO .NET
ADO .NET
 
Proveedor act1 uni2_daw_6a
Proveedor act1 uni2_daw_6aProveedor act1 uni2_daw_6a
Proveedor act1 uni2_daw_6a
 
Ado.Net
Ado.NetAdo.Net
Ado.Net
 
Objeto connection
Objeto connectionObjeto connection
Objeto connection
 
ADO
ADOADO
ADO
 
LABORATORIO DE PROGRAMACIÓN I
LABORATORIO DE PROGRAMACIÓN ILABORATORIO DE PROGRAMACIÓN I
LABORATORIO DE PROGRAMACIÓN I
 
Jhonzambrano-dhalinpalomino
Jhonzambrano-dhalinpalominoJhonzambrano-dhalinpalomino
Jhonzambrano-dhalinpalomino
 
Buenas
BuenasBuenas
Buenas
 
Tema 9 aplicaciones de dos capas por gio
Tema 9   aplicaciones de dos capas por gioTema 9   aplicaciones de dos capas por gio
Tema 9 aplicaciones de dos capas por gio
 
OBJETO SQLCOMMAND.
OBJETO SQLCOMMAND.OBJETO SQLCOMMAND.
OBJETO SQLCOMMAND.
 
Espacio de nombres system.data.sql client
Espacio de nombres system.data.sql clientEspacio de nombres system.data.sql client
Espacio de nombres system.data.sql client
 

Más de SILVA19_PAMELA

Año del buen servicio al cuidadano
Año del buen servicio al cuidadanoAño del buen servicio al cuidadano
Año del buen servicio al cuidadanoSILVA19_PAMELA
 
LABORATORIO DE PROGRAMACIÓN I
LABORATORIO DE PROGRAMACIÓN ILABORATORIO DE PROGRAMACIÓN I
LABORATORIO DE PROGRAMACIÓN ISILVA19_PAMELA
 
LABORATORIO DE PROGRAMACIÓN I
LABORATORIO DE PROGRAMACIÓN ILABORATORIO DE PROGRAMACIÓN I
LABORATORIO DE PROGRAMACIÓN ISILVA19_PAMELA
 
GESTOR DE BASES DE DATOS
GESTOR DE BASES DE DATOSGESTOR DE BASES DE DATOS
GESTOR DE BASES DE DATOSSILVA19_PAMELA
 
LABORATORIO DE PROGRAMACIÓN I
LABORATORIO DE PROGRAMACIÓN ILABORATORIO DE PROGRAMACIÓN I
LABORATORIO DE PROGRAMACIÓN ISILVA19_PAMELA
 

Más de SILVA19_PAMELA (8)

Jdbc
JdbcJdbc
Jdbc
 
Año del buen servicio al cuidadano
Año del buen servicio al cuidadanoAño del buen servicio al cuidadano
Año del buen servicio al cuidadano
 
LABORATORIO DE PROGRAMACIÓN I
LABORATORIO DE PROGRAMACIÓN ILABORATORIO DE PROGRAMACIÓN I
LABORATORIO DE PROGRAMACIÓN I
 
LABORATORIO DE PROGRAMACIÓN I
LABORATORIO DE PROGRAMACIÓN ILABORATORIO DE PROGRAMACIÓN I
LABORATORIO DE PROGRAMACIÓN I
 
GESTOR DE BASES DE DATOS
GESTOR DE BASES DE DATOSGESTOR DE BASES DE DATOS
GESTOR DE BASES DE DATOS
 
LABORATORIO DE PROGRAMACIÓN I
LABORATORIO DE PROGRAMACIÓN ILABORATORIO DE PROGRAMACIÓN I
LABORATORIO DE PROGRAMACIÓN I
 
Diapositiva
DiapositivaDiapositiva
Diapositiva
 
Programacion
ProgramacionProgramacion
Programacion
 

LABORATORIO DE PROGRAMACIÓN I.

  • 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.