La tecnología de lo Obio

Dice Cornejo, que hay que imitar al mejor, igualar al mejor y superar al mejor, esto me trae mucho agrado recordarlo por que fui uno de los que bajaba los mp3s de cornejo, Miguel Angel Cornejo, y los escuchaba una y Cien mil veces para sentirme positivo todo el día, pero eso era cuando era mas joven digamos 22,23,24 años, cuando tu mente aun no se estabiliza del todo, ya cuando estas mas maduro, sabes lo que quieres y punto. Plata. jajaja. Esto me trae el hecho de compartir informacion de lo que sabes, la gente a veces es egoista y no quieren decir por miedo a quedarse atraz que tu le saques ventaja y que sean mejores que tu... esto es la vasenilla de la mediocridad y te voy a explicar porque, mira si yo se como hacer una cosa, o tengo un metodo de hacer algo, quizas piense que al no decirtelo tu no lo sabras, pero eso sera si tu no quieres saberlo si tu mediocridad no te da para seguir investigando solo porque otro te dijo "mira no se", en cambio si tu compartes lo que sabes, que te obliga esta situación?, a MEJORAR!!!, a buscar otra forma de hacerlo porque la que sabias ya otro la sabe y como eres un nato competidor buscaras y buscaras mil formas de hacerlo y mejor, en cambio si no dices nada te estancas, te queda con una forma de hacerlo porque te sientes seguro que la otra persona no sabe hacerlo, pero se estancan tu y el otro porque el mundo sigue caminando, al final los estancados seran tu, que te quedaste con tu Unique Metodo. Recuerdalo comparte informacion, no es lo mismo que compartir la logica de programador esto se gana con tropezones y no se puede transferir por mas que quieras.

Go ahead!!!

Add Comment Filed Under [ code inside ]
Reporting Services Exportar a TXT

Algo muy util y necesario que casi siempre te piden es que tu reporte pueda ser exportado a txt, para ello no se porque no viene predefinido pero hacerlo que aparezca es facil, simplemente tienes que hacer unas modificaciones en tu archivo de configuracion del report server.

<Extension Name="TXT" Type="Microsoft.ReportingServices.Rendering.CsvRenderer.CsvReport,Microsoft.ReportingServices.CsvRendering">
    <OverrideNames>
        <Name Language="en-US">TXT (Pipe Delimited Text File)</Name>
    </OverrideNames>
    <Configuration>
        <DeviceInfo>
            <FieldDelimiter>|</FieldDelimiter>
            <Extension>TXT</Extension>
            <Encoding>ASCII</Encoding>
        <NoHeader>true</NoHeader>
        </DeviceInfo>
    </Configuration>
</Extension>

 

ya con esto lo guardas y listo, pero recuerda que tu archivo a modificar se llama rsreportserver.config,

Usualmente localizado en :

C:\Archivos de programa\Microsoft SQL Server\MSSQL.3\Reporting Services\ReportServer\ Esta ruta es variable.

Yo lo agregue despues de estas lineas.

   <Extension Name="HTML4.0" Type="Microsoft.ReportingServices.Rendering.HtmlRenderer.Html40RenderingExtension,Microsoft.ReportingServices.HtmlRendering" Visible="false" LogAllExecutionRequests="false"/>
   <Extension Name="HTML3.2" Type="Microsoft.ReportingServices.Rendering.HtmlRenderer.Html32RenderingExtension,Microsoft.ReportingServices.HtmlRendering" Visible="false"/>
   <Extension Name="MHTML" Type="Microsoft.ReportingServices.Rendering.HtmlRenderer.MHtmlRenderingExtension,Microsoft.ReportingServices.HtmlRendering"/>
   <Extension Name="EXCEL" Type="Microsoft.ReportingServices.Rendering.ExcelRenderer.ExcelRenderer,Microsoft.ReportingServices.ExcelRendering"/>
 

Typo de dato predefinido al exportar o hacer un select de un archivo csv

