Loveless, único en su especie

El blog de un programador que se mata de risa de los comentarios que le hagan

Acceso a base de datos SQL Server desde WebService, con aplicación de escritorio – Parte I

Hoy les he traído un ejemplo que se les va a servir a muchos de ustedes. Se trata de crear una aplicación en la cual se usa una conexión 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. Deberás 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 mayoría de usuarios, estoy usando el IIS (por una extraña razón, tuve que  configurarlo manualmente. Mierda).
  2. El puerto por el cual te conectarás 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 estén trabajando con dicho servidor.
  3. La cadena de conexión a la base de datos que usarás depende de cómo esté configurada la seguridad y los inicios de sesión de los usuarios que acceden al servidor SQL Server. En el caso del ejemplo, uso la sesión predeterminada de Windows. Si hay problemas con tu cadena de conexión, no dudes en consultarme.
  4. La forma en cómo están construidos los formularios Windows (que vendrá en partes posteriores de este artículo), es una de las formas más eficaces y avanzadas de hacer formularios. Si es la primera vez que ves la forma en cómo 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 diámetro si lo haces. Si no lo haces y quieres pasarte de listo, espero que tu mamá muera de cáncer, maldito copión ladrón pirata hijo de mil putas.
  5. El lenguaje usado es C#, el ejemplo será subido en C#, y sólo si me lo pide un bueno de gente haré una interfaz en Visual Basic. Los programadores que sólo dominan Visual Basic son gente sin cultura ni sentimientos. Y tocan los timbales.
  6. Respecto los dos puntos anteriores: si eres estudiante, practícalo, mejóralo, 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 serás colmado de bendiciones tántricas.

Aclarada toda la situación, procedamos:

Primero abrimos el Visual Studio 2008 (sí no lo tienes instalado, ya vendrá una actualización de cómo hacerlo en 2005, si no quieres esperar, instálalo mierda) y creamos una solución.

Luego procederemos a crear el WebService. Para esto presionamos anti-click sobre la solución, seleccionamos “Agregar” y luego hacemos click sobre “Nuevo sitio Web”.

Nos saldrá el siguiente cuadro de diálogo:

Creando solución

Luego seleccionamos “Servicio Web ASP.NET”, elegimos la ubicación (de preferencia dentro de la misma solución) y click en “Aceptar”. En el editor de código aparecerá algo parecido a lo siguiente:

Editor de código fuente

Si deseamos, borraremos las siguientes líneas de código (sólo sirven para saludar):

Código:

[WebMethod]
public string HelloWorld() {
    return "Hello World";
}


Ahora bien, una ligera explicación de cada unos de las variables, métodos y funciones a usar:
var_cadenaconexion: Variable que define la cadena de conexión a la base de datos SQL Server.
var_conexion: Variable de tipo SqlConnection; permitirá establecer una conexión a la base de datos SQL Server.
var_comando: Variable de tipo SqlCommand; permitirá la ejecución de consultas y el paso de parámetros para la ejecución de las mismas.
var_adaptador: Variable de tipo SqlDataAdapter; con un funcionamiento parecido al de var_comando, con la salvedad de que además 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 cómo para explicarlo, eso si eres programador claro está, aunque no sé porque escribí estas líneas si este blog es justo para ustedes. Ah, también hay otros temas (risa malvada MWAAHAHAHAHA!!!).

Código:

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 función nos permitirá, cómo dice su nombre, abrir una conexión a la base de datos SQL Server, para poder realizar las operaciones que nosotros deseamos.

Código:

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 función, debe ser que te equivocaste de carrera y debiste haber estudiado corte y confección, o marinera.

Código:

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.

Código:

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

Nota: Si estás acostumbrado a escribir las palabras clave o comandos del Transact-SQL con mayúsculas, es porque eres gay o lesbiana, lento (a) y además le faltas el respeto a las personas que desarrollan contigo. Das asco.

Ahora pasemos a crear la tabla “tm_producto”, que nos servirá para este ejemplo:

Código:

