miércoles, 30 de septiembre de 2009

Nuevas caracteristicas en VB y C# en VS 2010

La elección de un lenguaje de programación es una elección personal que cada programador tiene que hacer. Es similar a elegir el sabor de un helado: hay muy buenas elecciones para escoger pero su sabor favorito es una cuestión de preferencias personales.

En Visual Studio 2010 se han realizado varias mejoras a los dos lenguajes más populares, Visual Basic y C#, para dar a los programadores todas las herramientas necesarias para construir gran software independientemente del lenguaje que elijan.

Visual Basic
El equipo de Visual Basic se ha centrado en agregar características de productividad en el lenguaje para que los programadores puedan hacer más con menos líneas de código. La petición más común de nuestros clientes de Visual Basic ha sido la de quitar el carácter de subrayado ("_") que divide una instrucción de código en varias líneas. Visual Basic 10 presenta la continuación de línea implícita, que elimina la necesidad del carácter de subrayado en la mayoría de los casos.

Function Filtrar(
ByVal clientes As List(Of Cliente),
ByVal nroOrdenes As Integer
)

Dim consulta =
From c In clientes
Where c.Ordenes.Count >
nroOrdenes
Select c

Otra característica nueva de productividad es las propiedades implementadas automáticamente. Con las propiedades implementadas automáticamente, se pueden reemplazar las líneas repetitivas del código de implementación de la propiedad, con declaraciones de una sola línea. Hasta ahora, las declaraciones de propiedad a menudo tenían este aspecto:

Private _DescProducto As String = "Helado x 1Lt Sauco"

Property DescProducto() As String
Get
Return _DescProducto
End Get
Set(ByVal value As String)
_DescProducto = value
End Set
End Property

Private _ListaProducto As New List(Of Producto)

Property ListaProducto () As List(Of Producto)
Get
Return _ListaProducto
End Get
Set(ByVal value As String)
_ListaProducto = value
End Set
End Property

Ahora las declaraciones de propiedad se pueden declarar de una manera mucho más sencilla:

Property DescProducto As String = "Helado x 1Lt Sauco"
Property ListaProducto As New List(Of Producto)

Los inicializadores de colección y literales de matriz son también más simples. Ahora se pueden inicializar colecciones cuando se están declarando y el tipo de literales de matriz lo infiere el compilador.

Dim clientes= New List(Of String) From
{
"Jose Diaz",
"Rosario Salas",
"Ricardo Alcazar"
}
Dim ingredientes = {"azucar", "harina"} 'El tipo String() es inferido por el compilador

Visual Basic 10.0 ahora tiene mejor soporte para funciones lambdas. Las funciones lambdas ahora pueden contener expresiones que no devuelvan un valor, como la palabra clave Sub indica a continuación:

Array.ForEach(clientes, Sub(n) Console.WriteLine(n))

A veces, le gustaría poder hacer algo más complejo dentro de una declaración lambda. Visual Basic 10.0 admite lambdas multilínea. El compilador infiere el parámetro y devuelve los tipos donde sea posible al igual que en lambdas regulares.

Dim prodEspecifico = Function(n As String)
If n.StartsWith("s") Then
Return "extra " & n
Else
Return n
End If
End Function

La interoperación con código de lenguaje dinámico como Python y Ruby se ha vuelto más sencilla en Visual Basic 10.0. Por ejemplo, el fragmento de código siguiente llama a un método definido en una biblioteca de Python "math.py":

Dim matLib As Object = python.UseFile("math.py")
Dim montoUno = 44.2
Dim montoDos = 9.5
matLib.PowerOf(montoUno, montoDos )

C#
Las principales mejoras de C# 4.0 son la interoperabilidad con paradigmas de programación dinámica y la mejora de la programación en Office. La búsqueda dinámica, una nueva característica de C# 4.0, le permite utilizar y manipular un objeto desde IronPython, IronRuby, JScript, HTML DOM o una biblioteca estándar de .NET de la misma manera, independientemente de donde proceda. Otras mejoras del lenguaje como nombre y parámetros opcionales y compatibilidad mejorada para los clientes COM proporcionan a los programadores de C# que trabajan con la API de Office, la misma gran experiencia que han disfrutado los desarrolladores de Visual Basic.

Agregar la nueva palabra clave dinámica a su código le permite que su tipo se resuelva dinámicamente en tiempo de ejecución, en lugar de forma estática en tiempo de compilación. Esto le permite que los lenguajes dinámicos expongan sus objetos a C# de manera natural para un programador de C#:

