DataSets Tipificados y No Tipificados IIManejo de registrosFecha: 19/Jul/2005 (19 de Julio de 2005)
|
Sres. Desarrolladores, continuando con el artículo referente a DataSet, en el anterior explicaba los componentes del DataSet, Ventajas y otros temas, el artículo está en el enlace:
http://www.elguille.info/colabora/NET2005/FernandoLuque_DataSetsI.htmEn este artículo pretendo mostrar como se acceden a los datos cuando se trabajan con DataSets Tipificados y como se acceden cuando se trabajan con DataSets NO Tipificados.
AL GRANO
En el ejemplo que comparto con ustedes he colocado información en cajas de texto y me conecto a la Tabla Customers (Clientes) de la base de datos Northwind. El esquema presente en el DataSet tipificado dsCustomers.xsd, se llama ClientesTyped, que tiene la misma estructura de la tabla Customers de Northwind.
DataSet Tipificado
Dim drRegistro1 As dsCustomers.ClientesTypedRow
Donde dsCustomers es el DataSet tipificado incluído en el proyecto y ClientesTypedRow en el DataRow correspondiente.
drRegistro1.CompanyName = txtCompanyName.Text
Donde txtCompanyName.Text es el contenido de una caja de texto. Note que los elementos del DataRow están presentes como si se tratara de las propiedades del objeto.
For i = 0 To dsTDatos.ClientesTyped.Count - 1
...código necesaio
Next i
Donde: dsTdatos es el nombre del DataSet y ClientesTyped es el DataTable.
dsTDatos.ClientesTyped(i).ContactName.ToString
Donde ContactName es uno de los campos para mostrar en el control ListBox.
DataSet NO TIPIFICADO
Dim dsUDatos as New DataSet
daClientes.Fill( dsUDatos, "ClientesUnTyped")
Donde: daClientes es el SQLDataAdapter , dsUDatos es el DataSet que debe estar previamente definido y ClientesUnTyped es el nombre del DataTable a crear.
Dim drRegistro as DataRow
drRegistro = dsUDatos.Tables("ClientesUnTyped").NewRow
drRegistro1("CompanyName") = txtCompanyName.Text
Donde txtCompanyName.Text es el contenido de una caja de texto. Note que los elementos del DataRow se acceden utilizando (" ")
For i = 0 To dsUDatos.Tables("ClientesUnTyped").Rows.Count - 1
...código necesaio
Next i
Donde: dsUdatos es el nombre del DataSet y ClientesUnTyped es el DataTable.
dsTDatos.Tables("ClientesUnTyped").Rows(i) ("ContactName").ToString
Donde ContactName es uno de los campos para mostrar en el control ListBox.
Notas IMPORTANTES:
A continuación sigue código en Visual Basic:
Private Sub frmMoves_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
'Definir la cadena de
conexión
Dim
cn
As
New
SqlConnection("workstation id=HOME;packet size=4096;user id=fernnado;integrated
security=SSPI;data source=(local);persist security info=False;initial
catalog=Northwind")
'Abrir la conexión
cn.Open()
'Crear
el SQLCommand
Dim
coClientes
As
New
SqlCommand
coClientes.Connection = cn
coClientes.CommandType = CommandType.Text
'Se usarán dos tablas
adicionales con los mismos datos
'de Customers: ClientesTyped y ClientesUnTyped
'Para ClientesTyped...comprobar si existe y
borrarla
coClientes.CommandText =
_
"IF EXISTS (SELECT * FROM sysobjects WHERE id =
object_id(N'[ClientesTyped]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) DROP
TABLE [ClientesTyped] "
coClientes.ExecuteNonQuery() 'Ejecuta
el comando
'Para ClientesUnTyped...comprobar si existe y borrarla
coClientes.CommandText =
_
"IF EXISTS (SELECT * FROM sysobjects WHERE id =
object_id(N'[ClientesUnTyped]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) DROP
TABLE [ClientesUnTyped] "
coClientes.ExecuteNonQuery() 'Ejecuta el comando
'Luego crear las dos tablas basadas en
Customers de Northwind
'Crear
ClientesTyped
coClientes.CommandText = _
"CREATE
TABLE ClientesTyped (" & _
"CustomerID nchar (5) PRIMARY KEY
," & _
"CompanyName nvarchar (40)
NOT NULL," & _
"ContactName nvarchar (30)
NULL," & _
"ContactTitle nvarchar (30) NULL," & _
"Address nvarchar (60) NULL," & _
"City nvarchar (15) NULL," & _
"Region nvarchar (15) NULL ," & _
"PostalCode nvarchar (10) NULL," & _
"Country nvarchar (15) NULL," & _
"Phone nvarchar (24) NULL," & _
"Fax nvarchar (24) NULL )"
coClientes.ExecuteNonQuery() 'Ejecuta Crear Tabla
ClientesTyped
'Crear
ClientesUnTyped
coClientes.CommandText = _
"CREATE TABLE ClientesUnTyped (" & _
"CustomerID nchar (5) PRIMARY KEY
," & _
"CompanyName nvarchar (40)
NOT NULL," & _
"ContactName nvarchar (30)
NULL," & _
"ContactTitle nvarchar (30) NULL," & _
"Address nvarchar (60) NULL," & _
"City nvarchar (15) NULL," & _
"Region
nvarchar (15) NULL ," & _
"PostalCode nvarchar (10) NULL," & _
"Country nvarchar (15) NULL," & _
"Phone nvarchar (24) NULL," & _
"Fax nvarchar (24) NULL )"
coClientes.ExecuteNonQuery() 'Ejecuta Crear Tabla
ClientesUnTyped
'Insertar los registros a las Tablas
Creadas
'TABLA
ClientesTyped
coClientes.CommandText = _
"INSERT INTO ClientesTyped " & _
"(CustomerID,CompanyName,ContactName,ContactTitle," & _
"Address,City,Region,PostalCode,Country,Phone,Fax )" & _
"(Select CustomerID,CompanyName,ContactName,ContactTitle," & _
"Address,City,Region,PostalCode,Country," & _
"Phone,Fax from Customers)"
coClientes.ExecuteNonQuery()
'TABLA
ClientesUntyped
coClientes.CommandText = _
"INSERT INTO ClientesUnTyped " & _
"(CustomerID ,
CompanyName,
ContactName,
ContactTitle," & _
"Address ,City,Region,PostalCode,Country,Phone ,Fax )" & _
"(Select CustomerID , CompanyName,
ContactName,
ContactTitle," & _
"Address ,
City,
Region, PostalCode,
Country," & _
"Phone , Fax from Customers)"
coClientes.ExecuteNonQuery()
'Hasta acá necesitamos el SQLCommand coClientes
coClientes.Dispose()
dsTDatos =
New
dsCustomers 'dsCustomers
en un DataSet Tipificado
'Crear el
Adaptador
Dim
daTDatos
As
New
SqlDataAdapter("Select * from ClientesTyped", cn)
'Llenar el DataSet, creando el DataTable
ClientesTyped
daTDatos.Fill(dsTDatos, "ClientesTyped")
'No
Tipificado
dsUDatos =
New
DataSet
Dim
daUDatos
As
New
SqlDataAdapter("Select * from ClientesUnTyped", cn)
daUDatos.Fill(dsUDatos, "ClientesUnTyped")
'CERRAMOS
cn.Close()
'Los datos siguientes son solo para
ejemplo
'Llenados con mis
datos
txtCustomerId.Text = "FLS23"
txtcompanyNema.Text = "Net Desarrollo SAC"
txtContactName.Text = "Ing. Fernando Luque"
txtContactTitle.Text = "Gerente General"
txtAddress.Text = "Av. Brasil 3546
Magdalena"
txtCity.Text = "Lima"
txtRegion.Text =
"Oeste"
txtCountry.Text = "Perú"
txtPostalCode.Text = "51"
txtPhone.Text = "045968879"
txtFax.Text = "054-567466"
End
Sub
El código completo se encuentra en el archivo adjunto al final del artículo, recuerda dar tu opinión para PanoramaBox, suerte a todos y A SEGUIR DESARROLLANDO.
Ing. Fernando Luque Sánchez
CIP 61806
Desde Trujillo - Perú para el mundo
Espacios de nombres usados en el código de este artículo:
System.Data
System.DataSQLClient
Fichero con el código de ejemplo: FernandoLuque_DataSetsII.zip - Tamaño 20 KB