Suele suceder que si queremos hacer un "select * from [Archivo.csv]", y por decir el mismo tiene dentro de su data delimitada, un campo fecha, que trajedia tu pusiste en tu archivo de texto la fecha asi dd/MM/yyyy y cuando estas depurando o en VB te aparece asi, MM/dd/yyyy y no hay manera de formatear esa vaina, por mas CDAte, por mas Format (fecha,'dd/mm/yyyy'), el query de salida asume lo que le da la gana porque se basa en detectar el tipo de dato que encuentra, y ya haz cambiado la configuracion regional a todos los paises buscando la alternativa, inclusive agregaste esto pensando que se hiba a poner asi

Dim

culture = New System.Globalization.CultureInfo("es-ES", True)

Dim

s As String

s = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern

y cuando estuviste debugueando, y pasaste por la variable s te salio "dd/MM/yyyy" y dijiste "Ahora si!!!", pero cuando paso por tu select, te lo devolvio, mm/dd/yyyy, estas al borde de la locura estas optando por usar otra forma de lectura de tu csv, trankilo todo se debe a tu motor "Provider=Microsoft.Jet.OLEDB.4.0;

El como es de la familia de access viran las vainas como les da la gana y te ponen las cosas como ellos quieren afortunadamente existe una solucion, simple en el regedit, buscate la cadena siguiente, HKEY_LOCAL_MACHINE\Software\Microsoft\Jet\4.0\Engines\Text , AQUI BUSCA IMPORTMIXEDTYPES, Y PONLA EN TEXT, LUEGO BUSCA AHI MISMO LA QUE DICE MAXSCANROWS Y PONLA EN 0, ADICIONAL POR CUALQUIER VAINA AGREGATE EN TU CONEXION STRING EL IMEX=1;

";Extended Properties=""text;HDR=Yes;FMT=Delimited;IMEX=1;"""

Hay bastante info de esto en internet, yo lo que hice para no afectar a otras aplicaciones es cambiarlo en tiempo de ejecucion desde el Vb.net

Dim

Dim

ver As String ver2 As String

regKey = Registry.LocalMachine.OpenSubKey("Software\Microsoft\Jet\4.0\Engines\Text",

ver = regKey.GetValue("ImportMixedTypes")

True)', "Majority Type")

ver2 = regKey.GetValue("MaxScanRows")

regKey.SetValue("ImportMixedTypes", "Text")

regKey.SetValue("MaxScanRows", "0", RegistryValueKind.DWord)

regKey.Flush()

ya con esto lo pongo y lo vuelvo a poner pero ojo necesitas darle permiso de escritura al usuario en curso desde el regedit sino te va a reventar.

Actualizar contenido html de vs2003 a 2005 o 2008

Para actualizar el contenido html a una version mas reciente de vs, debes presionar en el codigo html CTRL+K+D, y listo no es la gran cosa pero ayuda.

Devolviendo mas de un registro con cursores en pl/sql
 
Probablemente como programador hayas usado sql server y sus procedimientos almacenados, para nosotros era fácil traer un monton de datos con un stored procedure, probablemente si querias traer 1000 registros de la tabla misdatos
hacias asi.
 procedure misdatos()
Begin
select * from misdatos
End
Esto te devuelve todos tus datos desde donde lo ejecutes, pero si lo haces en oracle no te va a devolver nada, estoy seguro te devolvera un gran error.
Tienes que crear un cursor dentro de tu sp, despues amarras tu sp con un package asi.
Primero Creas el SP
CREATE OR REPLACE PROCEDURE proyecto1 (curout out estrenoarturo.CURSOR_RESULTS)
is
BEGIN
OPEN curout
FOR
SELECT numero_medidor from mediciones where numero_cliente = 693592
END;
 