dynamic objDinamico = GetDynamicObjectFromRuby();
objDinamico.Foo(7);
objDinamico.Property = "valor propiedad";
objDinamico[0] = "valor indice;

Los parámetros del método opcional son familiares para los programadores de Visual Basic y C++ y ahora están disponibles para los programadores de C#. Los parámetros opcionales se declaran con un valor predeterminado en la firma de método, tal y como sigue:

private void NuevoProducto(string descripcion, int stock = 0, float precio = 1.0F)

El método anterior puede llamarse de cualquiera de las maneras siguientes:

NuevoProducto("Harina");
NuevoProducto("Aceite", 12);
NuevoProducto("Azucar", 50, 64.5F);

Puede omitir el valor del parámetro stock pero especificar el parámetro precio , se puede utilizar la nueva característica de argumentos con nombre (resaltado de color verde). Todas las condiciones siguientes son también llamadas válidas:

NuevoProducto("Harina", stock: 20);
NuevoProducto(descripcion: "Aceite", stock: 30, precio: 5.5F);
NuevoProducto("Azucar", stock: 40);

Los argumentos con nombre también son una excelente forma de escribir llamadas autoexplicativas a los métodos existentes, incluso si no se utilizan parámetros opcionales.


Para conocer más acerca de las mejoras de los lenguajes de Visual Studio 2010 y poder descargar ejemplos, tenemos el sitio del futuro de VB (en inglés) y el sitio del futuro de C# (en inglés). Para jugar con las nuevas características, descargue (en inglés) e instale Visual Studio Beta 1 y únase a la conversación (en inglés).

Hasta la proxima.

viernes, 18 de septiembre de 2009

Package Configuration with Integration Services - Configuracion de paquetes en Integration Services

CONFIGURACION DE PAQUETES DE INTEGRATION SERVICES :
--------------------------------------------------------------------------------------
1. Crear los archivos de configuracion globales a donde apuntaran los DataSources de los paquetes.
2. Direccionamos la configuracion de los paquetes hacia los archivos globales de configuracion creados.
A traves de : SSIS\Package Configuration\...
3. Una vez direccionados los paquetes, procedemos a publicarlos
A traves de : File\Save PackageName.dtsx As ...
4. Guardamos y listo.

Siguiendo estos pasos configuramos los paquetes de Integration Services hacia archivos de configuracionespecificos.

CONFIGURACION DE PAQUETES PARA TRABAJAR CON 2 INSTANCIAS DE BD EN INTEGRATION SERVICES :
--------------------------------------------------------------------------------------
1. Creamos los nuevos archivos de configuracion que trabajen con la nuevas instancias, que vendrian a ser unas copias de los ya existentes.
Data Source=ServerName\XXX; uid=userxxx; Initial Catalog=BDName;Persist Security Info=True; Password=passxxx;

2. Redireccionar la configuracion de los paquetes hacia las nuevas instancias creadas
traves de : SSIS\Package Configuration\...
3.Una vez redireccionados los paquetes, procedemos a publicarlos
A traves de : File\Save PackageName.dtsx As ...
4. Guardamos y listo.

Siguiendo estos pasos configuramos paquetes de Integration Services hacia archivos de configuracionespecificos.

LINKS:
//Loading and Running a Local Package Programmatically - Cargar y correr un paquete local a traves de programacion
http://msdn.microsoft.com/es-es/library/ms136090(SQL.90).aspx

//Loading and Running a Remote Package Programmatically - Cargar y correr un paquete remoto a traves de programacion
http://msdn.microsoft.com/es-es/library/ms403355(SQL.90).aspx

//Managing Packages Programmatically - Administrando paquetes atraves de programacion
http://msdn.microsoft.com/es-es/library/aa337077(SQL.90).aspx

viernes, 26 de junio de 2009

MCTS .NET Framework 3.5, Windows Forms Applications - Ya era hora

Bueno el pasado Martes 23 de Junio, rendi el examen 70-505 y lo aprobe, - ya era hora :D - pero este es solo un pequeño escalon dado que mi meta es algo mucho mayor.

Y bueno navegando de donde deberia estudiar encontre un buen comentario que espero lo tomen en cuenta y una guia completa para el examen :

