Vous êtes sur la page 1sur 12

Acceso a base de datos SQL Server desde WebService, con aplicacin de

escritorio Parte I
Hoy les he trado un ejemplo que se les va a servir a muchos de ustedes. Se trata de crear una aplicacin en
la cual se usa una conexin a un WebService, y ste a su vez conecte a una base de datos creada en SQL
Server 2005. Para lograr esto, hay que tener en cuenta los siguientes puntos:
1. Debers tener configurado el ASP.NET 2.0 en el servidor donde va a estar ubicado el WebService. En
mi caso, como de seguro en la mayora de usuarios, estoy usando el IIS (por una extraa razn, tuve
que configurarlo manualmente. Mierda).
2. El puerto por el cual te conectars a dicho servidor tendr que ser fijo, debido a que normalmente el
servidor local de ASP.NET otorga puertos aleatorios para evitar conflictos con otras aplicaciones que
estn trabajando con dicho servidor.
3. La cadena de conexin a la base de datos que usars depende de cmo est configurada la
seguridad y los inicios de sesin de los usuarios que acceden al servidor SQL Server. En el caso del
ejemplo, uso la sesin predeterminada de Windows. Si hay problemas con tu cadena de conexin, no
dudes en consultarme.
4. La forma en cmo estn construidos los formularios Windows (que vendr en partes posteriores de
este artculo), es una de las formas ms eficaces y avanzadas de hacer formularios. Si es la primera
vez que ves la forma en cmo est construido y quieres usarlo, no dudes en hacerlo. Pero no olvides
poner referencias de donde lo sacaste, te aseguro que tus huevos aumentaran dos pulgadas de
dimetro si lo haces. Si no lo haces y quieres pasarte de listo, espero que tu mam muera de cncer,
maldito copin ladrn pirata hijo de mil putas.
5. El lenguaje usado es C#, el ejemplo ser subido en C#, y slo si me lo pide un bueno de gente har
una interfaz en Visual Basic. Los programadores que slo dominan Visual Basic son gente sin cultura
ni sentimientos. Y tocan los timbales.
6. Respecto los dos puntos anteriores: si eres estudiante, practcalo, mejralo, y no hagas copy-paste:
es el camino para que te conviertas en un buen programador. Si lo haces Dios no te enviar al
infierno y sers colmado de bendiciones tntricas.
Aclarada toda la situacin, procedamos:
Primero abrimos el Visual Studio 2008 (s no lo tienes instalado, ya vendr una actualizacin de cmo hacerlo
en 2005, si no quieres esperar, instlalo mierda) y creamos una solucin.
Luego procederemos a crear el WebService. Para esto presionamos anti-click sobre la solucin,
seleccionamos Agregar y luego hacemos click sobre Nuevo sitio Web.
Nos saldr el siguiente cuadro de dilogo:
Luego seleccionamos Servicio Web ASP.NET, elegimos la ubicacin (de preferencia dentro de la misma
solucin) y click en Aceptar. En el editor de cdigo aparecer algo parecido a lo siguiente:
Si deseamos, borraremos las siguientes lneas de cdigo (slo sirven para saludar):

Cdigo:
[WebMethod]
public string HelloWorld() {
return "Hello World";
}
Ahora bien, una ligera explicacin de cada unos de las variables, mtodos y funciones a usar:
var_cadenaconexion: Variable que define la cadena de conexin a la base de datos SQL Server.
var_conexion: Variable de tipo SqlConnection; permitir establecer una conexin a la base de datos SQL
Server.
var_comando: Variable de tipo SqlCommand; permitir la ejecucin de consultas y el paso de parmetros
para la ejecucin de las mismas.
var_adaptador: Variable de tipo SqlDataAdapter; con un funcionamiento parecido al de var_comando, con la
salvedad de que adems permitir llenar un conjunto de datos (DataSet) con los datos obtenidos de una
consulta.
var_resultado: Variable de tipo DataSet; nos permitir mostrar los registros de una tabla.
Lo que resta de variables, es ya bastante obvio cmo para explicarlo, eso si eres programador claro est,
aunque no s porque escrib estas lneas si este blog es justo para ustedes. Ah, tambin hay otros temas.

