Professional Documents
Culture Documents
dotNetMana
www.dotnetmania.com
dnm.editorial
Resaca
<<
Este nmero es nmero de resaca. La resaca que queda despus del primer nmero de
cualquier publicacin, de las difciles decisiones que marcarn el estilo de la revista,
desde la eleccin del equipo de colaboradores, la bsqueda de patrocinadores, la maquetacin, el nmero de pginas, la orientacin
que tendrn las noticias, de las secciones, de
cmo enfocar los artculos tcnicos, de a
quien se va a dirigir, de qu va a aportar la
pgina Web a la lectura y de los nervios
del da de su presentacin. Uff! Y lo que se
me olvida, y lo que no cuento. Hasta que llega el primer suscriptor ha habido meses de
trabajo y cuando esto ocurre nos da la sensacin de haber terminado cuando en realidad, no hemos hecho sino empezar.
Bienvenido al nmero dos de
dotNetMana! En este nmero nos hemos
esforzado por aportar una serie de artculos
tcnicos diversificados; le ofrecemos artculos de lenguajes, de ASP.NET, de .Net
Framework, de SQL Server, de Exchange
Server, de arquitectura, tres nuevas secciones: dnm.directo para cubrir eventos, realizar
entrevistas, etc.; dnm.opensource que usaremos para dar un repaso al mundo del open
Editor
Paco Marn
(paco.marin@dotnetmania.com)
Administracin
Pilar Prez
(pilar.perez@dotnetmania.com)
Asesor Tcnico/Coordinacin
Marino Posadas
(marino.posadas@dotnetmania.com)
Redactores y Colaboradores
Alejandro Mezcua, Angel Esteban,
Antonio Quirs, Antonio Rojo, David
Carmona, Eladio Rincn, Francisco
Charte, Fernando Guerrero, Fernando
Nogueras, Guillermo guille Som, Ivn
Gonzlez, Jess Lpez, Jordi Rambla,
Imprime
Campillo Nevado
www.campillonevado.com
Diseo y Maquetacin
ride Diseo Grfico
Tel.: (34) 91 477 48 85
eride@eride.net www.eride.net
Suscripciones/Administracin
suscripciones@dotnetmania.com
Edita
netalia, s.l.
c/ Robledal, 135
28529 Rivas-Vaciamadrid (Madrid)
Tf. (34) 91 6667477
Fax (34) 91 4991364
Depsito Legal
M-3.075-2004
Redaccion
redaccion@dotnetmania.com
Publicidad
marketing@dotnetmania.com
Nuevos colaboradores
colaboradores@dotnetmania.com
<<dotNetMana
<<
dnm.editorial
dnm.sumario
El mercado informtico necesita excelentes profesionales,
no corporativismo y titulitos
8-10
11-14
15-19
20-24
Segunda entrega de esta serie de artculos que pretende explicarle cmo hacer las
mismas cosas (o casi) tanto en C# como en Visual Basic .NET.
dnm.sumario
26-31
32-37
38-41
Laboratorio
42-45
Los Borland Data Providers (BDPs). Adems de poder utilizar los proveedores
ADO.NET integrados en la biblioteca de clases .NET, el nuevo Delphi 8 .NET
nos ofrece otras alternativas entre las que se encuentra el flexible BDP.
46-50
Biblioteca
52
Comunidades
53-54
Lexico
Open Source
56
dotNetNuke
Desvn
58
yo
en
bt
s
dr
e
irt
ib s
r
7 l inscrama
te
es
a g
ga
to pro
n
rt e
ue o s
En
sc st r
d e nue
de a
cu
n
p
50
dnm.noticias
<<
dnm.noticias
DevDays 2004
<<dotNetMana
<< dnm.noticias
Disponibilidad de la beta
de la versin 3 de JLDA que automatiza la
conversin de J2EE a .NET
JLCA (Java Language Conversin Assistant) es una herramienta diseada para convertir el
cdigo existente escrito en lenguaje Java en programas para Microsoft Visual C# y .NET
Framework, o sea, especialmente dedicada a atraer a los desarrolladores de Java a la plataforma .NET.
Segn dijo Brian Keller, Product Manager para Visual Studio .NET, esta versin soportar la conversin de J2EE 1.3 y libreras JDK 1.3 as como EJB, JAAS, JCE, JMS, JNDI, y RMI.
Cada versin de JLCA convierte un mayor porcentaje de cdigo que no requiere retoques,
si bien ninguna herramienta de conversin elimina la necesidad de retoques posteriores.
Asimismo, Brian Keller ha dicho que estamos intentando ser interesantes para cualquiera que est trabajando con Java hoy y quiera cambiar sus aplicaciones para tener todas
las ventajas de .NET Framework.
Las aplicaciones convertidas con JLCA pueden extenderse para utilizar la plataforma
de desarrollo .NET incluyendo ASP.NET, ADO.NET y Windows Forms. El gran avance de la versin 3.0 es el soporte para la conversin de aplicaciones J2EE 1.3, incluyendo
Java Server Pages (JSPs) y Enterprise JavaBeans (EJBs). Otras tecnologas de Java que pueden ser traducidas incluyendo Java Authentication y Authorization Service (JAAS), Java
Cryptography Extensin (JCE), Java Message Service (JMS), Java Naming y Directory
Interface (JNDI) y Remote Method Interface (RMI).
La beta de JLCA 3.0 est disponible gratuitamente para los desarrolladores con una
licencia de Visual Studio.NET. Puede descargar una versin de evaluacin de 60 das gratuitamente, si no la tiene.
JLCA 3.0 ser parte de Whidbey, la prxima versin de Visual Studio .NET.
Para ms informacin visite:
http://msdn.microsoft.com/vstudio/downloads/tools/jlca/30beta/
Presentacin de
Delphi 8 para .NET
<<dotNetMana
<< dnm.opinion
Por ejemplo, para abrir una tienda de alimentacin se necesita un permiso administrativo, y las personas que atienden han tenido que pasar unas pruebas de manipulacin de alimentos, pero no se exige
que el dueo sea doctor en medicina y nutricin ;-)
El hecho de que un profesional de informtica haya
tenido que obtener una licencia para ejercer esta actividad, simplemente tendra que significar que el
gobierno tendra informacin suficiente y precisa acerca de dnde se realiza esta actividad, qu tcnicos componen el equipo directivo, y quin sera legalmente
responsable si algo va mal, pero es el mercado el que
tiene que determinar si los estudios acadmicos y/o la
experiencia de dichos tcnicos merecen su confianza
para encargar los trabajos necesarios.
Por cierto, en otros pases, como por ejemplo los
EEUU, un licenciado en Fsicas puede perfectamente dedicarse a disear puentes de autopistas (y s de
algunos casos concretos). En esos casos, los clientes
han confiado plenamente en la capacidad tcnica de
dicho profesional, independientemente de su titulacin. Las restricciones en atribuciones profesionales
se aplican exclusivamente a algunos pocos casos muy
concretos: Medicina, Abogaca y Arquitectura, por
motivos de alta responsabilidad.
Esto de las competencias profesionales es un
tema muy arraigado en la cultura espaola y supongo que de ah se ha trasladado a Latino Amrica. Los
colegios profesionales intentan por todos los medios
limitar lo que otros colectivos pueden hacer, pero
se ocupan muy poco, salvando honrosas excepciones, de que sus colegiados dispongan de la formacin ms adecuada y actualizada para desempear
las actividades que el mercado les exige. La formacin de un tcnico debera estar orientada a la capacitacin de dicho tcnico para resolver problemas
tcnicos, no su habilidad para pasar exmenes que
<<dotNetMana
Titulacin acadmica o experiencia profesional? Colegios profesionales que den oportunidades de formacin y capacitacin a sus colegiados, o
Colegios profesionales que intenten por todos los
medios limitar las atribuciones profesionales de los
no colegiados?
La titulitis es una enfermedad muy arraigada en
el mundo hispano. Y es curioso observar qu poco
arraigo tiene esta prctica en el mundo anglosajn. En
otros pases nadie dira que es un abogado simplemente por tener un ttulo de la carrera de derecho, o
mdico por tener una licenciatura de medicina. En la
mayora de los pases seras abogado si practicas la abogaca y tienes licencia para ello, y seras mdico si practicas la medicina y tienes licencia para ello.
Un buen amigo mo, Ron Talmage, SQL Server
MVP y profesional muy respetado en este mundo de
SQL Server, me dio una sorpresa hace algn tiempo.
Me ense un viejo libro que atesora en su biblioteca y me lo present como uno de los libros ms importantes en su vida: era su tesis doctoral. Lo que me dej
perplejo es que l nunca ha dicho en ningn sitio que
tuviera un doctorado. Y ha subido hasta los peldaos
ms altos de esta profesin sin mostrar esta credencial. Ron, amigo: Chapeau!
Se le debera exigir una licenciatura en literatura a un poeta o novelista?, o un doctorado en arte
dramtico a un actor?, o estudios universitarios a un
pintor o escultor?, o estudios de periodismo a un
periodista?
Si lo que hacen estas personas es arte, la verdad es
que el trabajo que desempea un buen tcnico de
informtica entra muchas veces en el campo del arte,
lo cual no le excusa para evitar seguir las buenas prcticas establecidas en la industria.
Lo que nadie aguanta es un mal poeta, o un mal
actor, periodista o escultor, con estudios o sin ellos. Como
nadie aguanta un mal mdico, ingeniero, o profesor.
Habra que diferenciar entre capacitacin tcnica
y capacidad legal para contratar trabajos y hacerse responsable de los mismos.
Capacitacin tcnica se consigue mediante muchos
diversos sistemas, y es muy difcil determinar el nivel
de capacidad para desempear un determinado trabajo fijndose exclusivamente en el nivel de titulacin
universitaria o no-universitaria, que el tcnico haya
adquirido.
Es obvio que hay excelentes tcnicos cuyos estudios no se corresponden con la actividad que llevan a
cabo. Otra cosa es la capacidad legal para contratar
trabajos, y en esto s creo que los gobiernos deben
regular qu datos se deben obtener de los profesionales liberales para asegurar que los clientes puedan
exigir responsabilidades. Sin embargo esto no debera tener nada que ver con el currculo acadmico de
los tcnicos que van a realizar el trabajo, sino con la
responsabilidad profesional que deba exigrseles.
<< dnm.opinion
en muchos casos son absurdos en su planteamiento
y calificacin.
Sin embargo muchas universidades estn ms interesadas en proporcionar formacin cientfica exclusivamente, lo cual es maravilloso (a m me ha servido
enormemente este tipo de formacin), pero no tiene
mucho que ver con la capacitacin tcnica para resolver los problemas del da a da. Y esta capacitacin
tcnica se puede proporcionar mediante muchos otros
sistemas que cuestan menos recursos a la sociedad que
formar miles de cientficos cada ao que nunca van a
realizar ninguna actividad cientfica.
<<dotNetMana
10
No me malinterpretis. Yo soy un firme convencido de que es esta formacin eminentemente cientfica la que hace de los ingenieros espaoles (e hispanos en general) ms verstiles que sus homlogos de
otros pases. Lo que digo es que posiblemente el producto obtenido se haya conseguido mediante una utilizacin desmesurada de recursos del estado (y el estado lo pagamos todos). No hay ms que echar un vistazo a las estadsticas de fracaso universitario en carreras de ingeniera en Espaa para observar que estudiantes de carreras tcnicas emplean normalmente
seis aos para obtener titulaciones que se disearon
alrededor de carreras de tres aos, y de ocho a diez
aos para carreras de seis aos.
En otros pases con mayor xito que el nuestro
en estos campos, se forma un ingeniero en cuatro
aos, y si desea avanzar en sus estudios, puede alcanzar un Master of Sciences (MSc) en dos aos ms. Y
estoy hablando de aos, no de cursos, y en muchos
casos simultaneando trabajo para poderse pagar los
estudios, adems de otras actividades culturales y ldicas. Son ellos ms inteligentes que nosotros? Por
supuesto que no, pero tienen planes de estudios que
permiten obtener ttulos totalmente reconocidos con
la adecuada economa de medios requeridos para su
obtencin.
La experiencia profesional puede llevar a personas sin estudios, o sin estudios universitarios completos, a ofrecer servicios del ms alto nivel tcnico.
anlisis de requisitos y tecnologas distribuidas. Tenemos una de las mejores tecnologas Java del mundo y tambin ofrecemos una de las mejores posibilidades
en lo que respecta al mundo Windows.
Con respecto al personal que tenemos en las tecnologas Together, yo no
soy un experto en el tema de diseo,
pero tengo otros colegas que s lo son
y cada uno tenemos nuestro trabajo,
<<dotNetMana
11
<< dnm.directo.entrevistas
<<dotNetMana
12
<< dnm.directo.entrevistas
Jason, qu dices t?
Uhm Rapidez, flexibilidad y productividad (en perfecto ingls) J
Bueno, hombre, no pretenda que se contradijesen. Slo quera que me diese una visin ms
tcnica y ms extensa.
Hay muchas caractersticas que estamos ofreciendo para hacer ms fcil la vida al desarrollador y para
poner ms potencia bajo su control.
Existen tres reas clave de las que podramos hablar
desde el punto de vista de la tecnologa:
Estamos obteniendo muchas opiniones favorables sobre nuestra manera de implementar
ASP.NET para el desarrollo Web, por ejemplo,
en relacin con el diseador Web que incorpora el producto y algunos componentes para el
desarrollo de aplicaciones con ASP.NET y acceso a base de datos que los desarrolladores podrn
aprovechar y mejorar as su productividad con
respecto a lo que pueden encontrar en Visual
Studio.
El siguiente rea importante es el acceso a base
de datos donde aportamos los BDPs (Borland
Data Providers). stos ofrecen posibilidades para
acceder eficientemente a distintos motores de
bases de datos como Oracle, SQL Server e
Interbase de una manera uniforme. Y que permite, con una gran flexibilidad, sin cambiar prcticamente el cdigo, hacer una aplicacin que
pueda funcionar contra diferentes bases de datos.
La tecnologa ECO, con la que ofrecemos la posibilidad de crear aplicaciones model driven. Si se
mira desde un punto de vista del negocio, como
parte de su estrategia puede estar la necesidad de
ofrecer de una manera rpida varias aplicaciones a
diferentes clientes. Usted puede definir un modelo UML que represente la solucin, o puede tener
un modelo estndar que puede haber sido obtenido de alguien, o haberlo diseado yo mismo, o puede ser incluso refactorizado a partir de cdigo
<<dotNetMana
13
<< dnm.directo.entrevistas
<<dotNetMana
Jason Vokes con Octavio Hernndez en la charla inicial de la presentacin de Delphi 8 celebrada el 5 de febrero.
14
Autenticacin ASP.NET
a travs de formulario y Active Directory
En este artculo trataremos la autenticacin en ASP.NET, y explicaremos con
un ejemplo prctico como autenticarse mediante formulario con Active
Directory.
si el usuario existe en Active Directory y que compruebe a qu grupos pertenece. Tambin crearemos una sencilla pgina Web en la que comprobaremos cmo funciona la autenticacin mediante formulario.
Hay tres tipos de autenticacin en ASP.NET,
que son:
Formulario: Es el propio programador el que
se encarga de definir el proceso para identificar al usuario. Una vez identificado se crear un token que servir para identificar al
usuario.
Windows: Es el sistema operativo el que se
encarga de identificar al usuario y puede realizarse sin labores de programacin.
Passport: Es un Web Service el que se encarga
de identificar al usuario, en concreto se debe
utilizar Passport SDK para utilizar este tipo de
autenticacin.
El tipo de autenticacin Windows requiere
menos labores de programacin pero puede aumentar las labores de mantenimiento ya que se debe
controlar la creacin de usuarios a travs de
Windows.
El tipo de autenticacin Passport en realidad no
es realizado por nuestro sistema, la identificacin
se realiza de forma remota a travs de un Web Service.
Este sistema que ha sido desarrollado por Microsoft
<<dotNetMana
15
<< dnm.asp.net
cual redireccionar la aplicacin
en el caso de que se trate de acceder a otra pgina sin haberse
autenticado previamente.
timeout, es el tiempo en minutos
en el cual expira la cookie de
autenticacin del usuario.
protection, es el mtodo que se utiliza para proteger la cookie y puede ser:
None, no realiza ninguna proteccin de la cookie.
Encryption, utiliza mtodos de
encriptacin para que los datos
de la cookie no sean visibles.
Validation, no encripta los datos
de la cookie pero comprueba
que estos datos no han sido alterados al enviarlos por Internet.
All, utiliza Validation y
Encryptation para proteger la
cookie.
mamos AutenticacionLdap. En
esta clase creamos un constructor al que
le pasamos como parmetros el path de
conexin a Active Directory y el dominio del mismo.
<authentication mode=Forms>
<forms name=.ASPXUSERDEMO loginUrl=login.aspx protection=All
time-
out=60 />
</authentication>
La segunda modificacin en el
web.config consiste en poner el modo de
autorizacin deny users=? as no se permite el acceso a ninguna pgina de la
aplicacin sin haberse autenticado previamente.
<<dotNetMana
<authorization>
<deny users=? />
</authorization>
16
Active Directory tiene sus propias propiedades a las que se les puede aadir
las que considere conveniente el administrador.
Adems, los elementos del Active
Directory se pueden organizar en
Unidades Organizativas (OU), pudiendo
delegar labores de administracin en
cada una de ellas.
RFC 822
LDAP (Ligthweight Directory
Access Protocol)
UNC (Universal Naming
Convention)
En este caso utilizaremos LDAP,
cuyas siglas podran traducirse como
Protocolo Ligero de Acceso a Directorios.
LDAP es una versin simplificada del
protocolo X.500, que fue desarrollado para facilitar el acceso a Active
Directory.
Cuando queremos acceder a un elemento de Active Directory tenemos que
crear una conexin a LDAP Debemos
tener en cuenta que en LDAP debemos
poner primero los elementos hijo del
esquema de directorio y despus los elementos padre.
Un ejemplo de conexin es el
siguiente:
<< dnm.asp.net
LDAP://miServidor/OU=miUnidadOrganizativa,DC=dotnetmaniacos,DC=com
Debe tener en cuenta que ste es slo un ejemplo de conexin LDAP y deber modificarlo poniendo el nombre de su dominio as como los nombres
correspondientes a los elementos de su Active
Directory.
La clase AutenticacionLdap tendr el mtodo Existe
al que pasamos como parmetros el usuario y la password y comprueba si existe en Active Directory.
Crearemos una entrada a Active Directory con el usuario y password que estamos comprobando si existe y
posteriormente se buscar ese usuario por la propie-
OU=DepartProgramacion,OU=DepartInformatica,OU=DepartInvestigacion
if(resultado == null)
return false;
else
return true;
}
catch (Exception ex)
{
pError=ex.Message;
return false;
}
}
Fuente 1
<<dotNetMana
17
<< dnm.asp.net
sos en Active Directory para consultar
los grupos a los que pertenece, por tanto se sobrecarga este mtodo pudiendo
introducir adems otros dos parmetros
con el usuario y password de alguien que
s tenga permisos para consultar Active
Directory.
Para este mtodo buscaremos el
usuario a travs de la propiedad
SAMAccountName y una vez encontrado
el usuario recorremos la propiedad
memberOf que es un array con todos los
grupos a los que pertenece. Ver fuente 2.
Debemos fijarnos que en este caso
el usuario que crea la entrada a Active
Directory no es el mismo usuario que
estamos comprobando si pertenece al
grupo, sino que se trata de otro usuario
con permisos para consultar Active
Directory.
<<dotNetMana
if (GrupoUsuario==grupoLdap)
return true;
18
}
}
catch (Exception ex)
{
pError=ex.Message;
return false;
}
return false;
}
Fuente 2
Active Directory es
un servicio de directorio,
es decir, un conjunto
de elementos
(como por ejemplo PCs,
usuarios, grupos, impresoras,
etc.) que representan todo
lo que hay en una red
<< dnm.asp.net
public bool Pertenece(string grupoLdap,string usuario, string pwd)
{
string pathGrupo;
string grupoUsuario;
DirectoryEntry entrada;
DirectorySearcher buscador;
SearchResult resultado;
try
{
entrada = new DirectoryEntry(pPath,usuario,pwd);
buscador = new DirectorySearcher(entrada);
buscador.Filter = (SAMAccountName= + usuario + );
buscador.PropertiesToLoad.Add(memberOf);
resultado = buscador.FindOne();
for( int contador = 0; contador < resultado.Properties[memberOf].Count;
{
grupoLdap=grupoLdap.ToUpper() + ,;
pathGrupo = (String)resultado.Properties[memberOf][contador];
grupoUsuario = pathGrupo.ToUpper().Substring(3,grupoLdap.Length);
if (grupoUsuario==grupoLdap)
return true;
}
}
catch (Exception ex)
{
pError=ex.Message;
return false;
}
return false;
}
contador++)
Fuente 3
El proyecto completo que corresponde a este artculo lo pondr encontrar en la pgina Web de la revista en
AutenticacionLdap usuario=new
AutenticacionLdap(ConfigurationSettings.AppSettings[pathLdap],ConfigurationSettings.AppSettings[dominioLda
p]);
http://www.dotnetmania.com.
if (usuario.Existe(txtUsuario.Text,txtPwd.Text))
{
FormsAuthentication.SetAuthCookie(txtUsuario.Text,false);
if (usuario.Pertenece(GrupoAdministradores,txtUsuario.Text,txtPwd.Text))
Response.Redirect(InicioAdmin.aspx);
else if (usuario.Pertenece(GrupoUsuarios,txtUsuario.Text,txtPwd.Text))
Response.Redirect(InicioUsuario.aspx);
}
else
{
LblError.Text = usuario.Error;
}
<<dotNetMana
Se comprobar si se encuentra el
usuario en Active Directory llamando
al mtodo Existe y pasndole como parmetros el usuario y la password que se
han introducido a travs del WebForm.
Una vez que hemos comprobado
que el usuario existe creamos el token de
autenticacin. Este token servir para
identificar al usuario a travs de toda la
aplicacin Web.
Y, por ltimo, se utilizar el mtodo
Pertenece para comprobar en qu grupo
est incluido el usuario y redireccionarlo a donde le corresponda. Ver fuente 4.
En este artculo hemos podido comprobar como ASP.NET nos ofrece varias
19
<<
Por Guillermo Guille Som
Visual Basic MVP desde 1997
www.elguille.info
Equivalencia de instrucciones
de C# y VB .NET (II)
Cmo hacer las mismas cosas (o casi) en C# y Visual Basic .NET
<<dotNetMana
<<
20
Declaracin de variables,
mtodos, propiedades
e indizadores
La declaracin de las variables, mtodos, propiedades, etc. difieren bsicamente en la forma de realizar la declaracin. En C# se indicar el mbito, es
decir, si es pblico, privado, etc. seguido
del tipo de datos, seguido del nombre de
la variable. En VB se indicar el mbito
seguido del nombre y por ltimo la instruccin As seguida del tipo de datos.
Tanto en VB como en C# se pueden
definir constantes, en el caso de C# se
usar la instruccin const antes del tipo
de datos, en VB se usar Const en lugar
de Dim o Static cuando se declare una
constante dentro de un procedimiento.
Si esa declaracin se hace a nivel de tipo,
la instruccin Const se usar despus del
modificador de mbito. Las constantes
siempre se definen con un valor.
Las variables tambin se pueden definir y asignarle un valor predeterminado
al mismo tiempo que se declara. Si no se
indica de forma explcita, ese valor, en
Visual Basic siempre se asignar un valor
"cero", pero en C# ese valor predeterminado slo se asignar si la variable se
declara como miembro de un tipo (campo), si la variable se declara dentro de
una funcin, no se asigna ningn valor
predeterminado y habr que asignarle
algn valor antes de usarla.
Los mtodos sern las funciones y
procedimientos declarados en una clase.
<< dnm.lenguajes.net
C#
VB .NET
int var;
int[ ] var;
void mtodo()
{}
Sub mtodo()
End Sub
int mtodo()
{}
Function mtodo() As
Integer
End Function
string Nombre{
roperty Nombre() As
String
<bloque Get>
<bloque Set>
End Property
<bloque get>
<bloque set>
}
Declarar una propiedad
de solo lectura
string Nombre{
<bloque get>}
string Nombre{
<bloque set>}
ReadOnly Property
Nombre() As String
<bloque Get>
End Property
WriteOnly Property
Nombre() As String
<bloque Set>
End Property
Declarar un indizador
(o propiedad por defecto en VB)
<mbito> Const
<identificador> As
<tipo> = <valor>
<mbito> readonly
<mbito> ReadOnly
<tipo> <identificador> <identificador> As
[= <valor>];
<tipo> [= <valor>]
dores son propiedades predeterminadas y se puede usar cualquier identificador, de forma que se puede acceder
usando el identificador o no. Tanto en
C# como en VB, se debe indicar como
mnimo un parmetro.
Los mtodos, propiedades y otras
instrucciones se declaran seguidas de
un "bloque de cdigo", en C# los bloques de cdigo estn incluidos dentro
de un par de llaves { y }. En Visual Basic
NET el final de dicho bloque de cdigo suele terminar con la instruccin End
<tipo de bloque>, donde <tipo de bloque> ser el tipo de bloque que estamos
definiendo, por ejemplo si es un Sub, el
final del bloque se indicar con End Sub.
Los campos son las variables declaradas en las clases (tipos). Esos campos
sern los datos que la clase o tipo utilicen. Se pueden definir campos de slo
lectura de dos formas distintas: definindolo como una constante, lo cual
har que dicho campo sea realmente de
slo lectura, no permitir ninguna asignacin de un valor diferente al usado al
declararlo por cdigo; y por otro lado,
podemos definir campos de slo lectura a los que podemos asignar valores de
dos formas distintas: al definirlo, en este
caso actuarn "casi" como una constante, pero tambin podemos asignarle un valor slo y exclusivamente en el
constructor de la clase. De esta forma,
podemos hacer que durante la ejecucin sea de slo lectura, pero ese valor
se puede asignar en tiempo de ejecucin; aunque slo al crear la nueva instancia.
La tabla 4 muestra cmo realizar en
VB .NET y C# la declaracin de variables, mtodos, etc.
<<dotNetMana
Tarea a realizar
21
<< dnm.lenguajes.net
Por defecto los parmetros son por
valor, en el caso de C# no existe ninguna instruccin para indicar esa cualidad;
en Visual Basic .NET existe la instruccin ByVal para indicarlo expresamente, aunque ese modificador es opcional.
Visual Studio .NET siempre lo indicar usando ByVal.
Por otro lado, se pueden definir parmetros por referencia, en el caso de VB
.NET se indicarn mediante la instruccin ByRef. En C# existen dos tipos de
modificadores para los parmetros por
referencia: out y ref. La diferencia fundamental es que a los parmetros definidos con ref se les debe asignar un valor
antes de usarlo como parmetro del
mtodo, mientras que los parmetros
definidos con out no es necesario inicializarlos antes de usarlos, pero se debern
asignar un valor dentro del mtodo antes
de usarlo. Otra diferencia de los parmetros por referencia entre Visual Basic
y C#, es que en C# siempre habr que
usar el mismo modificador que se ha usado para definir el parmetro, pero en VB
no se usar dicho modificador.
Tambin se pueden definir arrays de
parmetros. En ese caso, se podr llamar al mtodo usando un nmero variable de parmetros, aunque todos esos
parmetros sern del mismo tipo y siempre sern por valor. Para declarar este
tipo de parmetros, en C# se usar la
instruccin params y en VB se usar
ParamArray . Si se utiliza este tipo de
parmetros, ser el ltimo de la lista de
parmetros del mtodo.
En Visual Basic .NET existe el concepto de parmetro opcional. Esos parmetros opcionales pueden ser por valor
o por referencia y siempre habr que
definirlos con un valor por defecto,
dicho valor se usar en el caso de que
no se especifiquen al llamar al mtodo.
La tabla 5 muestra la forma de declarar y usar los distintos tipos de parmetros de los mtodos.
<<dotNetMana
Declaracin de espacios de
nombres, clases, estructuras,
interfaces y enumeraciones
22
Tarea a realizar
C#
VB .NET
No se indica
<mtodo>(ref var)
{}
<mtodo>(ref var);
<mtodo>(var)
Definir parmetros
por referencia
<mtodo>(out var)
{}
<mtodo>(out var);
<mtodo>(var)
Debido a la forma que se tratan las variables en Visual Basic, que siempre son
inicializadas antes de usarlas, no hay esa diferencia en los parmetros
por referencia
Definir un array
de parmetros
<mtodo>(params
array[]){}
<mtodo>(ParamArray var)
End <tipo mtodo>
Llamar a un mtodo
que define un array
de parmetros
<mtodo>([param1][,
param2][, etc.])
<mtodo>([param1][, param2][,
etc.])
Definir parmetros
opcionales
No aplicable, usar
sobrecarga de mtodos
mtodo>([ByVal|ByRef]Optional
var As <tipo> = <valor>)
Slo VB puede definir parmetros opcionales. Se pueden definir tantos parmetros opcionales como necesitemos, pero los parmetros opcionales siempre habr
que indicarlos despus de los parmetros no opcionales y en caso de que se utilice
ParamArray, ste debe aparecer despus de todos los parmetros opcionales.
Tabla 5. Parmetros de los mtodos
<< dnm.lenguajes.net
Tarea a realizar
C#
VB .NET
namespace
Guille.Pruebas
{}
Namespace
Guille.Pruebas
End Namespace
class Prueba
{}
Class Prueba
End Class
Class Prueba2
Inherits Prueba
End Class
Class Prueba3
Implements IPrueba
End Class
{}
Declarar una clase que se deriva
de una clase e implementa
una interfaz
Class Prueba4
Inherits Prueba
Implements IPrueba
End Class
Class Prueba5
Inherits Prueba
Implements IPrueba,
IPruebaB
End Class
La herencia de .NET slo permite la herencia simple, slo podemos derivar nuestras clases de una sola
clase. Pero se permite la implementacin de mltiples interfaces.En C#, no se indica explcitamente si
se deriva de una clase o se implementa una interfaz, el nico requisito es que la clase base se indique
antes que las interfaces.
En VB .NET hay que indicar siempre si se est derivando la clase de otra, mediante Inherits o si se
estn implementando interfaces, mediante Implements.
Siempre debe aparecer Inherits antes de Implements y ambas antes de cualquier otro cdigo que contenga la clase.
Declarar una clase de tipo
Module
No aplicable.
Module Pruebas
En C# sera como class,
End Module
pero todos los miembros
usarn el modificador static.
struct MiEstructura
{}
Structure MiEstructura
End Structure
struct MiEstructura2 :
IPrueba, IPrueba2
{}
Structure MiEstructura2
Implements IPrueba,
IPrueba2
End Structure
interface IPrueba
{}
Interface IPrueba
End Interface
interface IPrueba2 :
IPrueba
{}
Interface IPrueba2
Implements IPrueba
End Interface
Enum MiEnumeracin
Lu : Ma
Mi
End Enum
En C# las constantes (miembros de la enumeracin) se separan con comas.En VB .NET cada una de
las constantes que forman parte de una enumeracin deben estar definidas en lneas independientes o
en instrucciones diferentes (separndolas con dos puntos).
Tabla 6. Declaracin de espacios de nombres, clases, estructuras, interfaces y enumeraciones
<<dotNetMana
23
no sigas sumergido
en un mar de dudas,
diseo grfico
diseo pginas
web
itorial
diseo ed
netalia ediciones
c/ Robledal, 135
28529 Rivas-Vaciamadrid (Madrid)
Telf: 91 666 74 77
Fax: 91 499 13 64
www.dotnetmania.com
<<dotNetMana
26
<< dnm.plataforma.net
Una solucin sencilla
aunque limitada para evaluar expresiones
Una solucin rpida y sencilla para obtener la
capacidad de evaluar expresiones simples en .NET
es usar la biblioteca de tiempo de ejecucin de
JScript.NET. Cree un nuevo proyecto de Visual
Studio y aada una referencia a la biblioteca
Microsoft.JScript. Si utiliza el examinador de objetos
(Ver figura 1) ver que JScript posee un objeto llamado GlobalObject que posee un miembro Eval. Este
mtodo sirve precisamente para nuestro propsito ya
que basta con pasarle una expresin en JScript para
que se interprete y obtengamos su valor. Este mtodo no se puede llamar directamente, pero si creamos
una DLL en JScript que encapsule el mtodo Eval
ser muy sencillo hacer uso de su funcionalidad desde otros lenguajes.
saria, expresiones propias de nuestro lenguaje preferido e incluso utilizar estructuras de control de flujo.
Existen en .NET diversos espacios de nombres
relacionados con la compilacin de cdigo
(System.CodeDom). stos, combinados con las clases
para introspeccin (System.Reflection) ofrecen al programador avanzado una herramienta de incalculable
valor, que supera con creces a las capacidades que ofrecan anteriormente funciones como Eval o Execute en
JScript y VBScript.
Muchas de las clases de System.CodeDom se utilizan para construir en el compilador elementos de cdigo que, ms tarde, podemos recuperar en formato de
cdigo fuente. Algunas aplicaciones utilizan esta caracterstica para generar cdigo fuente en un determinado lenguaje, como por ejemplo la estupenda utilidad WebService Studio (Figura 2) que genera dinmicamente cdigo cliente en C# para usar un servicio
Web definido a partir de su WSDL.
Lo que estamos buscando en este artculo, sin
embargo es justo lo contrario. Es decir, a partir de
un cdigo fuente preexistente o generado para la ocasin, queremos compilarlo y utilizarlo dinmicamente
sin abandonar nuestro programa, y por supuesto sin
usar herramientas externas (como los compiladores
de lnea de comandos) ni crear archivos temporales.
Como veremos a continuacin, los compiladores
de los lenguajes .NET ofrecen clases que permiten
controlar toda su funcionalidad de manera genrica
y sin salirnos de la plataforma.
<<dotNetMana
27
<< dnm.plataforma.net
pero para cada uno de estos otros lenguajes.
Hemos creado una clase llamada Evaluador dentro del espacio de nombres dotNetMania que tiene dos
mtodos llamados evalCS, para interpretar cdigo C#;
y evalVB, que evala expresiones escritas en Visual
Basic. En cdigo de ejemplo tambin hay un proyecto de WindowsForms que sirve para probar el mdulo
de evaluacin desarrollado. Aunque hemos escrito el
mdulo usando C#, pasarlo a Visual Basic sera cuestin de unos pocos minutos.
La tcnica del ejemplo consiste en usar el compilador de lenguaje deseado para crear un mdulo ejecutable que se compila directamente en memoria. Acto seguido, usando las clases de introspeccin de .NET, se llama a los mtodos de las clases contenidas en dicho mdulo de forma que obtengamos sus valores de retorno.
Por ejemplo, si tenemos la expresin en C#
siguiente:
Al evaluarla obtendramos una cadena con el nmero 28 al final ya que el resultado de la operacin matemtica se convierte en un entero y se concatena a una
cadena. Si quisisemos disponer de una funcin en nuestro programa que devolviese siempre este resultado
podramos crear una clase que definiese un mtodo conteniendo el cdigo de la lnea anterior, por ejemplo:
using System;
namespace dotNetMania
{
public class ClaseComodin
{
public object MetodoComodin()
{
return (El resultado es: + (int) ((5.2+4.17)*3));
}
}
}
<<dotNetMana
28
CompilerParameters cp = new
CompilerParameters();
cp.ReferencedAssemblies.Add(system.dll);
cp.GenerateExecutable = false;
cp.GenerateInMemory = true;
Permite establecer las condiciones de la compilacin. Lo que se hace es aadir una referencia al ensam-
<< dnm.plataforma.net
blado base de .NET (SYSTEM.DLL), indicarle al
compilador que genere un ejecutable y, por fin, decirle que genere dicho ejecutable en memoria.
mos que agregar una referencia al ensamblado de compatibilidad de Visual Basic, de forma que las expresiones puedan usar funciones heredadas de versiones
anteriores del lenguaje. Le recomiendo que eche un
vistazo al cdigo de ejemplo para comprobar cmo se
hace. Por lo dems, todo es exactamente igual. Por
if (res.Errors.HasErrors)
{
StringBuilder errores = new StringBuilder();
errores.Append(La compilacin ha producido los siguientes errores:\n);
foreach (CompilerError error in res.Errors)
{
errores.AppendFormat({0}\n, error.ErrorText);
}
throw new Exception(errores.ToString());
}
En este fragmento lo nico que se hace es recorrer los errores en caso de que se produzcan y transmitirlos al programa que est haciendo uso de nuestro mtodo.
Si no se han producido errores creamos un objeto de la clase que hemos definido en el cdigo que se
acaba de compilar:
supuesto, puede aadir otros ensamblados en los parmetros del compilador de forma que sus expresiones
tengan acceso a cualquier clase .NET, incluyendo sus
propias clases personalizadas.
He creado un pequeo programa de WindowsForms
para probar la clase. En la figura 3 se puede observar
en funcionamiento. El evaluador se puede utilizar tam-
una frase.trim()
<<dotNetMana
29
<< dnm.plataforma.net
public static object evalCS(string Expresion)
{
//Si la expresin est vaca se devuelve un nulo y nos ahorramos la compilacin
if (Expresion.Trim() == ) return null;
//Se obtiene una referencia a un compilador de C#
ICodeCompiler compilador = (new CSharpCodeProvider().CreateCompiler());
//Asignamos parmetros de compilacin
CompilerParameters cp = new CompilerParameters();
//Se aaden las referencias mnimas
cp.ReferencedAssemblies.Add(system.dll);
//Se indica que se debe generar un ejecutable...
cp.GenerateExecutable = false;
//..y compilar en memoria, no a disco
cp.GenerateInMemory = true;
//Ahora se genera el cdigo de un ensamblado comodn al vuelo
StringBuilder sbComodin = new StringBuilder();
sbComodin.Append(using System;\n);
sbComodin.Append(namespace dotNetMania {\n);
//Se crea la clase comodn para evaluar la expresin
sbComodin.Append( public class ClaseComodin {\n);
//y se crea el mtodo comodn
sbComodin.Append( public object MetodoComodin() {\n);
//Esta es la expresin a evaluar
sbComodin.AppendFormat(return ({0}); , Expresion);
//Se cierra el mtodo
sbComodin.Append(}\n);
//Se cierra la clase
sbComodin.Append(}\n);
//y el espacio de nombres
sbComodin.Append(});
//Se compila el cdigo al vuelo
CompilerResults res = compilador.CompileAssemblyFromSource(cp, sbComodin.ToString());
//Se verifica si se han producido errores de compilacin o no
if (res.Errors.HasErrors)
{
//Se averigua qu errores ha habido
StringBuilder errores = new StringBuilder();
errores.Append(La compilacin ha producido los siguientes errores:\n);
foreach (CompilerError error in res.Errors)
{
errores.AppendFormat({0}\n, error.ErrorText);
}
//y se genera un error para informar de ello
throw new Exception(errores.ToString());
}
<<dotNetMana
30
<< dnm.plataforma.net
Ms ideas respecto
a la compilacin al vuelo
Este sencillo ejemplo nos ha servido para ilustrar grosso modo el funcionamiento de la tcnica propuesta,
pero las posibilidades son enormes.
Con ella es posible facilitar la definicin de extensiones para nuestros pro-
Un poco de historia
Hace poco ms de dos aos, Schulte y Meijer empezaron un proyecto para buscar un camino para integrar
los datos directamente desde un lenguaje de programacin. Escribieron una propuesta para un nuevo lenguaje
llamado X# que enlazara SQL, XML y el modelo de programacin orientada a objetos.
En febrero de 2002, el equipo de Webdata de
Microsoft decidi tomar la especificacin del lenguaje y
desarrollarlo. El equipo complet un prototipo de investigacin del lenguaje en abril de 2003. Este prototipo
empez a fomentarse de dos formas dentro de Microsoft:
Por un lado, Microsoft Research en Cambridge, el
cual est trabajando en conjuncin con la Universidad
de Cambridge, est aadiendo un nuevo modelo de
comunicaciones para X Omega que har ms fcil
para los programadores escribir servicios Web y aplicaciones multihebra (la extensin multihebra viene
de Polyphonic C#, un derivado de C#, y tambin
una extensin de X Omega).
Dentro de seis meses, Microsoft Research Cambridge
planea una release de investigacin de Xen. Cuando
est operativa, el lenguaje probablemente se llamar
X Omega, pero no permitiremos el uso para desarrollar en aplicaciones reales, segn Schulte.
Por otro lado, varios equipos de productos internos
de Microsoft tendrn acceso a cdigo y conceptos de
X Omega, a travs del equipo de Webdata. El equipo
de Webdata de Microsoft es parte del equipo de pro-
ducto de SQL Server y est encargado de parir tecnologas de acceso a datos que se incorporan a varios
productos de Microsoft.
El equipo de Longhorn, el equipo de SQL y el equipo de Visual Studio estn en medio de stos muy probablemente para tomar elementos de X Omega y
encontrar caminos potenciales para incorporarlo, dijo
Schulte. Mientras que ninguno de estos equipos se
espera que incorporen ningn cdigo de X Omega
por ahora, la gente del subsistema de comunicaciones Indigo estn muy interesados en X Omega.
Fuentes principales Microsoft Watch, ExtremeTech
y las pginas de los principales desarrolladores. Vea informacin adicional en dotnetmania.com.
noticias.noticias.noticias.noticia
<<dotNetMana
<< Qu es WebDAV?
32
<< dnm.servidores.exchange
WebDAV y Exchange
Combinando las ideas de los apartados anteriores, si adems de permitir el acceso a los elementos del Store de Exchange mediante HTTP
bsico, se habilita tambin el acceso WebDAV, dispondremos de la capacidad de manipular cualquiera
de los objetos almacenados en Exchange de manera remota.
De esta forma se puede utilizar Exchange como
plataforma de aplicaciones que integre los elementos
comunes de colaboracin de una manera sencilla
(correo, citas, contactos, etc.).
Finalmente, como se est manipulando la informacin directamente en la base de datos, Outlook reflejar automticamente los cambios realizados. Es decir, si
externamente se crea una cita, sta se ver en Outlook
como si se hubiese realizado desde la propia aplicacin.
Un ejemplo prctico
Junto a este artculo se incluye una pequea aplicacin de ejemplo que permite definir consultas DAV,
ejecutarlas en un servidor y ver el resultado devuelto
(XML). Se incluyen varias consultas predefinidas que
realizan operaciones habituales y que servirn como
punto de partida para realizar operaciones ms complejas y que se puedan adaptar a cualquier aplicacin.
El resto del artculo se centra en ver cmo funciona
este sencillo ejemplo.
<<dotNetMana
trolado por Exchange (/exchange/), el servidor localizar el elemento solicitado en la base de datos y lo
mostrar. En este caso, por omisin mostrar los formularios HTML de Outlook Web Access, pero este
comportamiento se puede modificar, aunque este tema
queda fuera del mbito de este artculo.
Cuando se accede al buzn de un usuario, el nombre de la bandeja de entrada no es siempre inbox como
se ha mostrado (http://localhost/ exchange/amezcua/inbox/hola.eml), sino que puede ser Bandeja de
entrada (http://localhost/exchange/amezcua/bandeja de entrada/hola.eml). El que la carpeta aparezca en
un idioma u otro depende del idioma de la herramienta
que se utiliz para acceder al buzn del usuario la primera vez. Por ejemplo si se crea un nuevo buzn y la
primera vez se accede con Internet Explorer en espaol, se generar todo el rbol de carpetas del buzn
usando ese idioma.
Cada elemento de la base de datos, una vez identificado por su URL, dispone de una serie de propiedades que determinan su contenido. Por ejemplo, si
se quiere conocer el asunto de un determinado mensaje de correo, habr que acceder al elemento y obtener el valor de la propiedad urn:schemas:httpmail:subject o urn:schemas:mailheader:subject.
La idea final es entonces que cualquier elemento
dentro de Exchange est identificado de manera unvoca mediante una URL y que IIS permite el acceso a
cualquier elemento de la base de datos mediante HTTP.
La documentacin completa del esquema de definicin de objetos y propiedades est en el SDK de
Exchange. El SDK, adems de la documentacin, dispone de herramientas y utilidades para facilitar el desarrollo. En concreto una muy til es Exchange
Explorer. Este programa permite acceder al Web Store
y poder navegar por l de manera sencilla, viendo los
elementos que contiene y sus propiedades con sus
correspondientes valores.
El SDK de Exchange se puede conseguir en
http://msdn.microsoft.com/exchange/, donde hay adems interesantes artculos de desarrollo no slo sobre
este tema, sino sobre todo lo relacionado con
Exchange Server.
33
<< dnm.servidores.exchange
una peticin HTTP con la seguridad
correspondiente (usuario y contrasea). Para ello se usar la clase
System.Net.NetworkCredential.
<<dotNetMana
34
Store a la que se quiere enfocar la consulta (la carpeta en la que estn los mensajes). Si se quieren obtener los mensajes del buzn amezcua del servidor
local, habr que sustituir [ServerUrl]
por http://localhost/exchange/amezcua/inbox/.
<?xml version=1.0?>
<D:searchrequest xmlns:D = DAV:>
<D:sql>
SELECT urn:schemas:httpmail:sendername, urn:schemas:httpmail:subject,
urn:schemas:httpmail:datereceived, urn:schemas:httpmail:read
FROM [ServerUrl] </D:sql>
</D:searchrequest>
<< dnm.servidores.exchange
la ventana) se definen varios namespaces que determinan el mbito de cada
uno de los campos en el nodo raz del
documento XML (<a:multistatus>).
Por ejemplo, el campo sendername
( <d:sendername> ) est definido en el
namespace urn:schemas:httpmail:
(xmlns:d=urn:schemas:httpmail:) y se
referencia en el ejemplo como d:.
La lista de namespaces completa se
puede encontrar en la documentacin
del SDK de Exchange.
Por cada elemento encontrado en
la consulta, se devolver un elemento <a:response> (namespace DAV:,
o, dicho de otro modo, respuesta
DAV). Por cada uno de ellos se
devuelve la URL completa del elemento en el nodo <a:href>, que habitualmente la aplicacin almacenar
<d:sendername>Alejandro Mezcua</d:sendername>.
Description = Multi-Status.
<?xml version=1.0?>
<D:searchrequest xmlns:D = DAV:>
<D:sql>
SELECT urn:schemas:httpmail:sendernam, urn:schemas:httpmail:subject,
urn:schemas:httpmail:datereceived, urn:schemas:httpmail:read
FROM [ServerUrl] </D:sql>
</D:searchrequest>
<?xml version=1.0?>
<a:multistatus xmlns:b=urn:uuid:c2f41010-65b3-11d1-a29f-00aa00c14882/ xmlns:d=urn:schemas:httpmail: xmlns:c=xml: xmlns:e=urn:schemas-microsoft-com:office:office xmlns:a=DAV:>
<a:response>
<a:href>http://localhost/exchange/amezcua/Inbox/Prueba%20DAV2.EML</a:href>
<a:propstat>
<a:status>HTTP/1.1 200 OK</a:status>
<a:prop>
<d:subject>Prueba DAV2</d:subject>
<d:datereceived b:dt=dateTime.tz>2003-12-12T10:23:24.703Z</d:datereceived>
<d:read b:dt=boolean>1</d:read>
</a:prop>
</a:propstat>
<a:propstat>
<a:status>HTTP/1.1 404 Resource Not Found</a:status>
<a:prop>
<d:sendernam />
</a:prop>
</a:propstat>
</a:response>
Fuente 2
<<dotNetMana
Fuente 1
35
<< dnm.servidores.exchange
tenido OK (HTTP 200) y otra seccin con un estado HTTP 404 (no encontrado). Bajo sta se indica
que la propiedad que no se ha encontrado es <d:sendernam /> (ya que la propiedad correcta es <d:sendername>). De esta forma, al examinar el documento XML se podr ver con claridad si la consulta realizada es correcta o no.
Todas estas combinaciones se pueden probar en la
aplicacin de ejemplo para que el lector se familiarice con el protocolo.
<<dotNetMana
Otra de las tareas habituales que se realizarn cuando se trabaje en este entorno, ser la de modificar los
valores de las propiedades de los distintos elementos
que estn alojados en el Web Store.
Para modificar un elemento, el mtodo DAV a utilizar es PROPPATCH.
En el ejemplo se proporciona una consulta que
modifica un elemento para marcarlo como no ledo.
La consulta realizada es:
36
Restringir el nmero
de elementos devueltos
Otra cosa til es limitar el nmero de elementos
que se quieren obtener en la consulta. En el primer
ejemplo, se devuelven todos los mensajes que hay en
un determinado buzn, pero el protocolo permite
<?xml version=1.0?>
<d:propertyupdate xmlns:d=DAV: xmlns:h=urn:schemas:httpmail:>
<d:set>
<d:prop>
<h:read>0</h:read>
</d:prop>
</d:set>
</d:propertyupdate>
<< dnm.servidores.exchange
Conclusiones
Como se ha visto en este artculo, Microsoft
Exchange Server pone a disposicin de los programadores un interface basado en HTTP y XML
(WebDAV) que permite manipular el contenido del
Web Store para beneficio de aplicaciones a medida.
Tanto HTTP como XML son tecnologas con un
gran soporte en .NET, con lo que desarrollar aplicaciones para esta plataforma resulta muy sencillo
tcnicamente hablando.
Se ha proporcionado una aplicacin de ejemplo que puede servir como base para la creacin
de aplicaciones de colaboracin sofisticadas. El
ejemplo permite crear manualmente consultas
WebDAV que se pueden probar rpidamente contra cualquier servidor Exchange al que se tenga
acceso.
El rango de posibles aplicaciones que se pueden
desarrollar es muy amplio. Junto al ejemplo se proporcionan algunas consultas bsicas para empezar a
trabajar, pero se deja como tarea para el lector definir consultas ms elaboradas que se podrn incorporar a esta aplicacin para su prueba.
<<dotNetMana
37
<<dotNetMana
38
<< dnm.servidores.sql
ciones, por ejemplo, debido a la ejecucin de una transaccin que afecte a un gran nmero de registros. Ya
que el log de transacciones necesita una gran cantidad de espacio para registrar esta operacin. Para
detectar este tipo de actualizaciones masivas se puede utilizar el Profiler de SQL Server.
Tambin es importante tener en cuenta que no se
debe borrar el registro de transacciones, salvo causas
de fuerza mayor (principalmente falta de espacio en
disco). Lo que se debe hacer es disear una estrategia
de copia de seguridad adecuada.
<<dotNetMana
39
<< dnm.servidores.sql
2) Eliminar el fichero para que se genere de nuevo.
Esta opcin es demasiado drstica, hay que emplearla slo si falla la anterior:
Poner la base de datos en modo Single User.
Ejecutar dos o tres veces la instruccin CHECKPOINT. Esto asegura que todas las pginas de
memoria se han escrito en el fichero de datos.
Asegurarse de que no hay transacciones abiertas a la base de datos, con lo que no puede haber
transacciones a medio ejecutar.
Separar la base de datos del servidor, bien desde el administrador corporativo o bien utilizando el procedimiento almacenado del sistema
sp_detach_db.
Eliminar el fichero (o ficheros) .LDF correspondiente a dicha base de datos.
Volver a adjuntar la base de datos al servidor,
bien desde el administrador corporativo o bien
utilizando el procedimiento almacenado del sistema sp_attach_db. SQL Server, al volver a conectar la base de datos y no encontrar el fichero del
transaction log, crea uno nuevo.
Importante! Si no se ejecuta el proceso completamente y en ese orden estricto, podra tener
problemas de inconsistencia de informacin en el
fichero de datos.
<<dotNetMana
Figura 2
40
<< dnm.servidores.sql
Figura 3
noticias.noticias.noticias.noticia
<< Introduccin
<<dotNetMana
La plataforma .NET representa para los programadores el contexto en el que, en el futuro, debern
ejecutarse todas las aplicaciones escritas para Windows,
por lo que no es de extraar que la oferta de herramientas .NET vaya incrementndose paulatinamente. Una de las ltimas en aparecer, est disponible desde el pasado mes de enero, es Borland Delphi 8 for
Microsoft .NET Framework, analizada en el primer
nmero de sta nuestra revista.
Borland siempre ha sido conocida entre los programadores por sus magnficos entornos de desarrollo, desde los tiempos de Turbo Pascal, de los cuales
el ms importantes en la ltima dcada ha sido Delphi.
La octava versin de este producto est dirigida a la
generacin de soluciones .NET, aportando un entorno de trabajo totalmente nuevo, extensiones al lenguaje, nuevos componentes, etc.
Como lenguaje .NET de pleno derecho, el nuevo Delphi .NET puede acceder a todos los servicios
de la biblioteca de clases con que cuenta la plataforma: WinForms, ASP.NET, ADO.NET, etc. No tendra nada de particular, salvo la diferente sintaxis del
lenguaje, la construccin de un proyecto utilizando
los mismos recursos y clases que encontraramos en
Visual Studio .NET. Las diferencias comienzan en los
elementos exclusivos de Delphi .NET, entre los que
se encuentran sus mecanismos de acceso a datos.
42
<< dnm.laboratorio.net
tes ODBC (Open Database Connectivity) y
la conexin directa con Oracle a travs
de OCI (Oracle Call Interface).
La eleccin de un determinado origen de datos conlleva el uso de un conjunto de componentes u otro, cada uno
de ellos alojado en un namespace diferente. Si en principio nuestros datos
residen en un servidor SQL Server recurriramos al mbito System.Data.SqlClient y emplearamos las clases
SqlDataReader, SqlDataAdapter, etc.
Si, con posterioridad, necesitamos hacer
la transicin a un servidor Oracle, deberamos sustituir lo anterior por el mbito System.Data.OracleClient y las clases OracleDataReader, OracleDataAdapter, etc.
Configuracin de la conexin
El entorno de Delphi 8 .NET dispone de una ventana, llamada Data
Explorer, similar al Explorador de servidores de Visual Studio .NET y desde
la que podemos servirnos de las conexiones ya definidas para examinar la
estructura de una base de datos: sus
tablas, columnas, procedimientos almacenados, etc. Una simple operacin de
arrastrar y soltar, desde esta ventana a
un contenedor, provoca la configuracin
automtica de los componentes de conexin y el adaptador de datos asociado.
Lgicamente, podemos definir tan-
El proveedor BDP
de Delphi 8 .NET
Delphi ha destacado siempre por su
flexibilidad a la hora de acceder a distintos RDBMS, utilizando para ello
tas conexiones como precisemos, apareciendo cada una de ellas en la ventana anterior como una hoja dentro de la
rama que corresponda al tipo de
RDBMS. Cada conexin es, en definitiva, una coleccin de parmetros que
se guarda bajo un determinado nombre
en un archivo local.
Al configurar un componente
BdpConnection hay que facilitar una
cadena de conexin, en la propiedad
ConnectionString, que, entre otros
datos, contiene el nombre del ensamblado correspondiente al RDBMS sobre
el que va a trabajarse. En la figura 4, por
ejemplo, puede apreciarse cmo adap-
<<dotNetMana
43
<< dnm.laboratorio.net
tamos el componente BdpConnection1 para acceder a una base de datos InterBase. Modificando este
parmetro, Borland.Data.InterBase, cambiaramos
el tipo de base de datos de origen por otra SQL Server,
Oracle, DB2 o Access, segn el ensamblado que indicsemos.
Preparada la conexin mediante este editor, la configuracin de un componente BdpConnection resulta tan sencilla como desplegar la lista adjunta a la propiedad ConnectionString y seleccionarla por su nombre. El diseador recuperar toda la informacin y
construir la cadena de conexin para nosotros.
La informacin que aparece en el Editor de conexiones se aloja localmente en un archivo llamado
BdpConnections.xml, siendo til exclusivamente
durante la fase de diseo. Lo que se incorpora al cdigo del proyecto, configurada la conexin, es la cadena con todos los parmetros y no el nombre que
hubisemos dado a dicha conexin.
<<dotNetMana
El Editor de conexiones
44
<< dnm.laboratorio.net
Acceso independiente
del proveedor en ADO.NET 2.0
La posibilidad de implementar el acceso a una base
de datos de forma independiente del proveedor puede parecernos algo innecesario en un primer momento, pero sera realmente lo deseable tanto si tenemos
prevista la transicin futura como si no es as, ya que
el cambio puede producirse en cualquier ocasin por
circunstancias ajenas a nuestros planes. Por ello no es
de extraar que Microsoft haya previsto esta posibi-
// Obtenemos la factora
DbProviderFactory factoria=DBProviderFactories.GetFactory(System.Data.Oledb
// Y la usamos para crear un componente de conexin
DbConnection conexion=factoria.CreateConnection();
// y un adaptador
DbAdapter adaptador=factori.CreateAdapter();
<<dotNetMana
tencia de los proveedores de datos ADO.NET integrados en sta, pero obviamente no del BDP. Es necesario, por tanto, distribuir conjuntamente con cualquier aplicacin Delphi .NET que emplee este proveedor una serie de ensamblados.
Por una parte tenemos los ensamblados genricos:
Borland.Data.Common.dll y Borland.Data.
Provider.dll, necesarios indistintamente del RDBMS
al que accedamos. Adems tendramos un ensamblado adicional por cada tipo de base de datos:
Borland.Data. Msacc.dll, Borland.Data.Mssql.dll,
Borland.Data.Oracle.dll, Borland. Data.DB2.dll y
Borland.Data. Interbase.dll, segn conectemos con
Access, SQL Server, Oracle, DB2 o InterBase, respectivamente.
Todos estos ensamblados deben ser aadidos a la
GAC (Global Assembly Cache), estando a partir de ese
momento disponibles para cualquier aplicacin Delphi
8 .NET que pudiramos instalar.
45
pasearon por el mundo occidental de forma triunfante derrotando a cuantos ejrcitos enemigos se
ponan en su camino. Dnde estaba el secreto. Qu
haca invencible a un ejrcito de italianos morenos
y bajitos. Cmo pudieron derrotar a las numerosas
hordas germanas y galas con sus corpulentos y salvajes guerreros. Por qu impusieron la voluntad de
Roma desde una punta a otra del mundo conocido.
Hay dos respuestas para todas estas preguntas: el
legionario y la metodologa organizativa. Mientras los
millones de germanos que se desplazaban desde la
pennsula de Jutlandia constituan un impresionante
y desorganizado ejrcito donde la desesperacin por
<<dotNetMana
46
<< dnm.arquitectura
47
<< dnm.arquitectura
raccionan en un proyecto, o funciones
como los llamaremos a partir de ahora,
pueden verse en la tabla siguiente.
La organizacin en funciones no
implica una visin jerrquica del proyecto. Este modelo organizativo tiene
ms que ver con la adecuacin de perfiles a objetivos a conseguir, dentro de
un esquema de funcionamiento donde
la responsabilidad se comparte plenamente entre todos los miembros del
equipo.
<<dotNetMana
Funciones Caractersticas
48
Equipos reforzados
Cada miembro del equipo del proyecto debe asumir sus propios compromisos. Las palabras clave a este respecto son autorizacin y compromiso. Los
miembros de un equipo MSF deben
tener la confianza de los administradores del proyecto, de forma que con la
autonoma suficiente deben ser capaces
de administrar sus tareas, gestionando
y reportando los retrasos que puedan
producirse. As, pues, en un equipo MSF
se produce una importante red distribuida de funciones, responsabilidades y
confianza mutua, todo ello con la idea
de cumplir los objetivos finales determinados para el proyecto.
<< dnm.arquitectura
Conceptos clave
Existen un conjunto de conceptos clave para la
organizacin de todo equipo de trabajo que quiera
funcionar a travs de la metodologa MSF. El respeto y seguimiento de cada uno de estos conceptos no
es anecdtico, sino que constituyen el autntico ncleo
diferenciador frente a proyectos llevados a cabo a travs de otras dinmicas de equipo.
Equipo de individuos
Todas las funciones son importantes para un proyecto y tienen una igual vala conceptual. Esto incrementa la posibilidad de comunicaciones libres entre
la totalidad de los miembros del equipo as como su
nivel de responsabilidad tanto sobre su funcin como
sobre la totalidad del proyecto. Slo la conviccin de
que cualquiera de los objetivos perseguidos en el proyecto tienen una igual vala conceptual puede hacer
que se consiga el nivel de calidad necesario en el producto final que se desea obtener. No es ms importante la labor del arquitecto de software que la del
responsable del plan de implantacin. Un producto
de arquitectura ejemplar que se implanta de modo
poco sensato tendr tan poco xito como otro de
arquitectura mediocre y sus virtudes pasarn desapercibidas.
No hay que olvidar, en cualquier caso, que este
principio no supone que las decisiones sobre el proyecto deban tomarse siempre de forma consensuada.
Cada funcin posee un claro mbito de responsabilidad y eso debe ser respetado por cada uno de los
miembros del equipo.
Tendencia al producto
El resultado de la labor de todo proceso de desarrollo de software es la obtencin de un producto.
Hay muchos elementos que pueden ayudar a fomentar la identidad del producto a obtener, Microsoft hace
mucho hincapi en el uso de nombres clave para los
productos en desarrollo, rodendolos de elementos
de merchandising, tales como camisetas, tazas da caf,
etc. La relevancia que as se consigue del producto
redunda en la moral del equipo de desarrollo y, por
tanto, en el producto final desarrollado.
La tendencia al producto fue perfectamente descrita por Chris Peters, un jefe de proyecto de
Microsoft para el que la misin de todos y cada uno
de los miembros de un equipo es liberar un producto final, no hacer cdigo o testear o realizar el diseo
de clases o hacer el plan de formacin; todos tienen
una nica misin por encima de todas las dems: liberar un producto final.
<<dotNetMana
49
<< dnm.arquitectura
nivel de motivacin y de moral pueden
construir grandes soluciones. Algunas
tcnicas propugnadas por Microsoft
para conseguir esto son:
Clarificar la visin del equipo.
Trabajar en la construccin de la
identidad del equipo a travs de las
tcnicas de merchandising antes
mencionadas.
Fomentar los eventos sociales entre
los miembros del equipo para fortalecer el nexo entre colegas.
Planificar sesiones de construccin
del equipo en que los diferentes
miembros del mismo pueda experimentar con distintas vas de colaboracin e interaccin fuera incluso de
las del propio trabajo del proyecto.
Asegurarse de que los objetivos
individuales son respetados y
fomentados.
Atender las expectativas de mejora
de los miembros del equipo y escuchar siempre sus puntos de vista.
Celebrar los xitos.
Prcticas probadas
Existen un conjunto de prcticas
probadas que aseguran el xito de los
proyectos MSF. Microsoft las ha experimentado en sus desarrollos y, por tanto, parece que la demostracin del xito a que conducen est fuera de toda
duda.
<<dotNetMana
Trabajar juntos
50
Conclusiones
Dee Hook, fundador y CEO de
Visa Internacional, invent el termino
chaordic, mezcla de caos y orden (chaos
y order) para referirse a la naturaleza de
los proyectos de IT. Esto representa un
importante punto de partida para MSF,
ya que la metodologa de Microsoft
parte de respetar esa naturaleza. En el
<< dnm.biblioteca.net
dnm.biblioteca.net
<<
ASP.NET al descubierto
Stephen Walther
Editorial: Prentice Hall/SAMS
N de pginas: 1326
Tamao: 170x240
ISBN: 84-205-3472-2
Publicacin: 2002
Traduccin al espaol del estupendo ASP.NET Unleashed. Este libro es todo
un tratado de ASP.NET, dedicado a los programadores que necesiten crear aplicaciones Web. Si ya eres desarrollador de ASP, te vendr bien pues tiene continuas notas para lo que el autor llama el "ASP Clsico".
<<dotNetMana
En la ltima parte del libro hay dos aplicaciones de ejemplo. Un sitio de bsqueda de empleo, ASP.NET Jobs, y una tienda on-line, ASP.NET Unleashed
Sample Store.
52
Asume que sabemos HTML y que tenemos experiencia con algn lenguaje de
programacin, y ms vale as porque sino necesitaramos ruedas para moverlo,
que ya tiene 1360 pginas!
dnm.comunidad.net
<<
dnm.comunidad.net
Lexico POO
necesidades de un curso tipo taller destinado a iniciar en la algoritmia a estudiantes del programa
Ingeniera de Sistemas en la Universidad de Antioquia
situada en la ciudad de Medelln, Colombia. All, fruto de una evaluacin del curso, se encontr que los
alumnos tenan una mirada distorsionada del mismo
pues le consideraban abstracto, hipottico e irreal,
concepcin que generaba mucho ruido en el fomen-
mirada negativa y generara incentivos en el aprendizaje. En un proyecto posterior financiado por esa universidad se ampli el diseo inicial y se desarroll un
prototipo de controlador. El siguiente proyecto construy el primer compilador para DOS inscrito en el
paradigma procedimental-imperativo y estructurado. El proyecto sucesor de nuevo financiado por la
universidad evalu principalmente la influencia que
pudiese tener en los estudiantes obtenindose resultados que sorprendieron a los investigadores. Luego
se desarroll una versin para la web del lado del servidor y posteriormente la versin pura orientada a
objetos que corre sobre la plataforma .NET.
En un horizonte de cinco aos los proyectos futuros abordarn la ampliacin de facilidades para iniciar, la produccin de documentacin en papel y la
adicin de caractersticas internas que proporcionen
mayor flexibilidad. La aspiracin es que se convierta en un laboratorio disponible y ampliamente usado para el fomento de la disciplina de la programacin y con tal motivo se ha dispuesto un sitio de
encuentro en la web para el intercambio de experiencias y retos.
Lexico es un lenguaje didctico para programacin en espaol destinado a facilitar el aprendizaje y
la enseanza de la programacin orientada a objetos.
Pretende, y las investigaciones realizadas con l as lo
han comprobado, mejorar el desempeo de los estudiantes y motivarlos para avanzar en la generacin de
habilidades en lgica de programacin pues les permite experimentar con los algoritmos diseados sin
tener que dedicar meses a aprender un lenguaje de
produccin que les permita ver sus creaciones.
El compilador soporta las caractersticas exigidas
internacionalmente para considerarse puro respecto
al paradigma, corre sobre la plataforma distribuible
<<dotNetMana
53
<< dnm.comunidad.net
/*Fibonacci http://fractus.mat.uson.mx/Papers/Varios/Articulo97.html*/
tarea:
{
los objetos i, n, primero, segundo, tercero son cantidades
muestre: Entre el nmero de trminos deseados:
entre: n
copie 0 en i, primero
copie 1 en segundo
mientras i<n haga:
{
copie i + 1 en i
muestre primero
copie primero + segundo en tercero
copie segundo en primero
copie tercero en segundo
}
}
Fuente 1
incluya System.Windows.Forms
clase ventana derivada_de System.Windows.Forms.Form
{
publicos:
mensajes:
ventana copie Este es el ttulo de mi primera ventana en ventana.text
}
Fuente 2
con {....}, decisin con es ? y ciclo de repeticiones con mientras) y la clsica estructura de datos compuesta llamada arreglo, hasta en el paradigma de la programacin orientada a objetos puro, POO.
El centro medular es la orientacin
a objetos para lo cual posee el soporte
apropiado y se ha simplificado al mximo de manera que ayude a la inmersin
en los conceptos.
Los objetos pueden ser construidos
con base en las dos clases fundamentales, cantidad y caracteres, con base en
las clases establecidas por el programador y con base en las 7000 definiciones de la plataforma.net de Microsoft,
lo que permite desarrollar verdaderas
aplicaciones que incluyan controles y el
manejo de eventos.
Las clases pueden ser definidas dentro del archivo del programa central o
en archivos externos y por la va de la
herencia con base en la librera FCL
(Framework Class Library, librera de clases del marco de trabajo) de Microsoft.
Aquellas que no hayan sido definidas
dentro del archivo principal de trabajo
son incorporadas con la instruccin
incluya. Ver fuente 1.
Un ejemplo de descripcin de un
mensaje, algoritmo o comportamiento:
Fabin Ros Castrilln y Fabio Len
Ruiz Ruiz, profesor y estudiante respectivamente en la Universidad de
Antioquia en Medelln, Colombia, responsables del proyecto.
Un ejemplo OOP que utiliza una
clase profesional de .net y permite el uso
de eventos. Ver fuente 2.
n o t i c i a s b reve s
La nueva versin
de RoboHelp X5
ya est disponible
eHelp ha presentado RoboHelp X5 la nueva versin de la herramienta
para la creacin de ayudas y documentacin que ms nos gusta. Algunas
de las nuevas caractersticas son:
Soporte para multi-autor
Soporte para trabajo distribuido
Importacin, exportacin PDF y XML
Salida FlashHelp
Ms informacin en www.ehelp.com
La agenda
de Whidbey
Segn Scott Guthrie la beta pblica de
Whidbey estar disponible en junio de
este ao, mientras que se rumorea que
ser en el primer cuatrimestre de 2005
cuando se preve la aparicin de la versin definitiva, en lugar de finales de este
mismo ao.
<< dnm.opensource
DotNetNuke
Fernando Nogueras
<<dotNetMana
55
Suscripcin a dotNetMana
Deseo suscribirme a dotNetMana por un ao (11 ejemplares) y beneficiarme de la oferta del 10% de descuento por un importe
total de 60 para Espaa; o por 75 para el resto de Europa; o por 90 para el resto del mundo (IVA incluido).
La suscripcin se entiende a partir del nmero actual. Si desea suscribirse a partir de otro nmero, indquelo:
Si usa un nmero anterior al actual, los nmeros descatalogados no sern tenidos en cuenta.
IMPORTES VLIDOS HASTA NUEVA OFERTA
DATOS DE FACTURACIN
CIF/NIF . . . . . . . . . . . . . . . . . . . . .Empresa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Nombre y apellidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Direccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Poblacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Cdigo Postal . . . . . . . . . . . . . . . . . . . Provincia . . . . . . . . . . . . . . . . . . . . . . . . .
Telfono . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fax . . . . . . . . . . . . . . . . . . . . . . . . . . . email . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DATOS DE ENVO (slo si son distintos de los datos de facturacin)
CIF/NIF . . . . . . . . . . . . . . . . . . . . .Empresa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Nombre y apellidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Direccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Poblacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Cdigo Postal . . . . . . . . . . . . . . . . . . . Provincia . . . . . . . . . . . . . . . . . . . . . . . . .
Telfono . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fax . . . . . . . . . . . . . . . . . . . . . . . . . . . email . . . . . . . . . . . . . . . . . . . . . . . . . . . .
FORMA DE PAGO
Taln nominativo a nombre NETALIA, S.L.
Giro postal a nombre NETALIA, S.L.
Transferencia bancaria a nombre de NETALIA, S.L. a:
La Caixa
Nmero de cuenta 2100 4315 48 2200014696
(Indique su nombre en la transferencia)
Domiciliacin Bancaria
Indique su nmero de cuenta:
Tarjeta de crdito
VISA q MASTERCARD
Nmero de su tarjeta:
Fecha de caducidad:
/
AMERICAN EXPRESS
(Imprescindible)
N1
de
de 20
*
o
t
i
u
t
a
r
g
1
o
r
e
m
n
* Hasta el 15 de marzo o hasta agotar existencias
C/ Robledal, 135
28529- Rivas Vaciamadrid
Madrid (Espaa)
As se qued Juanita
Book esperando que
le publicaran su libro
(foto: Ramrez, 1893)
Hemos necesitado
que pase ms de un
siglo pero ahora, en el
2004, ya podemos
ofrecerte la solucin
+ rpida, econmica
y eficaz para que tu
libro (sea cual sea la
materia tratada) o tu
tesina vea la luz sin
necesidad de esperar
otros tantos aos.
Desde una tirada de
100 ejemplares la
solucin + profesional y econmica para
ediciones cortas y/o
personalizadas.
nuevosescritores
c/ Collado Bajo, 13 28053 Madrid 914 770 185 Fax: 914 773 152
autores@nuevosescritores.com
www.nuevosescritores.com
<< dnm.desvan
noticias.noticias.noticias.noticias
Marino Posadas
Un empleado de Google, desarrolla una herramienta de redes sociales, como proyecto propio. Orkut
Buyukkokten, doctor en Informtica por la Universidad de Stanford, y empleado de Google que trabaja en el departamento de investigacin de interfaces de usuario, ha desarrollado una nueva herramienta de encuentro social
(www.orkut.com) como parte del trabajo que Google exige a sus ingenieros un da a la semana: elaborar un proyecto propio. Segn parece, sta es solo una de las iniciativas que Google piensa presentar en los prximos meses.
documentos en la red
Bitcoras
(Blogs relacionacionados con .NET)
<<dotNetMana
58