Ya con esto tenemos listo el sp va a devolver todos los registros que tenga.
Ahora lo amarramos con un paquete.
CREATE
OR REPLACE PACKAGE estrenoarturo
AS
END
TYPE CURSOR_RESULTS IS REF CURSOR; estrenoarturo;
YA tenemos el paquete ahora lo llamamos!!!!
--1 ejecutando el package
DECLARE
v_cursor
estrenoarturo.cursor_results;
v_ename
varchar2(100);
BEGIN
proyecto1 (v_cursor);
LOOP FETCH v_cursorINTO v_ename;
EXIT WHEN v_cursor%NOTFOUND;
DBMS_OUTPUT.PUT_LINE
( v_ename );
END LOOP;
END;
CLOSE v_cursor;
Sencillo no? jajajaja con esto te vas a querer quedar con sql server
Dale Performance a tus DataSets Typados

 Mucho se habla de que los datasets de por si son lentos y hacen el proceso muy problematico aunque su programacion es relativamente facil, separas todo y con unas pocas lineas(1) haces un insert update o delete, aqui te voy a enseñar como puedes agregarle performance a la hora se hacer Insert  y Update Masivos, mira una vez creados tus datasets tipados, tienes que agregar una funcion que salio apartir del framework 2.0 UpdateBatchSize, esta funcion tiene valores, 0 como el maximo permitido por lote 1, si se envian de uno a uno, y >1 la cantidad de lotes a enviar, sencillo no, ahora, si lo haces uno a uno tendras que enviar si haces un insert de 10,000 de registros, tendras que enviarlos 10,000 mil veces y las 10,000 veces llamaras al servidor esto pone un performance desastrozo. Si lo haces igual a =0, el mandara el maximo permitido por tu servidor, si tu servidor aguanta un maximo de 5000 registros , el mandara  cada 5000 registros enviara el lote de inserts, esto pone tu servidor a trabajar un poco, pero lo ayudas por otro lado, puedes ponerlo en un default de 1000, que es lo que comunmente se utiliza.

Por ahora todo bien ahora veamos tu codigo.

Antes de hacer tu Update agrega esto.

 

 upco.Adapter.UpdateBatchSize = 1000;

 if (da.Adapter.SelectCommand != null)
            {
                da.Adapter.SelectCommand.CommandTimeout = 0;
            }

            if (upco.Adapter.UpdateCommand != null)
            {

                upco.Adapter.UpdateCommand.UpdatedRowSource = UpdateRowSource.None;
                upco.Adapter.UpdateCommand.CommandTimeout = 0;

            }

            if (insco.Adapter.InsertCommand != null)
            {

                 insco.Adapter.InsertCommand.UpdatedRowSource = UpdateRowSource.None;
                insco.Adapter.InsertCommand.CommandTimeout = 0;

            } upco.Update(ahorasi ejecuta tu update)

Si lo hiciste mal en el tipado te va  a reventar con un null en el UpdateRowSource, 

Te recomiendo que crees tu metodo en dataset tipado con los comandos FILL y GET solamente no agregues nada mas y en las propiedades del tipado donde estan los SelectCommand, InsertCommand, UpdateCommand, DeleteCommand ahi metes tu codigo para determinado caso, de esta forma cuando pases por aqui va a ser diferente de null. 

Lo probé y puse ambos escenarios, el performances va de un 10% a un 20%.En tiempo. 

No puedo activar el firewall de windows El servicio de firewall de windows/conexión compartida a internet (ICS) no ha podido iniciarse

Este error se corrige aplicando desde el msdos o restaurando el codigo de seguridad asi, desde el cmd en el dos:

SC sdset SharedAccess D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)

Le das Enter, Despues vuelve a ejecutar el firewall de windows para ver si se te habilito.

Para mayor referencia:

http://support.microsoft.com/kb/892199/es

Precio por diseños de Páginas web $$$

Cotizaciones:

·                         Plan económico para pequeñas Pymes y Personales

Diseño de paginas web, de modo ilustrativo, es decir estas paginas webs abarcan Titulo, Menús hasta 10 enlaces desde la pagina principal y hasta 10-20 Paginas direccionadas, gráficos, imágenes inclusive sonidos/videos pequeños. Tecnologías aplicadas: HTML, ASP,PHP animaciones en flash(pequeñas). Este paquete no incluye Base de datos. Este paquete incluye webhosting, y su url por un año.  Precio  desde $350.00 .