create table tm_producto
(
	tm_idproducto int identity(1,1) primary key,
	tm_nombreproducto varchar(150),
	tm_marcaproducto varchar(50),
	tm_modeloproducto varchar(50),
	tm_fecharegproducto datetime,
	tm_estadoproducto varchar(20)
)
go

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 término, las siglas de lo que representa: tabla “maestra”. Más adelante lo explicaré en otro artículo, tú solo limítate a seguir fielmente lo que est´ en este artículo si quieres que funcione tu ejemplo. Por ahora soy tu amo y señor, ya después me escribirás para insultarme.

Por ahora no pondré cosas tales como “precio” o “stock”, ya que número uno no son principales para éste ejemplo, y n´mero dos si eres informático pensante o al menos dedicado ya te habrás dado cuenta que esos dos atributos no deberían pertenecer directamente a la entidad “producto”. Si eres programador reguetonero de seguro ya lo habrás puesto más de una vez. Pobre jodido.

Para finalizar con la primera parte de éste artículo, crearemos en la base de datos los procedimientos almacenados necesarios para el funcionamiento de la aplicación:

pa_producto_listar: Nos devolverá los registros de la tabla “tm_producto” para mostrarlos en la aplicación. Éste procedimiento recibirá dos parámetros, 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.

Código:

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

Código:

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.

Código:

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.

Nota: Ismael “Loveless”, y cualquier programador sensato, no recomienda la eliminación total de registros de una tabla en la base, lo que es recomendable (y lo mejor), es crearle un campo a la tabla que especifique el estado en el que se encuentra, por lo que en el ejemplo he puesto en la tabla “tm_producto” (por si no lo has notado) el campo “tm_estadoproducto”, que nos servirá para dicho caso. Simplemente se coloca la eliminación total en este artículo para los interesados en el camino del mal, o el camino del “yo borro porque mi servidor ya no aguanta”. Para los demás que sigan la recomendación es muy importante, ya que esto les servirá para futuras sesiones de auditoría y además cuidarán la integridad referencial de la base de datos. Hazme caso y sé parte de las fuerzas del bien.

Código:

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, rápidos para los procesos y sobre todo, soportar la “pesadez” de los mismos.

Bueno hasta el momento es todo, en la segunda parte veremos cómo crear las funciones en el WebService que trabajarán con los procedimientos almacenados, configuración y diseño de la interfaz.

Eso es todo amigos, Ismael “Loveless” les desea un lindo día.

Cualquier duda: lovelessisma@gmail.com, aquí dejo un link para descargar el script sql: Descargar

9 Responses to Acceso a base de datos SQL Server desde WebService, con aplicación de escritorio – Parte I

  1. Carluis julio 27, 2010 a las 4:49 pm

    ptm q verguenza como te vas a referir asi, eso ni por broma y saca esa webada

  2. jaime juarez yamunaque agosto 4, 2010 a las 7:58 pm

    muy q lo laprendido en tus experiencias las compartas con las personas q le interesan lo q es la progrmacion de sistemas imformaticos vale

  3. ani agosto 13, 2010 a las 4:06 pm

    me da mucho gusto mi estimado que ayudes con estos articulos que publicas son muy interesantes sobre todo ayudaran mucho alas personas que sigen la carrera de informatica..sige asi..te kelo mucho apesar de tus locuras

  4. Pingback: Conversaciones de MSN « Loveless, único en su especie

  5. Yomi marzo 25, 2011 a las 9:24 pm

    hola muy chevere el articulo me ha servido bastante.!!!

  6. Ramón Lagos octubre 4, 2011 a las 9:54 am

    gracias por tu aporte, buenisimo.

  7. Chikizz diciembre 14, 2011 a las 12:41 pm

    pinche pendejo te crees porque sabes algo de programación cuando en realidad eres un pinche mierda

  8. yesy marzo 14, 2012 a las 11:43 am

    private void cerrarconexion()
    {
    if (var_conexion.State == ConnectionState.Closed)
    var_conexion.Close();
    }

    si la conexion esta cerrada…cierrala??
    deberia ser asi no?

    private void cerrarconexion()
    {
    if (var_conexion.State == ConnectionState.Open)
    var_conexion.Close();
    }

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

Seguir

Get every new post delivered to your Inbox.