Cdigo:
String var_cadenaconexion =
(@"server=ISMAEL\SQLEXPRESS;database=Bd_Ejemplo1_WebService;integrated
security=true");
SqlConnection var_conexion = new SqlConnection();
SqlCommand var_comando = new SqlCommand();
SqlDataAdapter var_adaptador = new SqlDataAdapter();</a>
abrirconexion (): sta funcin nos permitir, cmo dice su nombre, abrir una conexin a la base de datos
SQL Server, para poder realizar las operaciones que nosotros deseamos.

Cdigo:
private void abrirconexion()
{
var_conexion.ConnectionString = var_cadenaconexion;
if (var_conexion.State == ConnectionState.Closed)
var_conexion.Open();
}
cerrarconexion (): Si no te imaginas para que sirve esta funcin, debe ser que te equivocaste de carrera y
debiste haber estudiado corte y confeccin, o marinera.

Cdigo:
private void cerrarconexion()
{
if (var_conexion.State == ConnectionState.Closed)
var_conexion.Close();
}
Ahora, entrado a este punto, es preciso comenzar a trabajar en la base de datos.
Primero crearemos (como es obvio), nuestra base de datos, la cual lo haremos mediante el siguiente script.

Cdigo:
use master
create database Bd_Ejemplo1_WebService
on
(
name = 'Bd_Ejemplo1_WebService_Data',
filename = 'E:\ismadelblog_escritos\Bd_Ejemplo1_WebService_Data.mdf',
size = 3,
maxsize = 50MB,
filegrowth = 1
)
log on
(
name = 'Bd_Ejemplo1_WebService_Log',
filename = 'E:\ismadelblog_escritos\Bd_Ejemplo1_WebService_Log.ldf',
size = 3,
maxsize = 50MB,
filegrowth = 1
)
go
Ahora pasemos a crear la tabla tm_producto, que nos servir para este ejemplo:

Cdigo:
create table tm_producto
(
tm_idproducto int identity(1,1) primary key,
tm_nombreproducto varchar(150),

)
Go

tm_marcaproducto varchar(50),
tm_modeloproducto varchar(50),
tm_fecharegproducto datetime,
tm_estadoproducto varchar(20)

Nota: Por qu tm_ antes del nombre propio de la tabla, y de los campos de la misma? Porque quiero darle
a la tabla el estatus de tabla principal o maestra, de ah el trmino, las siglas de lo que representa: tabla
maestra. Ms adelante lo explicar en otro artculo, t solo limtate a seguir fielmente lo que est en este
artculo si quieres que funcione tu ejemplo. Por ahora soy tu amo y seor, ya despus me escribirs para
insultarme.
Por ahora no pondr cosas tales como precio o stock, ya que nmero uno no son principales para ste
ejemplo, y numero dos si eres informtico pensante o al menos dedicado ya te habrs dado cuenta que esos
dos atributos no deberan pertenecer directamente a la entidad producto.
Para finalizar con la primera parte de ste artculo, crearemos en la base de datos los procedimientos
almacenados necesarios para el funcionamiento de la aplicacin:
pa_producto_listar: Nos devolver los registros de la tabla tm_producto para mostrarlos en la aplicacin.
ste procedimiento recibir dos parmetros, uno para definir con qu tipo de consulta se va a trabajar, y el
otro recibir los datos que sirvan como criterio para mostrar los datos que nosotros especifiquemos.

Cdigo:
create procedure pa_producto_listar
(
@tipo varchar(5),
@param1 varchar(150)
)
as
begin
if @tipo = '1'
begin
select * from tm_producto where tm_nombreproducto like '%' + @param1+'%'
end
if @tipo = '2'
begin
select * from tm_producto where tm_idproducto = convert(int, @param1)
end
end
go
pa_producto_insertar: Insertar un nuevo registro a la tabla (o que pensabas que iba a hacer).

Cdigo:
create procedure pa_producto_insertar
(
@nombreproducto varchar(150),
@marcaproducto varchar(50),
@modeloproducto varchar(50),
@fecharegproducto datetime,
@estadoproducto varchar(20)
)
as
begin
insert into tm_producto
(
tm_nombreproducto,
tm_marcaproducto,
tm_modeloproducto,
tm_fecharegproducto,
tm_estadoproducto
)
values
(
@nombreproducto,

@marcaproducto,
@modeloproducto,
@fecharegproducto,
@estadoproducto

end
go
pa_producto_actualizar: Modificar los datos de un registro de la tabla especificado por su id.

Cdigo:
create procedure pa_producto_actualizar
(
@idproducto int,
@nombreproducto varchar(150),
@marcaproducto varchar(50),
@modeloproducto varchar(50),
@fecharegproducto datetime,
@estadoproducto varchar(20)
)
as
begin
update tm_producto
set tm_nombreproducto = @nombreproducto,
tm_marcaproducto = @marcaproducto,
tm_modeloproducto = @modeloproducto,
tm_fecharegproducto = @fecharegproducto,
tm_estadoproducto = @estadoproducto
where tm_idproducto = @idproducto
end
go
pa_producto_eliminar: Eliminar los datos de un registro de la tabla especificado por su id.

Cdigo:
create procedure pa_producto_borrar
(
@idproducto int
)
as
begin
delete from tm_producto where tm_idproducto = @idproducto
end
go
Para terminar con la primera parte de esta saga, indicar que si bien es cierto los WebService tienen cierta
utilidad para aplicaciones que requieran ser abiertas en cualquier PC con acceso a Internet, el servidor donde
deben estar alojados deben ser confiables, seguros, rpidos para los procesos y sobre todo, soportar la
pesadez de los mismos.
Bueno hasta el momento es todo, en la segunda parte veremos cmo crear las funciones en el WebService
que trabajarn con los procedimientos almacenados, configuracin y diseo de la interfaz.

Acceso a base de datos SQL Server desde WebService, con aplicacin de


escritorio Parte II
En la primera parte de ste artculo, habamos avanzado la parte de creacin del WebService, as como la
base datos, la tabla y los procedimientos almacenados con los cuales se va a trabajar. En sta oportunidad
definiremos las funciones en el WebService que van a interactuar con tales procedimientos.
Para eso abrimos nuestro proyecto del WebService que creamos en la primera parte de ste artculo:
Ahora bien, pasaremos a definir las funciones anteriormente mencionadas, no sin antes pedirte que prestes
atencin a la siguiente lnea de cdigo:
La lnea de cdigo que ven es sumamente importante que la pongan en una lnea anterior a la definicin
de cada funcin que se va a utilizar en la aplicacin, porque cuando ustedes quieran llamar a cualquiera

de las funciones que a continuacin vamos a crear, y no han puesto dicha lnea que define a una funcin
como un mtodo Web, sea mtodo WebService o del servicio Web.

Cdigo:
1

[WebMethod]

Nota: La lnea de cdigo [WebMethod] no est sobre los mtodos abrirconexion () ycerrarconexion
() porque no ha sido necesario definirlas de ese modo, y no se preocupen que el ejemplo funcionar igual ya
que dichos mtodos son llamados en las funciones de la misma clase del WebService, por lo que su
ejecucin se har al momento de ejecutar las funciones.
listar_productos (): Funcin de tipo DataSet que nos devolver los registros obtenidos a travs del
procedimiento almacenado pa_producto_listar.

Cdigo:
[WebMethod]
public DataSet listar_productos(
string param_tipo,
string param_param1
)
{
DataSet var_resultado = new DataSet();
try
{
abrirconexion();
var_comando.CommandText = "pa_producto_listar";
var_comando.CommandType = CommandType.StoredProcedure;
var_comando.Connection = var_conexion;
var_comando.Parameters.Add("@tipo",SqlDbType.VarChar,5).Value=param_tipo;
var_comando.Parameters.Add("@param1",SqlDbType.VarChar,150).Value=
param_param1;
var_adaptador.SelectCommand = var_comando;
var_adaptador.Fill(var_resultado, "consulta");
var_comando = null;
cerrarconexion();
}
catch (Exception ex)
{
throw ex;
}
return var_resultado;
}
insertar_producto (): Funcin de tipo int que nos devolver un valor mayor a cero si el procedimiento
pa_producto_insertar agreg correctamente un registro la tabla tm_producto, y cero s ocurri algn
error.

Cdigo:
[WebMethod]
public int insertar_producto
(
string param_nombre,
string param_marca,
string param_modelo,
DateTime param_fecharegistro,
string param_estado
)
{
int var_resultado = 0;

try
{
abrirconexion();
var_comando.CommandText = "pa_producto_insertar";
var_comando.CommandType = CommandType.StoredProcedure;
var_comando.Connection = var_conexion;
var_comando.Parameters.Add("@nombreproducto",SqlDbType.VarChar,150).Value =
param_nombre;
var_comando.Parameters.Add("@marcaproducto",SqlDbType.VarChar, 50).Value=
param_marca;
var_comando.Parameters.Add("@modeloproducto",SqlDbType.VarChar, 50).Value =
param_modelo;
var_comando.Parameters.Add("@fecharegproducto",SqlDbType.DateTime).Value =
param_fecharegistro;
var_comando.Parameters.Add("@estadoproducto", SqlDbType.VarChar).Value =
param_estado;
var_resultado = var_comando.ExecuteNonQuery();
cerrarconexion();
}
catch (Exception ex)
{
throw ex;
}
return var_resultado;
}
actualizar_producto (): Esta funcin de tipo int actuar de la misma forma que insertar_producto (), slo
que ahora en vez de insertar, modificar los datos de un registro de acuerdo al primer parmetro que le
enviaremos, que ser la id del registro a modificar.

Cdigo:
[WebMethod]
public int actualizar_producto
(
int param_idproducto,
string param_nombre,
string param_marca,
string param_modelo,
DateTime param_fecharegistro,
string param_estado
)
{
int var_resultado = 0;
try
{
abrirconexion();
var_comando.CommandText = "pa_producto_actualizar";
var_comando.CommandType = CommandType.StoredProcedure;
var_comando.Connection = var_conexion;
var_comando.Parameters.Add("@idproducto",SqlDbType.Int).Value=
param_idproducto;
var_comando.Parameters.Add("@nombreproducto",SqlDbType.VarChar,150).Value=
param_nombre;
var_comando.Parameters.Add("@marcaproducto",SqlDbType.VarChar,50).Value=
param_marca;
var_comando.Parameters.Add("@modeloproducto",SqlDbType.VarChar, 50).Value=
param_modelo;
var_comando.Parameters.Add("@fecharegproducto", SqlDbType.DateTime).Value=
param_fecharegistro;
var_comando.Parameters.Add("@estadoproducto", SqlDbType.VarChar).Value=
param_estado;
var_resultado = var_comando.ExecuteNonQuery();
cerrarconexion();
}
catch (Exception ex)
{

throw ex;
}
return var_resultado;
}
borrar_producto (): sta funcin

Cdigo:
[WebMethod]
public int borrar_producto(int param_idproducto)
{
int var_resultado = 0;
try
{
abrirconexion();
var_comando.CommandText = "pa_producto_borrar";
var_comando.CommandType = CommandType.StoredProcedure;
var_comando.Connection = var_conexion;
var_comando.Parameters.Add("@idproducto", SqlDbType.Int).Value=
param_idproducto;
var_resultado = var_comando.ExecuteNonQuery();
cerrarconexion();
}
catch (Exception ex)
{
throw ex;
}
return var_resultado;
}
De ms est decir que las funciones que acabo de mostrar deben ser agregadas despus de los
mtodos abrirconexion () y cerrarconexion ().
Una vez hemos llegado hasta aqu, procederemos a hacer las configuraciones respectivas en la consola de
SQL Server 2005. Si no lo tienes instalado entonces instlalo, no voy a hacer un ejemplo con SQL Server
2000.
Ahora bien, debers buscar el usuario ASPNET, si no est es porque no ha sido agregado an, para
agregarlo debers hacer anti-click y seleccionar Nuevo inicio de sesin. Aparecer un cuadro de dilogo
como el siguiente:
Hars click en el botn Buscar, aparecer lo siguiente:
Hacer click en el botn Avanzadas, para buscar al usuario ASPNET y as poder agregarlo. Se
desplegar la siguiente ventana:
Una vez aqu, haremos click en el botn Buscar ahora, y en la lista detalle de la parte inferior se nos
mostrar una lista con todos los usuarios que tenemos registrados en el equipo:
Como en la imagen, seleccionamos ASPNET y luego hacemos click en Aceptar. En la otra ventana
igualmente haremos click en Aceptar.
As tendr que quedar esta parte del cuadro de dilogo Inicio de sesin Nuevo.
Ahora bien, en el mismo cuadro de dilogo seleccionamos la opcin Asignacin de usuarios. El cuadro de
dilogo cambiar a lo siguiente:
En la vista detalle Usuarios asignados a este inicio de sesin seleccionaremos la base de datos con la cual
vamos a trabajar, en este caso ser Bd_Ejemplo1_WebService (o el nombre que le hayan dado ustedes).
Luego en la lista de opciones Miembros de la funcin de base de datos para: [Nombre de la base
seleccionada] marcaremos la opcin que diga db_owner. Luego click en Aceptar.
Ahora iremos a nuestro proyecto del WebService en el Visual Studio, y en el explorador de soluciones
buscaremos el proyecto, y luego haremos anti-click en el archivo con extensin .asmx, y finalmente haremos
click en la opcin Ver en el explorador.

En la pantalla del explorador web que tengas, y si todo ha salido bien, se cargar lo siguiente:
Para comprobar su correcto funcionamiento, haremos
ejemplo: listar_producto (). Se nos mostrar lo siguiente:

click en

una

funcin

de

la

lista,

por

Hacemos click en Invocar, y si todo se ha hecho de la manera correcta y un cruce de dedos, lo siguiente
aparecer:
Es un archivo .xml generado con la informacin de la tabla tm_producto. Ahora estamos listos para usar
nuestro WebService.

Acceso a base de datos SQL Server desde WebService, con aplicacin de


escritorio Parte III
Bueno, en el anterior articulo ya habamos creado y configurado el WebService, ahora nos resta crear el
proyecto de la interfaz grfica, y crear adems la referencia al WebService.
Para empezar creamos el proyecto dentro de la misma solucin, al igual que como lo hicimos con el sitio Web
que ocupa el WebService, ponindole el nombre que ms les apetezca:
Llegado a este punto, cabe recordarles lo siguiente: no importa como hayan diseado su formulario, no les
pido que el diseo del formulario principal sea como este:
Y el de ingresar nuevos datos a la base tenga el siguiente aspecto:
Le haremos anti-click al icono del proyecto de la aplicacin en nuestro explorador de soluciones, y hacemos
click en Agregar referencia de servicio:
De ah, puede hacerse de dos formas: una es copiando la direccin Web que sale al momento de mostrar en
el explorador Web el archivo .asmx del servicio web:
Y ponerla en el control desplegable de Direccin, as:
Y luego haciendo click en el botn Ir. La otra es hacindole click en el botn Detectar, de tal manera que el
sistema cargar automticamente los servicios webs que estn presentes, pero me parece ms conveniente
esta forma.
En los paneles de Servicio y Operaciones se cargarn el servicio Web y las funciones del servicio Web
respectivamente, pero slo se cargarn las operaciones si seleccionas la clase del servicio, as:
Luego le das el nombre de tu preferencia:
Y finalmente hacemos click en Aceptar.
A continuacin se crearn las referencias al servicio; ya estamos listos para darles uso. Si sabes programar
con orientacin a objetos, slo te dir que simplemente tendrs que declarar una variable a manera de
instanciar la clase del WebService. De esta manera:

Cdigo:
WinAlmacen.ReferenciaServicio1.Service1SoapClient serv1 = new
WinAlmacen.ReferenciaServicio1.Service1SoapClient();
listarproductos (): Funcin para mostrar en el control DataGridView los datos de la tablatm_producto.
Aqu se utilizar una funcin del WebService.

Cdigo:
private void listarproductos(string tipo_consulta, string parametro)
{
DataSet dts = new DataSet();
dts = serv1.listar_productos(tipo_consulta, parametro);
this.dtgprint.DataSource = dts.Tables["consulta"];
}
Lo siguiente ser lo que se tendr que programar en los controles en donde sea necesario:

En el evento Load del formulario frmAmd_Producto:


Para el botn de bsqueda btnBuscar en el evento Click:

Cdigo:
private void btnBuscar_Click(object sender, EventArgs e)
{
this.listarproductos("1", this.txtBusqueda.Text);
}
Para el botn btnNuevo, el cual llamar a otro formulario para el ingreso de un nuevo registro, en el
evento Click:

Cdigo:
private void btnNuevo_Click(object sender, EventArgs e)
{
frmAdd_Producto var_nuevoproducto = new frmAdd_Producto();
var_nuevoproducto._idproducto = 0;
var_nuevoproducto.ShowDialog();
this.listarproductos("1", "");
}
Para el botn btnEditar, el cual volver a llamar a otro formulario para modificar los datos de un registro
especificado por su id, en el evento Click:

Cdigo:
private void btnEditar_Click(object sender, EventArgs e)
{
frmAdd_Producto var_editarproducto = new frmAdd_Producto();
if (this.dtgprint.Rows.Count == 0)
return;
int indexfila = (this.dtgprint.CurrentCell != null) ?
this.dtgprint.CurrentCell.RowIndex : 0;
var_editarproducto._idproducto =
(int)this.dtgprint.Rows[indexfila].Cells[0].Value;
var_editarproducto.ShowDialog();
this.listarproductos("1", "");
}
Nota: Si te fijas en el cdigo fuente de los dos botones anteriores, notars que en las variables que definen al
formulario frmAdd_Producto (var_nuevoproducto y var_editarproducto) hay otra variable que hace
referencia al id del producto, esto no es ms que una variable de propiedad del formulario
frmAdd_Producto, la cual se realizar ms adelante.
Para el botn btnBorrar, el cual eliminar un registro especificado por su id, en el eventoClick. Aqu se
utilizar una funcin del WebService:

Cdigo:
private void btnBorrar_Click(object sender, EventArgs e)
{
int var_resultado = 0;
if (this.dtgprint.Rows.Count == 0)
return;
if (MessageBox.Show("Desea eliminar este registro?",
"Atencin", MessageBoxButtons.YesNo, MessageBoxIcon.Question)==DialogResult.Yes)
{
int indexfila = (this.dtgprint.CurrentCell != null) ?
this.dtgprint.CurrentCell.RowIndex : 0;
var_resultado =

this.serv1.borrar_producto((int)this.dtgprint.Rows[indexfila].Cells[0].Value);
if (var_resultado != 0)
{
MessageBox.Show("Eliminado correctamente", "Atencin",
MessageBoxButtons.OK, MessageBoxIcon.Information);
this.listarproductos("1", "");
}
}
}
Bueno hasta aqu todo bien, ahora pasemos a programar el cdigo para el formulario frmAdd_Producto:
Primero hay que definir la variable de carcter pblica idproducto, y la propiedad tambin de carcter
pblica _idproducto. Por medio de estas dos definiciones podremos hacer el paso de valores del formulario
frmAmd_Producto al formulario frmAdd_Producto.

Cdigo:
public int idproducto = 0;
public int _idproducto
{
get
{
return idproducto;
}
set
{
idproducto = value;
}
}
Ahora bien, lo que acabo de definir anteriormente no servira de nada si no lo uso cierto?, pero antes tengo
que definir el mtodo con el cual podemos darle utilidad.
Mediante el siguiente cdigo lo que haremos ser reunir los datos de un registro especificado por su id para
luego mostrarlos en el formulario.
Nota: Para guardar un orden, se recomienda crear la anterior variable y la propiedad antes de programar el
cdigo de los botones btnNuevo y btnEditar.
Ahora instanciemos la clase del WebService, como en el formulario anterior:

Cdigo:
WinAlmacen.ReferenciaServicio1.Service1SoapClient serv1 = new
WinAlmacen.ReferenciaServicio1.Service1SoapClient();
Ahora bien, lo que acabo de definir anteriormente no servira de nada si no lo uso cierto?, pero antes tengo
que definir el mtodo con el cual podemos darle utilidad.
Mediante el siguiente cdigo lo que haremos ser reunir los datos de un registro especificado por su id para
luego mostrarlos en el formulario.

Cdigo:
private void obtenerProducto(int param_idproducto)
{
DataSet dts = new DataSet();
dts = serv1.listar_productos("2", Convert.ToString(param_idproducto));
if (dts.Tables["consulta"].Rows.Count != 0)
{
this.txtNombreProducto.Text =
dts.Tables["consulta"].Rows[0]["tm_nombreproducto"].ToString();
this.txtMarca.Text =
dts.Tables["consulta"].Rows[0]["tm_marcaproducto"].ToString();
this.txtModelo.Text =
dts.Tables["consulta"].Rows[0]["tm_modeloproducto"].ToString();
this.dtpFechaIng.Value = Convert.ToDateTime(dts.Tables["consulta"].Rows[0]
["tm_fecharegproducto"]);
this.cboEstado.SelectedText =

dts.Tables["consulta"].Rows[0]["tm_estadoproducto"].ToString();
}
}

Muy bien, ahora en el evento Load del mismo formulario programaremos el siguiente cdigo:

Cdigo:
private void frmAdd_Producto_Load(object sender, EventArgs e)
{
this.obtenerProducto(this.idproducto);
}
Como de seguro habrs notado, coloco adems del cdigo a programar el cdigo del evento en el cual se
tiene que programar, eso lo hago para ti, para que veas en donde se debe programar. No vayas a pensar que
todo lo que pongo como cdigo se debe programar dentro del evento botn eh
Ahora bien, slo falta definir a la estrella de este formulario: el mtodo grabarProducto ():

Cdigo:
private void grabarProducto()
{
int var_respuesta = 0;
string var_mensaje = "";
string var_nombre = "";
string var_marca = "";
string var_modelo = "";
DateTime var_fechaingreso = DateTime.Now;
string var_estado = "";
if (this.txtNombreProducto.Text.Trim().Length == 0)
{
MessageBox.Show("Ingrese nombre de producto", "Atencin",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
this.txtNombreProducto.Focus();
return;
}
if (this.txtMarca.Text.Trim().Length == 0)
{
MessageBox.Show("Ingrese marca de producto", "Atencin",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
this.txtMarca.Focus();
return;
}
var_nombre = this.txtNombreProducto.Text;
var_marca = this.txtMarca.Text;
var_modelo = this.txtModelo.Text;
var_fechaingreso = this.dtpFechaIng.Value;
var_estado = this.cboEstado.Text;
if (this.idproducto == 0)
{
var_respuesta = this.serv1.insertar_producto(var_nombre,
var_marca, var_modelo, var_fechaingreso, var_estado);
var_mensaje = "Producto agregado correctamente";
}
else
{
var_respuesta = this.serv1.actualizar_producto(idproducto,
var_nombre, var_marca, var_modelo, var_fechaingreso, var_estado);
var_mensaje = "Producto editado correctamente";
}
if (var_respuesta != 0)
{
MessageBox.Show(var_mensaje, "Atencin", MessageBoxButtons.OK,
MessageBoxIcon.Information);
idproducto = 0;
this.Close();
}
}

Como vern, primero defino las variables que me van a servir para guardar los datos de los tems del
formulario, luego hago una validacin de los campos ms importantes, para despus asignar el valor de los
controles a las variables, y finalmente, segn el valor del cdigo del producto, hago bien una insercin o una
modificacin. Luego de todo esto se est mostrando un mensaje y el posterior cierre del formulario, slo si la
respuesta de la ejecucin de las funciones del WebService es un valor mayor que cero, es decir, que se
hayan ejecutado correctamente.
Cabe mencionar tambin que el valor de la variable idproducto vuelve a cero para cuidar posibles conflictos
ante otras operaciones que se realicen en el formulario.
Pero el mtodo que acabamos de crear no servira de nada si no lo llamamos, y para hacer esto
programaremos en el botn btnGuardar el siguiente cdigo:

Cdigo:
private void btnGrabar_Click(object sender, EventArgs e)
{
this.grabarProducto();
}
El cdigo del botn btnCancelar, ser de la siguiente forma:

Cdigo:
private void btnCancelar_Click(object sender, EventArgs e)
{
this.Close();
}
En el cdigo del botn btnCancelar est tu cdigo para el botn btnCerrar del anterior formulario.

Vous aimerez peut-être aussi