Link: URL (Pagina de Amazon, buscando 70-505 e ingresando a la foto del Training Kit que se vende para este examen - el comentario mas apoyado por cierto)
Comentario (traducido): Si usted tiene poca o ninguna experiencia existente con Windows Forms y quiere pasar el examen, éste es un buen lugar para empezar a aprender. Pero si usted ya tiene experiencia con Windows Forms, puede decepcionarse un poco ... Este es en realidad una segunda edición del libro que abarca el examen de Windows Forms 2.0 (70-526). Al parecer el 95% del contenido es idéntico, por lo que yo no recomendaria la compra de esta edición si ya tienes el libro 2.0(se refiere al 70-526) . Los autores sólo han añadido dos nuevos temas:
24 páginas de LINQ y
3 páginas de alojamiento en un control de WPF utilizando ElementHost.
Pero han perdido algunos importantes temas relacionados con el despliegue que aparecen en el examen:
(OJO!! Esto si es importante)
1) Como instalar en un equipo una aplicación de navegador Windows Presentation Foundation (WPF) utilizando ClickOnce
2) Como instalar una aplicación Visual Studio Tools para Office (VSTO) mediante ClickOnce
3) Como Configurar y trabajar con Windows Vista, control de cuentas de usuario (UAC) con los despliegues de ClickOnce
4) Establecer los permisos de seguridad apropiados para desplegar la aplicación. Este objetivo esta incluido pero no se limita solo a : permisos avanzados
5) Configurar el despliegue de aplicaciones de confianza
6) Configuración de las funciones de seguridad en una aplicación. Este objetivo esta incluido pero no se limita a: Configurar el código de acceso de seguridad, configurar la aplicación para trabajar con UAC, configurar permisos de manipulación de Windows, configurar los permisos adecuados de acceso a archivos de aplicación, control de impresión de seguridad para la aplicación
Así que si ustedes tienen el libro anterior o ya estan programando con Windows Forms 2.0 entonces, solo necesitan leer del sitio de MSDN los temas antes mencionados que no estan el el eBook 70-526. En particular, lean el tema titulado "Qué hay de nuevo en Windows Forms de. NET Framework 3.5" en combinación con la Guia Oficial de Preparacion de Microsoft para el examen. Deseo que los autores tuvieron!

Guia de Estudio para el Examen 70-505 (en C#)

Espero les sirva, hasta la proxima.

miércoles, 3 de junio de 2009

Examenes para Visual Studio 2010

Bueno, googleando un poco encontre que muchos de los futuros examenes a ser lanzados con el ya proximo lanzamiento de Visual Studio 2010 ya han sido definidos y después de mucha reflexión por parte de Microsoft , junto con los debates con las comunidades, los grupos de productos de Visual Studio y. NET 4, han decidido finalmente la mayoría de los nuevos planes de certificación para desarrolladores .

Aquí están los exámenes al 99% definidos :

MCTS Web Developer
MCTS Windows para desarrolladores
MCTS Conexión a datos (ADO.NET)
MCTS WCF

MCPD Web Developer
MCPD Windows Developer

Aquí están los exámenes al 50% definidos :

MCTS de flujo de trabajo
MCPD Enterprise

Entonces, ¿cuáles son los cambios ?

1) El examen para Aplicacionwa Windows abarcará tanto de Windows Forms y WPF. Porcentajes que se determinara en los siguientes meses durante el diseño de sesiones. Esto también ayudará a hacer frente a los comentarios sobre el Windows vs WPF requisitos para MCPD Enterprise en. NET 3.5. NO, no me refiero a que están cambiando los 3,5 certs, me refiero al nuevo plan donde no se han separado las preguntas tanto para Aplicaciones Win como para WPF .
2) Web debe tambien cubrir Silverlight. ¿Por qué? Los ciclos de desarrollo son más cortos que los ciclos de nuestros exámenes ,ouch!
3) El flujo de trabajo tiene algunos grandes cambios y es una tecnología increíble, pero tenemos que decidir sobre la base de otros factores.
4) MCPD Enterprise en mi opinión sigue siendo un público no definido. No creo que este examen se posicione correctamente y necesitamos más investigación de mercado en lo que una empresa profesional para desarrolladores es realmente. Reflexiones y comentarios son bienvenidos, por supuesto.
Habrá exámenes de Windows Mobile creada, con un 6.5 aobtener a llevarse a cabo en junio y a la próxima versión . Otros están llegando como son Microsoft Office SharePoint Server exámenes para desarrolladores, Expression Blend y tal vez web. Se esta tratando todavía de definir un certificado de pruebas de software de estilo también. .

domingo, 15 de marzo de 2009

My MCP Transcript

Hace ya más de 15 días que pase el Examen 70-536 : Microsoft .NET Framework 2.0-Application Development Foundation y la forma de como validar que aprobaste un examen de certificación con tus jefes u otras personas que te soliciten una prueba es atravez de tu Transcript.