Caracterísitcas: Es un Sitio Administrable por el WebMaster, despues del tiempo de garantía(1 mes) cada modificación,o ajuste está sujeta a un precio o recargo.

 

Tiempo de Entrega Aprox. Varia según Proyecto (2 meses (Mínimo))

 

·                          Plan Comerciales para Empresas  

 

 Este paquete incluye diseño de paginas web hasta 20 enlaces o botones con hipervínculos, diseños en flash, html o asp,php. Implementación de base de datos(según condiciones de tamaño) ya sea para imágenes, control por usuario y manejo del sitio web,noticas,etc.

Tecnologías aplicadas: Flash, ASP:NET ó PHP Bases de datos Access o Mysql. Este paquete incluye webhosting y url por un año  Precio  (Desde $ 650.00 cubre 1 año).

Caracterísitcas: Es un Sitio Administrable por el Usuartio, el usuario puede modifcar contenido manejable, noticias, fotos.

 

Tiempo de Entrega Aprox. Varia según Proyecto (3-12 meses)

 

 

·                         Intranets o Aplicaciones de Escritorio

Su empresa podrá contar con un sistema o módulos implementados a sus necesidades, Inventarios, Facturación y otros. Esto es un sistema hecho a la medida. Precio Sujeto a módulos a implementar.

Tiempos de Entrega (Varia)

 

Se entiende la cobertura por 1 año en lo siguiente:

1. Url del nombre de la empresa www.miempresa.com

2. Lugar donde se almacenaran tus páginas web, un servidor, el cual contiene mantenimiento ya incluido y administración.

3. La cobertura de mantenimiento deberá ser renovada si así lo dispone el cliente anualmente

4. Incluye la suscripción gratuita de tu sitio web en los principales buscadores google, yahoo, y otros

 

Forma de Pago:

Contado/Cheque

La mitad antes de comenzar y la otra mitad al finalizar la pagina web. Todo proyecto va acompañado de un contrato de servicios profesionales (En donde se detallan los términos y condiciones) respectivamente.

De convenirte algunos de estos planes contáctame a través del correo electrónico para ponernos de acuerdo.

Enviar un email con script task dtsx

Imports System
Imports System.Net
Imports System.Data
Imports System.Net.Mail
Imports System.Net.NetworkCredential
Imports Microsoft.SqlServer.Dts.Runtime

Public Class ScriptMain

 Public Sub Main()
        Dim str_To As String
        Dim str_From As String
        Dim str_Message As String
        Dim str_Subject As String
        Dim str_OrderNum As String
        Dim str_AmountDue As String
        Dim str_OrderDate As String
        Try
                      'Read mail attributes from package variable into local variable
            str_To = Dts.Variables("MailTo").Value.ToString
            str_From = Dts.Variables("MailFrom").Value.ToString
            str_Message = Dts.Variables("MailMessage").Value.ToString
            str_Subject = Dts.Variables("MailSubject").Value.ToString

            'Send Mail
            MailSend(str_To, str_From, str_Subject, str_Message)

        Catch ex As Exception

        End Try
  Dts.TaskResult = Dts.Results.Success
 End Sub
    Public Sub MailSend(ByVal ToMail As String, ByVal From As String, ByVal Subject As String, ByVal Message As String)

        Dim smtpclient As New SmtpClient
        Dim mailmessage As New MailMessage
        Dim fromadd As New MailAddress(From)

        'SMTP server will be picked from cinfig file
        smtpclient.Host = Dts.Variables("SmtpServer").Value.ToString
        smtpclient.Port = 25
        smtpclient.Credentials = CredentialCache.DefaultNetworkCredentials
        mailmessage.From = fromadd
        mailmessage.To.Add(ToMail)
        mailmessage.Subject = CStr(Subject)
        mailmessage.Body = CStr(Message)

        smtpclient.Send(mailmessage)

    End Sub
End Class

if Exists pl/sql

Verificamos la cantidad en la tabla mensaje, si existe, (devuelve 1 si existe)
select count(*) from mensaje m where exists(select 1 from ordenes o )
andm.mensaje=:var1