Ustedes podran ver mi Transcript Oficial Microsoft online usando el sitio web Official Microsoft Transcript y colocar el transcript ID y el access code siguientes :

Transcript ID : 837799
Access Code : transcript

Bueno aca les dejo unos cuantos links que les serviran de mucha ayuda para poder pasar este examen y aprovechen dado que hay Second Shot (puedes dar la 2da vez gratis si fallas la primera) y va hasta el 30 de Junio del 2009, asi que no esperen más y apresurense.

Links :

Temas Detallados
http://www.microsoft.com/learning/en/us/exams/70-536.aspx

Buena suerte y hasta pronto.

viernes, 8 de agosto de 2008

How to brushes in ComboBox - Como dar color a los Items de un ComboBox con .Net

Hola de nuevo quizas algunos se hayan preguntado si se puede asignar color a algunos items de un combobox, la respuesta es Claro que se puede, lo que tenemos que establecer es la propiedad DrawMode del combo en la opcion OwnerDrawVariable

Después utilizaremos el evento DrawItem para colorear el fondo y dibujar el texto.

'Evento
Private Sub ComboBox1_DrawItem(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles ComboBox1.DrawItem
Select Case e.Index
Case 0,1,2,3,4 'Amarillo
e.Graphics.FillRectangle(Brushes.Yellow , e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height)
Case 5,6,7,8 'Verde
e.Graphics.FillRectangle(Brushes.Green, e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height)
End Select
'Coloreamo el texto
e.Graphics.DrawString(ComboBox1.Items(e.Index).ToString(), e.Font, New SolidBrush(e.ForeColor), e.Bounds)
End Sub

Espero les sea de utilidad, hasta la proxima.
'----------------------------------------------------------------------------------------
Hello again perhaps some have questioned whether we can assign color to some items from a combobox, the answer is "Obviously, you can, what we have to establish is the DrawMode property of the combo in the option OwnerDrawVariable

Then use the DrawItem event coloring the background and draw the text.


'Event
Private Sub ComboBox1_DrawItem(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles ComboBox1.DrawItem
Select Case e.Index
Case 0,1,2,3,4 'Yellow
e.Graphics.FillRectangle(Brushes.Yellow , e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height)
Case 5,6,7,8 'Green
e.Graphics.FillRectangle(Brushes.Green, e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height)
End Select
'Coloring the text
e.Graphics.DrawString(ComboBox1.Items(e.Index).ToString(), e.Font, New SolidBrush(e.ForeColor), e.Bounds)
End Sub

I hope will be useful until the next one

viernes, 27 de junio de 2008

TIP: Customize the format Columns's Data in DataGridView - Personalizar el formato de los datos de columnas en el control DataGridView

* Cuando se quiere dar formato de columnas en un Datagridview con la propiedad DatagridView.Columns("NameColumn").DefaultCellStyle.Format,nos tenemos que percatar si la Configuracion Regional y de idioma de la maquinadonde vamos a ejecutar la aplicacion este a nuestro Idioma y País, si no es asi debemos asignarla para que no haya problemas cuando queramos formatear el tipo de datos de columnas.

Ejmplo : Formateando la columna Monto para valores numericos

'Habiendo verificado la Configuracion Regional y de idioma podremos ejecutar sin problemas
'la siguiente linea de codigo

DatagridView.Columns("Monto").DefaultCellStyle.Format = "N2"

'Ejecutando la linea anterior, no debemos tener ningun Problema

Suerte, hasta el proximo Tip.

lunes, 23 de junio de 2008

Como eliminar datos o filas en un DataGridView enlazado a Datos (por un DataTable,DataSet,etc)

Bueno este caso es clasico de seguro les a pasado a muchos y la solucion es facil.
Cuando ustedes llenan el DataGridView a veces lo hacen con la Propiedad DataSource, que seria :
Ejemplo :
Dim dt as DataTable
dt = oClase.TraerDatos()
DataGridView1.DataSource= dt
Pero al hacer esto amarramos o enlazamos el DataGridView al DataTable y cuando querramos borrar o limpiar el DataGridView con :
DataGridView.Rows.Clear() ' No se podra
Pero si utilizamos :
DataGridView.Columns.Clear()
Si limpia el DataGridView pero con todo y Cabeceras, para solucionar esto haremos un pequeño artificio, quedando el codigo de la siguiente forma :
Dim dt as DataTable
Dim dt2 as DataTable
dt = oClase.TraerDatos()
dt2 = dt.Clone ' Es la Propiedad que me servira para clonar la estructura de un DataTable en este caso las Columnas
DataGridView1.DataSource= dt

Ahora si cuando limpiemos el DataGridView con el evento de un Boton, supongamos que se llame btnLimpiar :
Private Sub btnLimpiar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLimpiar.Click
DataGridView1.Columns.Clear()
DataGridView1.DataSource = dt2
'Para simular que hemos limpiado todas las filas de datos del DataGridView y caso resuelto
End Sub


Hasta la proxima.

jueves, 19 de junio de 2008

How to: Describe columns from table in SQL - Como describir ver los nombres , tipo de datos, tamaño de columnas en una tabla en SQL Server 2000/2005

Hello for this we must use a catalogue of stored procedure called sp_columns, very useful when we want to see the description of the columns (columns such as name, data type, size of the column, etc.) from a table in a database.
Use it and enjoy.

For example, the syntax for sp_columns is:
sp_columns table_name [, table_owner] [, table_qualifier] [, column_name]

To use sp_columns and seek information about a column in particular, can be used:
sp_columns publishers, column_name = @ "pub_id"

This provides the same information that the command with all the specified parameters: sp_columns publishers, "BOD", "pubs2", "pub_id"
It can also be used "null" as a marker of place:
sp_columns publishers, null, null, "pub_id"

---------------------------------------------------------
--En Castellano

Hola para esto debemos usar un procedimiento almacenado de catálogo llamado sp_columns, muy util cuando deseamos ver la descripcion de las columnas(como columns name,data type,tamaño de la columna,etc) de una tabla en una database.
Pruebenlo y disfrutenlo.

Por ejemplo, la sintaxis para sp_columns es:
sp_columns table_name [, table_owner ] [, table_qualifier ] [, column_name ]


Para utilizar sp_columns y buscar información sobre una columna en particular, puede utilizarse:
sp_columns publishers, @column_name = "pub_id"
Esto proporciona la misma información que el comando con todos los parámetros especificados:
sp_columns publishers, "dbo", "pubs2", "pub_id"

También puede utilizarse "null" como marcador de lugar:
sp_columns publishers, null, null, "pub_id"


Hasta la proxima.

How to: Describe fields name from Tables in -Como ver el nombre de Campos, tipo de Campos o longitud de Campos de una Tabla en SQL Server 2000 o 2005

Hello, for this we must use a catalogue stored procedure calls sp_columns, very useful when we want to see the details of the fields (such as name fields, data type, length of the fields, etc.) from a table into a base data.

Use it and enjoy.



For example, the syntax for sp_columns is:

sp_columns table_name [, table_owner] [, table_qualifier] [, column_name]



To use sp_columns and seek information about a column in particular, can be used:

sp_columns publishers, column_name = @ "pub_id"

This provides the same information that the command with all the specified parameters:

sp_columns publishers, "BOD", "pubs2", "pub_id"

It can also be used "null" as a marker of place:

sp_columns publishers, null, null, "pub_id"



-------------------------------------------------------------

--En Castellano

Hola, para esto nosotros debemos usar un procedimiento almacenado de catálogo llamdo sp_columns,muy util cuando queremos ver el detalle de los campos ( como son Nombre de los campos,tipo de datos , longitud de los campos,etc )de una tabla en una base de datos.

Usenlo y disfrutenlo.



Por ejemplo, la sintaxis para sp_columns es:

sp_columns table_name [, table_owner ] [, table_qualifier ] [, column_name ]



Para utilizar sp_columns y buscar información sobre una columna en particular, puede utilizarse:

sp_columns publishers, @column_name = "pub_id"


Esto proporciona la misma información que el comando con todos los parámetros especificados:

sp_columns publishers, "dbo", "pubs2", "pub_id"


También puede utilizarse "null" como marcador de lugar:

sp_columns publishers, null, null, "pub_id"



Hasta la proxima.

sábado, 14 de junio de 2008

Stored Procedure with Text type parameters for handling plots - Procedimiento Almacenado con parametros tipo Text para manejo de tramas

Stored Procedure with Text type parameters for handling plots - Procedimiento Almacenado con parametros tipo Text para manejo de tramas

Hi again perhaps someone have been crossed with the case you need to insert large plots of data in a database and may also specify the number of database (unclear whether you are in a distributed application, this post is an example stored procedure , I hope will be useful to the next.
-----------------------------------------------------------------
Hola de nuevo quizas algunos se hayan cruzado con el caso que necesitan insertar grandes tramas de datos en una base de datos y especificar quizas tambien el numero de base de datos(claro si estamos en una aplicacion distribuida, bueno aca les posteo un procedimiento almacenado de ejemplo, espero les sea de utilidad hasta la proxima.



create proc uspInsertPlotsInDatabase
@CodId varchar(12),
@Plot1 text,
@Plot2 text,
@Plot3 text,
@Plot4 text,
@Plot5 text,
@Plot6 text,
@Plot7 text,
@dDate datetime,
@CodUser varchar(4),
@Plot8 text,
@Plot9 text,
@database varchar(50),
@NroDB varchar(4)
as
set nocount on
if len(@database)>0
exec( 'insert into '+@database+''+@NroDB+'..Plots(cCodId,cPlot1,cPlot2,cPlot3,cPlot4,cPlot5,cPlot6,cPlot7,dDate,cCodUser,cPlot8,cPlot9)'
+ ' values (' + @CodId + ',' + @Plot1 + ',' + @Plot2 + ',' + @Plot3 + ' '
+ ' ,' + @Plot4 + ',' + @Plot5 + ',' + @Plot6 + ','
+ ' '+ @Plot7 + ',' + @dDate + ',' + @CodUser + ',' + @Plot8 + ',' + @Plot9 + ')')
else
exec( 'insert into Plots(cCodId,cPlot1,cPlot2,cPlot3,cPlot4,cPlot5,cPlot6,cPlot7,dDate,cCodUser,cPlot8,cPlot9)'
+ ' values (' + @CodId + ',' + @Plot1 + ',' + @Plot2 + ',' + @Plot3 + ' '
+ ' ,' + @Plot4 + ',' + @Plot5 + ',' + @Plot6 + ','
+ ' '+ @Plot7 + ',' + @dDate + ',' + @CodUser + ',' + @Plot8 + ',' + @Plot9 + ')')

-----------------------------------------------------------------

create proc uspInsertaTramasenBaseDatos
@CodId varchar(12),
@Trama1 text,
@Trama2 text,
@Trama3 text,
@Trama4 text,
@Trama5 text,
@Trama6 text,
@Trama7 text,
@dFecha datetime,
@CodUser varchar(4),
@Trama8 text,
@Trama9 text,
@BaseDatos varchar(50),
@NroBD varchar(4)
as
set nocount on
if len(@BaseDatos)>0
exec( 'insert into '+@BaseDatos+''+@NroBD+'..Tramas(CodId,Trama1,Trama2,Trama3,Trama4,Trama5,Trama6,Trama7,dfecha,cCodUsuer,Trama8,Trama9)'
+ ' values (' + @CodId + ',' + @Trama1 + ',' + @Trama2 + ',' + @Trama3 + ' '
+ ' ,' + @Trama4 + ',' + @Trama5 + ',' + @Trama6 + ','
+ ' '+ @Trama7 + ',' + @dFecha + ',' + @CodUser + ',' + @Trama8 + ',' + @Trama9 + ')')
else
exec( 'insert into Tramas(CodId,Trama1,Trama2,Trama3,Trama4,Trama5,Trama6,Trama7,dfecha,cCodUsuer,Trama8,Trama9)'
+ ' values (' + @CodId + ',' + @Trama1 + ',' + @Trama2 + ',' + @Trama3 + ' '
+ ' ,' + @Trama4 + ',' + @Trama5 + ',' + @Trama6 + ','
+ ' '+ @Trama7 + ',' + @dFecha + ',' + @CodUser + ',' + @Trama8 + ',' + @Trama9 + ')')

jueves, 12 de junio de 2008

Custom Stored Procedure Complete II - Procedimiento Almacenado Personalizado Completo II

Hello, my last post about a custom stored procedure was limited when we want to work with INNER JOIN, so this is more comprehensive because it contains a parameter called tablesInner which I used to receive all INNER JOIN we want to add to the query. Any question leave me a comment.
--------------------------------------------------------------------------------------------
Hola, mi último post acerca de un procedimiento almacenado personalizado se limitaba cuando queremos trabajar con INNER JOIN, por lo que este es más completo porque contiene un parámetro llamado tablesInner que he usado para recibir todos los INNER JOIN que queremos añadir a la consulta. Cualquier pregunta me dejan un comentario.


--Custom Stored Procedure II - Contains a parameter called tablesInner
--which I used to receive all INNER JOIN we want to add to the query
create proc uspExecuteMultiSentences
@fields varchar(500),
@database varchar(80),
@table varchar(50),
@filters varchar(500),
@Nrodatabase varchar(4)='',
@tablesInner varchar(500)=''
as
set nocount on
declare @sSQL varchar(1700)
If Len(@tablesInner) = 0
begin
If Len(@database) > 0
If Len(@Nrodatabase)>0
set @sSQL = 'SELECT '+ @fields + ' FROM ' + @database + '' + @Nrodatabase + '..' + @table + ' WHERE ' + @filters + ''
else
set @sSQL = 'SELECT '+ @fields + ' FROM ' + @database + '..' + @table + ' WHERE ' + @filters + ''
Else If Len(@database)= 0
set @sSQL = 'SELECT '+ @fields + ' FROM '+ @table + ' WHERE ' + @filters + ''
end
Else
begin
If Len(@database) > 0
If Len(@Nrodatabase)>0
set @sSQL = 'SELECT '+ @fields + ' FROM '+ @database + ''+ @Nrodatabase + '..'+ @table + ' '+ @tablesInner + ' WHERE '+ @filters + ''
else
set @sSQL = 'SELECT '+ @fields + ' FROM '+ @database + '..'+ @table + ' '+ @tablesInner + ' WHERE '+ @filters + ''
Else If Len(@database)= 0
set @sSQL = 'SELECT '+ @fields + ' FROM '+ @table + ' '+ @tablesInner + ' WHERE '+ @filters + ''
end
exec(@sSQL)

--Executing Custom Stored Procedure
exec uspExecuteMultiSentences 'C.cCodCus,C.cNamPer,C.cDirPer,C.cTelPer,C.cDoc', '', 'DetailCustomer DC ', ' DC.cTypeDetCus = ''FR'' and DC.cCodDetCus = ''0123456789''', '', ' INNER JOIN dbCustomer..Customer C ON DC.cCodCus = C.cCodCus '
---------------------------------------------------------------------------------
---------------------------------------------------------------------------------

--Procedimiento Almacenado Personalizado II - El cual contiene
--un parametro llamado tablasInner que utilizo para recibir todos los INNER JOIN

--para la consulta
create proc uspEjecutaMultiSentencia
@campos varchar(500),
@basedatos varchar(80),
@tabla varchar(50),
@filtros varchar(500),
@Nrobasedatos varchar(4)='',
@tablasInner varchar(500)=''
as
set nocount on
declare @sSQL varchar(1700)
If Len(@tablasInner) = 0
begin
If Len(@basedatos) > 0
IF Len(@codAge)>0
set @sSQL = 'SELECT '+ @campos + ' FROM ' + @basedatos + '' + @Nrobasedatos+ '..' + @tabla + ' WHERE ' + @filtros + ''
else
set @sSQL = 'SELECT '+ @campos + ' FROM ' + @basedatos + '..' + @tabla + ' WHERE ' + @filtros + ''
Else If Len(@basedatos)= 0
set @sSQL = 'SELECT '+ @campos + ' FROM '+ @tabla + ' WHERE ' + @filtros + ''
end
Else
begin

If Len(@basedatos) > 0
IF Len(@codAge)>0
set @sSQL = 'SELECT '+ @campos + ' FROM '+ @basedatos + ''+ @Nrobasedatos+ '..'+ @tabla + ' '+ @tablasInner + ' WHERE '+ @filtros + ''
else
set @sSQL = 'SELECT '+ @campos + ' FROM '+ @basedatos + '..'+ @tabla + ' '+ @tablasInner + ' WHERE '+ @filtros + ''
Else If Len(@basedatos)= 0
set @sSQL = 'SELECT '+ @campos + ' FROM '+ @tabla + ' '+ @tablasInner + ' WHERE '+ @filtros + ''
end
exec(@sSQL)
--Ejecutando Procedimiento Almacenado
exec uspEjecutaMultiSentencia 'C.cCodPer,C.cNomPer,C.cDirPer,C.cTelPer,C.cDoc', '', 'DetalleCliente DC ', ' DC.cTipoDetalle = ''FR'' and DP.cCodDet = ''0123456789''', '', ' INNER JOIN dbCliente..Cliente C ON DC.cCodPer = C.cCodPer '

See you.Happy Coding – Nos vemos. Feliz programacion

martes, 10 de junio de 2008

Custom Stored Procedure which parameters are fields_name, schema_name, database_name,table _name and filters – Procedimiento Almacenado Personalizado

Custom Stored Procedure which parameters are fields_name, schema_name, database_name,table _name and filters – Procedimiento Almacenado Personalizado cuyos parámetros que recibe son los Campos, esquema, base de datos, tabla y filtros

Example – Ejemplo : Let’s go to see the example – Veamos el ejemplo
As Fields = 'cCodCta,cEstadoCta,dAperturaCta',
Como Campos = 'cCodCta,cEstadoCta,dAperturaCta',
---------------------------------------------------------------------
As Schema = 'Pruebas',
Como Esquema = 'Pruebas',
---------------------------------------------------------------------
As Database = 'DBPrueba',
Como Base de Datos = 'DBPrueba',
---------------------------------------------------------------------
As Database_number = '01',
Como Numero de base de datos = '01'
As Table_name = 'Cta', --As Bill
Como Tabla= 'Cta', --Cuenta
---------------------------------------------------------------------
As filters = ' cCodCta ='''+ rtrim(@CodCta) +'''',
Como Filtros = ' cCodCta ='''+ rtrim(@CodCta) +'''',
Or
As filters = ' cCodCta =123456789', --Specific filters
Como Filtros = ' cCodCta =123456789', --Filtros especificos
--Stored Procedure in English
create proc uspGetDataCta
@Fields varchar(200),
@Schema varchar(40),
@Database varchar(40),
@NroDatabase varchar(4)
@Table varchar(40),
@Filters varchar(100)
as
set nocount on
DECLARE @Sentence varchar(1000)
set @ Sentence ='Select '+ @Fields +' from '+ @Schema +'.'+ @Database +''+ @NroDatabase +'..'+ @Table +' where @Filters
exec(@Sentence)
go
--Executing Stored Procedure
exec uspGetDataCta 'cCodCta,cEstadoCta,dAperturaCta','Pruebas', 'DBPrueba','01','Cta',' cCodCta =123456789'
or
exec uspGetDataCta 'cCodCta,cEstadoCta,dAperturaCta','Pruebas', 'DBPrueba','01','Cta',' cCodCta ='''+ rtrim(@CodCta) +''''

---------------------------------------------------------------------
--Procedimiento Almacenado en Castellano
create proc uspListarDatosCuenta
@Campos varchar(200),
@Esquema varchar(40),
@Basedatos varchar(40),
@NroBaseDatos varchar(4)
@Tabla varchar(40),
@Filtros varchar(100)
as
set nocount on
DECLARE @SentenciaSQL varchar(1000)
set @SentenciaSQL ='Select '+ @Campos +' from '+ @Esquema +'.'+ @BaseDatos +''+ @NroBaseDatos +'..'+ @Tabla +' where @Filtros
exec(@SentenciaSQL)
go
--Ejecutando Procedimiento Almacenado
exec uspListarDatosCuenta 'cCodCta,cEstadoCta,dAperturaCta','Pruebas', 'DBPrueba','01','Cta',' cCodCta =123456789'
or
exec uspListarDatosCuenta 'cCodCta,cEstadoCta,dAperturaCta','Pruebas', 'DBPrueba','01','Cta',' cCodCta ='''+ rtrim(@CodCta) +''''

See you.Happy Coding – Nos vemos. Feliz programacion

viernes, 30 de mayo de 2008

vbConstants(Retorno de Carro, Salto de Línea, Nueva Linea , BackSpace, Caracter nulo, etc) para Cadenas de Texto

A continuación les posteo una tabla con las principales vbConstants o Constantes para Visual Basic.Net



Se pueden utilizar estas constantes en cualquier parte donde se desee que aparezcan en código de Visual Basic. Por ejemplo, las puede utilizar para mostrar un mensaje en una caja de texto multilínea, un cuadro de mensaje messagebox, escribir en un archivo de texto, etc.

Las vbConstants se utilizan cuando se quiere insertar texto en cualquier parte de nuestro código en VB.NET, si utilizamos estas constantes cuando insertamos texto, hay que asegurarnos de no encerrar las constantes entre comillas, sino la constante aparecera en la cadena de texto en lugar del carácter representado por ella.
Nos vemos.

jueves, 29 de mayo de 2008

¿Qué instalar para que nuestros clientes vean un informe desde un reportviewer ?

Habiendo creado ya algun informe de Reporting Services no tenemos ningun problema para visualizarlo en nuestra máquina con el visor que trae .NET Framework, pero ¿qué pasa si lo quisieramos instalar y ejecutar en un cliente o una pc donde no está el Framework 2.0?, para esto necesitamos tener instalado primero y fundamentalmente el .NET Framework 2.0, pero además una librería que no viene con el Framework 2.0.
La solución es que debemos instalar un paquete que nos proporciona las dll adicionales para que se pueda ejectuar correctamente. Este paquete lo pueden descargar desde este link y ver los detalles para su correcta instalación. El archivo se llama ReportViewer, está en español y ocupa 1.8 MB
Luego tenemos que descargar y ejecutar un parche de actualizacion que lo pueden descargar aqui

Saludos