miércoles, 30 de diciembre de 2015

C# - Insert/Update/Select/SP con Enterprise Library

/********************************INSERT/UPDATE***************************/
public bool GrabaNominaPagoProveedorEnc(BeNominaPagoProveedorEncabezado obj)
        {
            try
            {
                //BeNominaPagoProveedorEncabezado
                var result = false;
                var upd = 0;
                var ins = 0;
                Database db = DatabaseFactory.CreateDatabase("LeaseOper");

                //intento actualizar, de no haber filas afectadas inserto.
                DbCommand command = db.GetSqlStringCommand("UPDATE dbo.t_nomina_pago_proveedor_enc SET numero_nomina = @numero_nomina ,fecha_nomina = @fecha_nomina ,total_nomina = @total_nomina ,envio_contab = @envio_contab ,cod_usuario = @envio_contab,fecha_ingreso_reg = @fecha_ingreso_reg,estado = @estado WHERE numero_nomina = @numero_nomina");
                db.AddInParameter(command, "@numero_nomina", DbType.Int32, obj.NumeroNomina);
                db.AddInParameter(command, "@fecha_nomina", DbType.DateTime, obj.FechaNomina);
                db.AddInParameter(command, "@total_nomina", DbType.Single, obj.TotalNomina);
                db.AddInParameter(command, "@envio_contab", DbType.Int32, obj.EnvioContab);
                db.AddInParameter(command, "@cod_usuario", DbType.Int32, obj.CodUsuario);
                db.AddInParameter(command, "@fecha_ingreso_reg", DbType.DateTime, obj.FechaIngreso);
                db.AddInParameter(command, "@estado", DbType.Int16, obj.Estado);

                upd = db.ExecuteNonQuery(command);

                if (upd == 0)
                {
                    command =
                        db.GetSqlStringCommand(
                            "INSERT INTO dbo.t_nomina_pago_proveedor_enc ( numero_nomina ,fecha_nomina ,total_nomina ,envio_contab ,cod_usuario ,fecha_ingreso_reg ,estado) VALUES ( @numero_nomina ,@fecha_nomina ,@total_nomina ,@envio_contab ,@cod_usuario ,@fecha_ingreso_reg ,@estado)");
                    db.AddInParameter(command, "@numero_nomina", DbType.Int32, obj.NumeroNomina);
                    db.AddInParameter(command, "@fecha_nomina", DbType.DateTime, obj.FechaNomina);
                    db.AddInParameter(command, "@total_nomina", DbType.Single, obj.TotalNomina);
                    db.AddInParameter(command, "@envio_contab", DbType.Int32, obj.EnvioContab);
                    db.AddInParameter(command, "@cod_usuario", DbType.Int32, obj.CodUsuario);
                    db.AddInParameter(command, "@fecha_ingreso_reg", DbType.DateTime, obj.FechaIngreso);
                    db.AddInParameter(command, "@estado", DbType.Int16, obj.Estado);

                    ins = db.ExecuteNonQuery(command);
                }
                //compruebo si hubo actualización o inserción
                if (upd > 0 || ins > 0)
                    result = true;

                //cierro las conexiones
                command.Connection.Close();
                command.Connection.Dispose();
                //devuelvo el resultado
                return result;
            }
            catch (Exception ex)
            {

                return false;
            }
        }

/********************************SELECT***************************/
   public DataTable SelectReqPagoDetalle(int numeroReq)
        {
            DataSet ds = new DataSet();
            var dt = new DataTable();
            try
            {
                var result = false;
                var upd = 0;
                var ins = 0;
                Database db = DatabaseFactory.CreateDatabase("LeaseOper");

                //intento actualizar, de no haber filas afectadas inserto.
                DbCommand command =
                    db.GetSqlStringCommand(
                        "SELECT corrrelativo ,num_req ,monto ,rut_beneficiario ,digito ,nombre_beneficiario ,modo_pago ,cod_inst_financ ,cta_cte ,cod_sucursal ,cuenta_contable ,observacion ,envio_contab ,envio_banco ,fecha_envio_banco ,usuario_envio_banco ,fecha_ingreso_reg ,estado FROM  leaseoper..t_req_pago_detalle WHERE num_req = @num_req");
                db.AddInParameter(command, "@num_req", DbType.Int32, numeroReq);

                ds = db.ExecuteDataSet(command);

                command.Connection.Close();
                command.Connection.Dispose();
            }
            catch (Exception ex)
            {
                throw ex;
            }
         
            if (ds != null && ds.Tables.Count > 0)
            {
                dt = ds.Tables[0];
            }
            return dt;
        }

/********************************SP*************************************/

 public DataTable ValidayCargaExcelDetalleAnticipo(int idAnticipo, Int16 tipoProceso, DataTable dt)
        {
            Database db = DatabaseFactory.CreateDatabase("LeaseOper");
            var ds = new DataSet();
            var retorno = false;
            var dataTable = new DataTable();
            try
            {
                using (var cnxx = new SqlConnection(db.ConnectionString))
                {
                    SqlCommand cmd = new SqlCommand("pa_lo_valida_y_carga_det_insc_trans", cnxx);
                    cmd.CommandType = CommandType.StoredProcedure;                
               

                    db.AddInParameter(cmd, "@id_anticipo", DbType.Int32, idAnticipo);
                    db.AddInParameter(cmd, "@tipo_proceso", DbType.Int16, tipoProceso);
                    db.AddOutParameter(cmd, "@cod_error", DbType.Int32, int.MaxValue);
                    db.AddOutParameter(cmd, "@desc_error", DbType.String, int.MaxValue);

                    cmd.Connection.Open();
                    SqlDataAdapter theDataAdapter = new SqlDataAdapter(cmd);

                    //var mensaje = db.GetParameterValue(cmd, "@cod_error");
                    //var codigoRespuesta = db.GetParameterValue(cmd, "@desc_error");

                    theDataAdapter.Fill(ds);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            if (ds.Tables[0].Rows.Count > 0)
                return ds.Tables[0];
            return dataTable;
        }

lunes, 21 de diciembre de 2015

C# - Obtener valor desde una celda, en un row seleccionado (GRID)

var numMinuta = gvParent.GetRowValues(gvParent.FocusedRowIndex,
"ID_MINUTA");

miércoles, 9 de diciembre de 2015

C# - Gif cargando al presionar botón

//previo al update panel de la pagina.
<div class="centrar">
        <asp:UpdatePanel ID="udpanel" runat="server">
            <ContentTemplate>
                <dx:ASPxButton ID="btnLoad" runat="server" ClientInstanceName="btnLoad" Text="" ClientVisible="false"
                    AutoPostBack="true" OnClick="btnLoad_Click">
                </dx:ASPxButton>
                <asp:UpdateProgress ID="UpdateProgress1" runat="server">
                    <ProgressTemplate>
                        <table width="100%" border="0" cellpadding="0" cellspacing="0" class="bonder">
                            <tr>
                                <td colspan="3">&nbsp;
                                 
                                </td>
                            </tr>
                            <tr>
                                <td width="30">&nbsp;
                                 
                                </td>
                                <td align="center">
                                    <table width="100%" border="0" cellpadding="0" cellspacing="0" class="td-colum">
                                        <tr>
                                            <td align="center" style="color: white; font-weight: bold">
                                                Cargando
                                            </td>
                                        </tr>
                                        <tr>
                                            <td align="center">
                                                <dx:ASPxImage ID="ASPxImage1" runat="server" ImageUrl="~/Images/carga.gif" Width="160px"
                                                    Height="24">
                                                </dx:ASPxImage>
                                            </td>
                                        </tr>
                                    </table>
                                </td>
                                <td width="30">&nbsp;
                                 
                                </td>
                            </tr>
                            <tr>
                                <td colspan="3">&nbsp;
                                 
                                </td>
                            </tr>
                        </table>
                    </ProgressTemplate>
                </asp:UpdateProgress>
            </ContentTemplate>
        </asp:UpdatePanel>
    </div>
  <asp:UpdatePanel ID="UpdatePanel1" runat="server">
//contenido, eventos y botones de la página
 </asp:UpdatePanel>

miércoles, 2 de diciembre de 2015

C# - DEVEXPRESS Evitar que una grilla se llene por primera vez

//PAGE INIT , la grilla tiene un evento selecting, con este evento se puede cancelar la carga la primera vez.

 protected void Page_Init(object sender, EventArgs e)
        {
            ObjDataDocumentos.Selecting += ObjDataSourceDocumentos_Selecting;      
         
        }


//dentro de este evento cancelo la carga si es la primera vez que entro a la pantalla
  void ObjDataSourceDocumentos_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
        {
            if (IsPostBack)
            {
                e.InputParameters["todos"] = Convert.ToByte(chkTodos.Checked == true ? 1 : 0);            
            }
            else
            {
                e.Cancel = true;
            }
        }

martes, 1 de diciembre de 2015

SQL - Tablas con registros en la Base de Datos

--USE BASE_DE_DATOS
SET NOCOUNT ON DBCC UPDATEUSAGE(0) -- DB size.
--EXEC sp_spaceused-- Table row counts and sizes.
CREATE TABLE #t (     [name] NVARCHAR(128),  
 [rows] CHAR(11),  
 reserved VARCHAR(18),    
 data VARCHAR(18),    
 index_size VARCHAR(18),  
 unused VARCHAR(18))
INSERT #t EXEC sp_msForEachTable 'EXEC sp_spaceused ''?'''
SELECT 'TABLAS CON MAS DE UN REGISTRO',* FROM   #t WHERE rows > 0   -- # of rows.
SELECT COUNT(*) AS tablas_con_datos FROM   #t WHERE rows > 0
DROP TABLE #t

jueves, 26 de noviembre de 2015

C# - Obtener string de conexión desde la BD para mostrarlo en APP

ejemplo web.config
<add name="nombreConexion" connectionString="metadata=res://*/Model.ModelAdm.csdl|res://*/Model.ModelAdm.ssdl|res://*/Model.ModelAdm.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=BD-PRODUCCION\GESTION;initial catalog=BDGESTION;user id=sa;password=123456;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 


método.
public string ObtenerConexionBD()
        {
            var conectado = ConfigurationManager.ConnectionStrings["nombreConexion"].ToString().Split(';');
            var dataSource = conectado[0].Replace("Data source=", string.Empty).ToString();

            return dataSource;
        }

viernes, 30 de octubre de 2015

C# - Fecha Universal para SQL desde el Código

  public string FechaGenerica(string obj)
        {
            var año = Convert.ToDateTime(obj).Year;
            var mes = Convert.ToDateTime(obj).Month;
            var dia = Convert.ToDateTime(obj).Day;

            var fechaGen = año.ToString() + mes.ToString() + dia.ToString();
            return fechaGen;
        }

//ejemplo de llamada
  var fIni = FechaGenerica(dteFechIni.Text);

viernes, 16 de octubre de 2015

C# - Inicializar una Session

 //Session
        private UserSessionBc UserSession
        {
            get { return (UserSessionBc)Session["UserSession"]; }
        }

lunes, 5 de octubre de 2015

C# - Atributos de una Clase echa a mano

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;      

namespace Test.Be.Garra
{
    public class Garae004Be
    {

        public string Usuario { get; set; }
        public int Terminal { get; set; }
        public Single Canal { get; set; }


    }
}

domingo, 27 de septiembre de 2015

SQL - Trigger Update

/*Tanto para INSERT y UPDATE la tabla usada en los TRIGGER es INSERTED. para los delete es DELETED*/
USE [Gestion]
GO
/****** Object:  Trigger [dbo].[upd_requerimientos]    Script Date: 27/09/2015 12:02:19 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- Create Trigger (New Menu).SQL
  ALTER TRIGGER [dbo].[upd_requerimientos] ON [dbo].[REQUERIMIENTO]
 AFTER UPDATE
 AS
 BEGIN


  DECLARE @id_requerimiento INT
         ,@id_archivo INT

  SELECT @id_requerimiento = ID_REQUERIMIENTO
        ,@id_archivo = ID_ARCHIVO
  FROM inserted

  UPDATE Gestion..REL_REQUERIMIENTO_ARCHIVO
  SET ID_ARCHIVO = @id_archivo
  WHERE ID_REQUERIMIENTO = @id_requerimiento

 END




/************************************************************************/
/*TABLAS AFECTADAS PARA TENER UNA IDEA*/
CREATE TABLE [dbo].[REQUERIMIENTO](
[ID_REQUERIMIENTO] [int] IDENTITY(1,1) NOT NULL,
[ID_PROYECTO] [int] NULL,
[NOMBRE_REQUERIMIENTO] [varchar](max) NULL,
[DESCRIPCION_REQUERIMIIENTO] [varchar](max) NULL,
[TIPO_REQUERIMIENTO] [varchar](50) NULL,
[ESTADO] [tinyint] NULL,
[ID_ARCHIVO] [int] NULL,
 CONSTRAINT [PK_REQUERIMIENTO] PRIMARY KEY CLUSTERED
(
[ID_REQUERIMIENTO] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]



CREATE TABLE [dbo].[REL_REQUERIMIENTO_ARCHIVO](
[ID] [int] IDENTITY(1,1) NOT NULL,
[ID_REQUERIMIENTO] [int] NULL,
[ID_ARCHIVO] [int] NULL,
 CONSTRAINT [PK_REL_REQUERIMIENTO_ARCHIVO] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

SQL - Trigger Insert

USE [Gestion]
GO
/****** Object:  Trigger [dbo].[ins_requerimientos]    Script Date: 27/09/2015 11:56:15 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- Create Trigger (New Menu).SQL
 ALTER TRIGGER [dbo].[ins_requerimientos]
  on [dbo].[REQUERIMIENTO]
  for  INSERT  --DECLARO QUE ES CUANDO OCURRA UNA INSERCION EN LA TABLA REQUERIMIENTOS
 as
 
  DECLARE @id_requerimiento INT
         ,@id_archivo INT
 
  SELECT @id_requerimiento = ID_REQUERIMIENTO --OBTENGO VALORES DE ENTRADA DESDE LA TABLA INSERTED
        ,@id_archivo = ID_ARCHIVO
  FROM inserted
 
  --Y LOS USO PARA INSERTAR SOBRE UNA SEGUNDA TABLA
  INSERT INTO Gestion..REL_REQUERIMIENTO_ARCHIVO
          ( ID_REQUERIMIENTO, ID_ARCHIVO )
  VALUES  ( @id_requerimiento, -- ID_REQUERIMIENTO - int
            @id_archivo  -- ID_ARCHIVO - int
            )    



/************************************************************************/
/*TABLAS AFECTADAS PARA TENER UNA IDEA*/
CREATE TABLE [dbo].[REQUERIMIENTO](
[ID_REQUERIMIENTO] [int] IDENTITY(1,1) NOT NULL,
[ID_PROYECTO] [int] NULL,
[NOMBRE_REQUERIMIENTO] [varchar](max) NULL,
[DESCRIPCION_REQUERIMIIENTO] [varchar](max) NULL,
[TIPO_REQUERIMIENTO] [varchar](50) NULL,
[ESTADO] [tinyint] NULL,
[ID_ARCHIVO] [int] NULL,
 CONSTRAINT [PK_REQUERIMIENTO] PRIMARY KEY CLUSTERED
(
[ID_REQUERIMIENTO] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]



CREATE TABLE [dbo].[REL_REQUERIMIENTO_ARCHIVO](
[ID] [int] IDENTITY(1,1) NOT NULL,
[ID_REQUERIMIENTO] [int] NULL,
[ID_ARCHIVO] [int] NULL,
 CONSTRAINT [PK_REL_REQUERIMIENTO_ARCHIVO] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

/************************************************************************/

lunes, 7 de septiembre de 2015

SQL - Saber últimas consultas hechas sobre BD y quién.

SELECT s.host_name ,
s.program_name ,
c.session_id ,
c.most_recent_session_id ,
c.connect_time ,
c.net_transport ,
c.protocol_type ,
c.protocol_version ,
c.endpoint_id ,
c.encrypt_option ,
c.auth_scheme ,
c.node_affinity ,
c.num_reads ,
c.num_writes ,
c.last_read ,
c.last_write ,
c.net_packet_size ,
c.client_net_address ,
c.client_tcp_port ,
c.local_net_address ,
c.local_tcp_port ,
c.connection_id ,
c.parent_connection_id ,
c.most_recent_sql_handle ,
s.session_id ,
s.login_time ,
s.host_name ,
s.program_name ,
s.host_process_id ,
s.client_version ,
s.client_interface_name ,
s.security_id ,
s.login_name ,
s.nt_domain ,
s.nt_user_name ,
s.status ,
s.context_info ,
s.cpu_time ,
s.memory_usage ,
s.total_scheduled_time ,
s.total_elapsed_time ,
s.endpoint_id ,
s.last_request_start_time ,
s.last_request_end_time ,
s.reads ,
s.writes ,
s.logical_reads ,
s.is_user_process ,
s.text_size ,
s.language ,
s.date_format ,
s.date_first ,
s.quoted_identifier ,
s.arithabort ,
s.ansi_null_dflt_on ,
s.ansi_defaults ,
s.ansi_warnings ,
s.ansi_padding ,
s.ansi_nulls ,
s.concat_null_yields_null ,
s.transaction_isolation_level ,
s.lock_timeout ,
s.deadlock_priority ,
s.row_count ,
s.prev_error ,
s.original_security_id ,
s.original_login_name ,
s.last_successful_logon ,
s.last_unsuccessful_logon ,
s.unsuccessful_logons ,
s.group_id ,
st.dbid ,
st.objectid ,
st.number ,
st.encrypted ,
st.text
FROM sys.dm_exec_connections c
INNER JOIN sys.dm_exec_sessions s ON c.session_id = s.session_id
CROSS APPLY sys.dm_exec_sql_text(most_recent_sql_handle) AS st
ORDER BY c.session_id



SELECT deqs.last_execution_time AS [Time] ,
dest.TEXT AS [Query]
FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
ORDER BY deqs.last_execution_time DESC

C# - Operador Condicional Ternario ( ? : )

IF clásico

IF(Valor != null)
   Valor = item.valor;
ELSE
  Valor = 0.0;


En reemplazo de un IF "Operador Condicional Ternario"

Valor = item.valor != null ? (float)item.valor: (float)0.0;












martes, 4 de agosto de 2015

C# - Solo números con control textbox asp y javascript

1.Crear un archivo Javascript (o dentro de las etiquetas correspondientes dentro de la misma página, no recomendado). en la estructura del sitio web.


2.Dentro del archivo crear la function (función para el ingreso de solo números).

 /*Función solo Números*/
function SoloNumeros(evt) {

    evt = (evt) ? evt : window.event;
    var charCode = (evt.which) ? evt.which : evt.keyCode;
    if (charCode > 31 && (charCode < 48 || charCode > 57)) {
        status = "Este campo solo acepta números!";
        return false;
    }
}

3. Indicar referencia en la página al archivo .js creado. (escribiéndolo, o arrastrándolo)





4. Agregar la function como atributo en el control requerido en evento Page_Init() de la página.





    protected void Page_Init(object sender, EventArgs e)
    {
        this.txtRut.Attributes.Add("OnKeyPress", "return SoloNumeros(event)");
    }






lunes, 13 de julio de 2015

C# - Editar control (combo) asp dentro de una grilla Devexpress

Se ubica el método:


  • miGrilla_HtmlEditFormCreated(object sender, ASPxGridViewEditFormEventArgs e)


de la grilla, en este método se pinta el formulario que se va a editar (campos de la grilla.) Aquí adentro puedo realizar validaciones  o manipulación de los controles. Por ejemplo:

  private void miGrilla_HtmlEditFormCreated(object sender, ASPxGridViewEditFormEventArgs e)
  {
 ASPxGridView control = (ASPxGridView) sender;
            int indice = gvValorSeguro.EditingRowVisibleIndex;

            if (!control.IsNewRowEditing)
            {  
                if (Convert.ToInt32(Session["valor"]) == 5) //ejemplo de alguna condición que se necesite
                {
//para el ejemplo se usa un combo asp normal, pero puede ser cualquier tipo de control.
                    DropDownList miCombo = (gvValorSeguro.FindEditFormTemplateControl("miCombo") as DropDownList);
                    if (miCombo != null)
                        miCombo.Enabled = true;
                }
           
            }
 }

martes, 7 de julio de 2015

SQL - Ver ejecuciones de un determinado JOB

use master
go
CREATE PROCEDURE [dbo].[sp_ViewJobListing]
(
    @JobName VARCHAR(255)=NULL
)

--exec master..sp_ViewJobListing 'Nombre de mi Job'
AS
BEGIN
    IF OBJECT_ID('tempdb..#Results')>0
        DROP TABLE #Results
    CREATE TABLE #Results
    (
        job_id UNIQUEIDENTIFIER NOT NULL,
        last_run_date INT              NOT NULL,
        last_run_time INT              NOT NULL,
        next_run_date INT              NOT NULL,
        next_run_time INT              NOT NULL,
        next_run_schedule_id INT              NOT NULL,
        requested_to_run INT              NOT NULL,
        request_source INT              NOT NULL,
        request_source_id SYSNAME   COLLATE DATABASE_DEFAULT NULL,
        running  INT              NOT NULL,
        current_step INT              NOT NULL,
        current_retry_attempt  INT              NOT NULL,
        job_state  INT              NOT NULL
    )
    DECLARE @JobID VARCHAR(100)
    SELECT TOP 1 @JobID = job_ID FROM msdb.dbo.sysjobs
    INSERT INTO #Results
    EXECUTE master.dbo.xp_sqlagent_enum_jobs 1, @JobID
    SELECT
        s.Name,
        CASE WHEN s.enabled = 0 THEN 'No' ELSE 'Yes' END AS Enabled,
        CASE WHEN next_run_date > 0 THEN 'Yes' ELSE 'No' END AS Scheduled,
        sc.name AS Category,
        current_step AS CurrentExecutionStep,
        last_run_date,
        next_run_date,
        CASE WHEN xp.running = 0 THEN 'Not Running' ELSE 'Executing...' END AS Status,
        ISNULL((
            SELECT CASE WHEN run_status = 1 THEN 'Succeeded' WHEN run_status = 3 THEN 'Cancelled' WHEN run_status = 0 THEN 'Failed' WHEN run_status IS NULL THEN 'Unknown' END AS LastRunStatus
            FROM
                msdb..sysjobhistory sho
            WHERE
                sho.job_id = xp.job_id AND
                sho.instance_id =
                (
                    SELECT MAX(instance_id)
                    FROM msdb..sysjobhistory sj (NOLOCK)
                    WHERE sj.job_id = sho.job_id
                )
        ) ,'Unknown') AS LastRunStatus
    FROM     #Results xp
        INNER JOIN msdb..sysjobs s on xp.job_id = s.job_id
        INNER JOIN msdb..syscategories sc on s.category_id = sc.category_id
    WHERE
        s.Name = ISNULL(@JobName, s.Name)
    ORDER BY s.Name
    IF @JobName IS NOT NULL
    BEGIN
        CREATE TABLE #JobHistory
        (
            StepID INT,
            StepName SYSNAME,
            Message NVARCHAR(4000),
            RunStatus INT,
            RunDate INT,
            RunTime INT,
            RunDuration INT,
            operator_emailed NVARCHAR(100),
            operator_netsent NVARCHAR(100),
            operator_paged NVARCHAR(100)
        )
        INSERT INTO #JobHistory
        SELECT
            sjh.step_id,
            sjh.step_name,
            sjh.message,
            sjh.run_status,
            sjh.run_date,
            sjh.run_time,
            sjh.run_duration,
            operator_emailed = so1.name,
            operator_netsent = so2.name,
            operator_paged = so3.name
        FROM
            msdb.dbo.sysjobhistory sjh
            JOIN msdb.dbo.sysjobs sjj ON sjh.job_id = sjj.job_id
            LEFT OUTER JOIN msdb.dbo.sysoperators so1  ON (sjh.operator_id_emailed = so1.id)
            LEFT OUTER JOIN msdb.dbo.sysoperators so2  ON (sjh.operator_id_netsent = so2.id)
            LEFT OUTER JOIN msdb.dbo.sysoperators so3  ON (sjh.operator_id_paged = so3.id),
            msdb.dbo.sysjobs                 sj
        WHERE
        sjj.Name = @JobName and
        (sj.job_id = sjh.job_id)
        SELECT
            StepID, StepName, Message, RunDate AS LastRunTime,
            CASE RunStatus
                WHEN 0 THEN 'Failed'
                WHEN 1 THEN 'Succeeded'
                WHEN 2 THEN 'Retry (step only)'
                WHEN 3 THEN 'Canceled'
                WHEN 4 THEN 'In-progress message'
                WHEN 5 THEN 'Unknown'
            END AS RunStatus
        FROM #JobHistory
        ORDER BY LastRunTime DESC, StepID ASC
    END
END
GO
EXECUTE sp_ms_marksystemobject 'sp_ViewJobListing'

lunes, 6 de julio de 2015

SQL - Delay para la ejecución de una instrucción.

WAITFOR DELAY '02:00' --Dos Horas
WAITFOR DELAY '00:02' --Dos Minutos
WAITFOR DELAY '00:00:02' --Dos Segundos
WAITFOR DELAY '00:00:00.200' --Dos décimas de segundo


Ejemplo:

EXEC msdb.dbo.sp_start_job 'DTS_ParidadRC'
--espera la ejecución del JOB
WAITFOR DELAY '00:00:05'
       -- y luego de 5 segundos consulta
       SELECT * FROM t_paridades
   

     

Power Designer - Agregar Origen de Datos (Ej. SQL SERVER 2012)


Paso 1: Agregar un Origen de Datos.

Paso 2: Elegir Versión.
Paso 3: Rellenar campos.


Paso 4 : Agregar credenciales
Paso 5: Elegir BD predeterminada.

 Paso 6: Creación.
 Paso 7 : Ya estará creado el origen.

 Paso 8: En Power Designer.

Paso 9: Al hacer Ingeniería Inversa se selecciona la BD más alta que aparezca.


Paso 10: Elegir la BD

Paso 11: poner credenciales.

Paso 12: Ya se puede pasar la BD a Power Designer.

viernes, 5 de junio de 2015

C# - Reemplazar caracteres especiales

/*Arreglo con caracteres*/
 private string[] caracteres =
    {
        "Á", "&Aacute;",
        "À", "&Agrave;",
        "Â", "&Acirc;",
        "Ä", "&Auml;",
        "Ã", "&Atilde;",
        "Å", "&Aring;",
        "á", "&aacute;",
        "à", "&agrave;",
        "â", "&acirc;",
        "ä", "&auml;",
        "ã", "&atilde;",
        "å", "&aring;",
        "É", "&Eacute;",
        "È", "&Egrave;",
        "Ê", "&Ecirc;",
        "Ë", "&Euml;",
        "é", "&eacute;",
        "è", "&egrave;",
        "ê", "&ecirc;",
        "ë", "&euml;",
        "Í", "&Iacute;",
        "Ì", "&Igrave;",
        "Î", "&Icirc;",
        "Ï", "&Iuml;",
        "í", "&iacute;",
        "ì", "&igrave;",
        "î", "&icirc;",
        "ï", "&iuml;",
        "Ó", "&Oacute;",
        "Ò", "&Ograve;",
        "Ô", "&Ocirc;",
        "Ö", "&Ouml;",
        "Õ", "&Otilde;",
        "ó", "&oacute;",
        "ò", "&ograve;",
        "ô", "&ocirc;",
        "ö", "&ouml;",
        "õ", "&otilde;",
        "Ú", "&Uacute;",
        "Ù", "&Ugrave;",
        "Û", "&Ucirc;",
        "Ü", "&Uuml;",
        "ú", "&uacute;",
        "ù", "&ugrave;",
        "û", "&ucirc;",
        "ü", "&uuml;",
        "Ý", "&Yacute;",
        "ý", "&yacute;",
        "ÿ", "&yuml;",
        "ñ", "&ntilde;",
        "Ñ", "&Ntilde;",
        "Ç", "&Ccedil;",
        "ç", "&ccedil;",
        "¡", "&iexcl;",
        "¿", "&iquest;",
        "´", "&acute;",
        "·", "&middot;",
        "¸", "&cedil;",
        "«", "&laquo;",
        "»", "&raquo;",
        "¨", "&uml;",
        "Æ", "&AElig;",
        "æ", "&aelig;",
        "ß", "&szlig;",
        "µ", "&micro;",
        "Ð", "&ETH;",
        "ð", "&eth;",
        "Þ", "&THORN;",
        "þ", "&thorn;",
        "¢", "&cent;",
        "£", "&pound;",
        "¤", "&curren;",
        "¥", "&yen;",
        "€", "&euro;",
        "$", "&#36;",
        "¹", "&sup1;",
        "²", "&sup2;",
        "³", "&sup3;",
        "×", "&times;",
        "÷", "&divide;",
        "±", "&plusmn;",
        "¼", "&frac14;",
        "½", "&frac12;",
        "¾", "&frac34;",
        "Ø", "&Oslash;",
        "ø", "&oslash;",
        "¬", "&not;",
        "<", "&lt;",
        ">", "&gt;",
        "&", "&amp;",
        " ", "&nbsp;",
        "\"", "&quot;",
        "º", "&ordm;",
        "ª", "&ordf;",
        "©", "&copy;",
        "®", "&reg;",
        "°", "&deg;",
        "¦", "&brvbar;",
        "§", "&sect;",
        "¶", "&para;",
        "¯", "&macr;"
    };

        /// <summary>
        /// ReemplazarCaracteresEspeciales
        /// </summary>
        /// <param name="origen">string con caracteres a limpiar</param>
        /// <returns>string limpio</returns>
        public string ReemplazarCaracteresEspeciales(string origen)
        {
            string destino = "";
            List<string> listCaracteres = new List<string>();
            for (int i = 0; i < origen.Length; i++)
            {
                listCaracteres.Add(origen[i].ToString());
            }

            for (int i = 0; i < listCaracteres.Count; i++)
            {
                for (int j = 0; j < caracteres.Length; j = j + 2)
                {
                    if (listCaracteres[i] == caracteres[j])
                    {
                        listCaracteres[i] = listCaracteres[i].Replace(listCaracteres[i], caracteres[j + 1]);
                        j = caracteres.Length + 1;
                    }
                }
            }

            for (int i = 0; i < listCaracteres.Count; i++)
            {
                destino = destino + listCaracteres[i];
            }

            return destino;
        }

SQL - Agregar ID en consulta ROW_NUMBER

SELECT  ROW_NUMBER() OVER(ORDER BY campo_1 ASC) AS ID
        ,campo_1
        ,campo_2
        ,campo_3
FROM    mi_tabla

SQL - Cantidad de registros por Tabla en BD

USE [mi_base_de_datos]
/*Cantidad de registros del Modelo*/
select substring(obj.name, 1, 50) as Tabla, ind.rows as Registros
from sysobjects as obj
inner join sysindexes as ind on obj.id = ind.id
where obj.xtype = 'u'
and ind.indid < 2
order by ind.rows desc

SQL - Deshabilitar Triggers o Trigger de una tabla

/*deshabilitar */
ALTER TABLE mi_tabla DISABLE TRIGGER ALL
o
ALTER TABLE mi_tabla DISABLE TRIGGER nombre_trigger


/*habilitar */
ALTER TABLE mi_tabla ENABLE TRIGGER ALL
o
ALTER TABLE mi_tabla ENABLE TRIGGER nombre_trigger

C# - Convertir lista en DataTable

/// <summary>
    ///Convierte Lista en DataTable
    /// </summary>
    /// <param name="items">Lista a convertir de tipo object</param>
    /// <param name="nameService">Nombre a dar al DataTable</param>
    /// <returns></returns>
    public static DataTable ConvertirListaToDataTable(List<object> items, string nameService)
    {
        // Instancia del objeto a devolver
        var returnValue = new DataTable();
        // Información del tipo de datos de los elementos del List
        Type itemsType = items.First().GetType();
        /*Se Recorren las propiedades para crear las columnas del datatable y
        pregunta si el objeto tiene estrcutra.Si tiene entra.*/
        if (itemsType.GetProperties().Any())
        {
            foreach (PropertyInfo prop in itemsType.GetProperties())
            {
                //Se Crea y agrega una columna por cada propiedad de la entidad
                var column = new DataColumn(prop.Name);

                var propType = Nullable.GetUnderlyingType(prop.PropertyType)
                  ?? prop.PropertyType;

                column.DataType = propType;
                returnValue.Columns.Add(column);
            }
            int j;
            /* Se recorre la colección para guardar los datos
             en el DataTable*/
            foreach (var item in items)
            {
                j = 0;
                object[] newRow = new object[returnValue.Columns.Count];
                /* Se vuelve a recorrer las propiedades de cada item para
                 obtener su valor y guardarlo en la fila de la tabla*/
                foreach (PropertyInfo prop in itemsType.GetProperties())
                {
                    newRow[j] = prop.GetValue(item, null);
                    j++;
                }
                returnValue.Rows.Add(newRow);
            }
        }
        //si el objeto no tiene estructura, se arma una.
        else
        {
            var newRow = new object[items.Count];
            for (int i = 0; i < items.Count; i++)
            {
                var colName = nameService + i;
                var column = new DataColumn(colName);
                column.DataType = typeof(string);
                returnValue.Columns.Add(column);
            }
            for (int i = 0; i < items.Count; i++)
            {
                newRow[i] = items[i].ToString();
            }
            returnValue.Rows.Add(newRow);
        }
        // devolución del DataTable
        return returnValue;
    }

miércoles, 3 de junio de 2015

SQL - Editar tipo de dato en clave compuesta

Generar DROP AND CREATE de la tabla a modificar.



De esa forma se obtienen las CONSTRAINT que se deben eliminar  para modificar tipo de dato y luego agregar.
Ejemplo de modificacion de Tipo de dato en tabla con clave compuesta:

ALTER TABLE t_documentos
DROP CONSTRAINT DF_t_documentos_fecha_creacion,DF_t_documentos_estado
GO
ALTER TABLE t_documentos DROP CONSTRAINT PK_t_documentos
GO
ALTER TABLE t_documentos ALTER COLUMN correlativo INT NOT NULL
GO
ALTER TABLE t_documentos
ADD CONSTRAINT [PK_t_documentos] PRIMARY KEY (numero, tipo_doc, correlativo)
GO
ALTER TABLE [dbo].[t_documentos] ADD  CONSTRAINT [DF_t_documentos_fecha_creacion]  DEFAULT (getdate()) FOR [fecha_creacion]
GO
ALTER TABLE [dbo].[t_documentos] ADD  CONSTRAINT [DF_t_documentos_estado]  DEFAULT ((0)) FOR [estado]
GO

miércoles, 27 de mayo de 2015

SQL - Desconectar usuarios de una BD

/*Desconectarlos para realizar una restauración, o sacar un .bak-por ejemplo-*/

USE master
DECLARE curkillproc
CURSOR FOR
SELECT spid,dbs.name AS dbname
FROM master..sysprocesses pro, master..sysdatabases dbs
WHERE pro.dbid = dbs.dbid
AND dbs.name = 'mi_base_datos'     --aquí el nombre de la BD
FOR READ ONLY
DECLARE @varspid AS integer
DECLARE @vardbname AS varchar(256)
DECLARE @numUsers AS integer
SET @numUsers = 0
OPEN curkillproc
FETCH NEXT FROM curkillproc
INTO @varspid, @vardbname
WHILE @@fetch_status = 0
BEGIN
EXEC('kill ' + @varspid)
SET @numUsers = @numUsers + 1
FETCH NEXT FROM curkillproc INTO @varspid, @vardbname
END
CLOSE curkillproc
DEALLOCATE curkillproc
SELECT @numUsers as NumUsersDisconnected

SQL - Reducir el log de una Base de Datos

USE miBaseDeDatos;
GO
-- se cambia el recovery a modo simple
ALTER DATABASE miBaseDeDatos
SET RECOVERY SIMPLE;
GO
-- se reduce el archivo log a 1 MB.
DBCC SHRINKFILE (miBaseDeDatos_Log, 1);  --conservar _Log
GO
-- se devuelve el nivel de recovery a full
ALTER DATABASE miBaseDeDatos
SET RECOVERY FULL;
GO

/*Donde miBaseDeDatos es el nombre de la base de datos.*/

lunes, 25 de mayo de 2015

SQL - Subir nivel de compatibilidad de la BD

EXEC sp_dbcmptlevel 'mi_base_de_datos', 100


90 = SQL Server 2005
100 = SQL Server 2008
110 = SQL Server 2012
120 = SQL Server 2014

Ver nivel de compatibilidad actual:

SELECT compatibility_level
FROM sys.databases WHERE name = 'mi_base_de_datos';

SQL - Obtener columnas con valores repetidos


SELECT col1, col2, count(*)    --columna(s) a consulta(r)
FROM t1                                   --nombre de la tabla a consultar
GROUP BY col1, col2             --agrupación según la(s) columna(s) a consultar
HAVING count(*) > 1              --contador de repeticiones

viernes, 22 de mayo de 2015

C# - Probar Web Services Fuera del Servidor.

Por defecto un Servicio Web no puede ser testeado (con el respectivo paso de parámetros) desde otro sitio que no sea el Servidor en donde está instalado. Para si poder hacerlo, es necesario agregar las siguientes líneas dentro del tag  <system.web> del archivo de configuración (Web.Config).

<system.web>
    <webServices>
      <protocols>
        <add name="HttpGet" />
        <add name="HttpPost" />
        <add name="Documentation" />
      </protocols>
    </webServices>
  </system.web>


Debería quedar de esta forma.




jueves, 21 de mayo de 2015

SQL - Ciclo While Reemplazo de un Cursor


 -------------------------------------------------------
 --Declaracion de variables necesarias para el ciclo
 -------------------------------------------------------
DECLARE @origen TINYINT ,
    @rut_origen INT ,
    @tipo_direccion TINYINT ,
    @direccion CHAR(70) ,
    @comuna SMALLINT ,
    @email CHAR(50) ,
    @telefono CHAR(25) ,
    @telefono2 CHAR(25) ,
    @fax CHAR(25) ,
    @estado TINYINT

 -----------------------------------
 --Declaro  temporal
 -----------------------------------
CREATE TABLE #direccionesTemp
    (
      id INT IDENTITY(1, 1) ,
      cod_origen TINYINT,
      rut_origen INT ,
      cod_tipo_direccion TINYINT ,
      direccion CHAR(255) ,
      comuna SMALLINT ,
      telefono CHAR(12) ,
      estado TINYINT
    )
         
CREATE INDEX I_direcciones_temp  --El Indice es para aportar velocidad
ON #direccionesTemp(id) ;
 -----------------------------------
 --Lleno tabla temporal
 -----------------------------------
INSERT  INTO #direccionesTemp
        SELECT  cod_origen ,
                rut_origen ,
                cod_tipo_direccion ,
                direccion ,
                comuna ,          
                telefono ,          
                estado
        FROM    dbo.direcciones
                   
 ----------------------------------------
 --Variables de Recorrido
 ----------------------------------------
DECLARE @numeroDeRegistros INT
SET @numeroDeRegistros = ( SELECT   COUNT(*)
                           FROM     #direccionesTemp
                         )
DECLARE @recorridoWhile INT
SET @recorridoWhile = 1

 -----------------------------------------
 --recorrido
 -----------------------------------------
WHILE ( @numeroDeRegistros > 0    --mientras,el numero de registros sea mayor a 0
        AND @recorridoWhile <= @numeroDeRegistros  --y mientras la variable de recorrido sea menor o igual a la cantidad de registros
   
      )
    BEGIN        
        --lleno mis variables
        SELECT  @origen = cod_origen ,
                @rut_origen = rut_origen ,
                @tipo_direccion = cod_tipo_direccion ,
                @direccion = direccion ,
                @comuna = comuna ,
                @telefono = telefono ,                        
                @estado = ISNULL(estado,0)
        FROM    #direccionesTemp
        WHERE   id = @recorridoWhile    --las lleno con la data de la fila que voy recorriendo.
   
   
        BEGIN TRANSACTION
         BEGIN TRY
         INSERT INTO leasecom..t_clientes_direccion
                ( cod_origen ,
                  rut ,
                  tipo_direccion ,
                  correlativo ,
                  direccion ,
                  cod_comuna ,
                  email ,
                  telefono ,            
                  estado
                )
        VALUES  ( @origen ,
                  @rut_origen ,
                  @tipo_direccion ,
                  @correlativo ,
                  SUBSTRING(LTRIM(RTRIM(@direccion)), 1, 40) ,
                  @comuna , -- cod_comuna - smallint
                  NULL , -- email - varchar(255)
                  SUBSTRING(LTRIM(RTRIM(@telefono)), 1, 12)   ,            
                  @estado -- estado - tinyint
                )
   
        COMMIT TRANSACTION
         END TRY
        BEGIN CATCH
         SELECT ERROR_NUMBER() as ErrorNumber, ERROR_MESSAGE() as ErrorMessage;
         ROLLBACK TRANSACTION    
        END CATCH    
         
        SET @recorridoWhile = @recorridoWhile + 1
        --Print para indicar en que parte del recorrido va (Opcional).
        PRINT CONVERT(VARCHAR(100), @recorridoWhile )
    END

 DROP TABLE #direccionesTemp



miércoles, 20 de mayo de 2015

SQL - Sintaxis de un Cursor


/*Declaracion de variables */
DECLARE @var1   NUMERIC(18,0),
        @var2   SMALLINT,
 
/*Filas a recorrer*/
 DECLARE c_ejemplo CURSOR FOR
 select campo1,
        campo2    
 from dbo.t_mi_tabla
/*Apertura del Cursor*/
 OPEN c_ejemplo
 FETCH c_ejemplo
 INTO @var1,  
      @var2
     
 WHILE (@@FETCH_STATUS = 0)
 BEGIN
/*Instrucciones para cada fila recorrida*/
  INSERT INTO dbo..t_mi_tabla2
          ( campo1 ,
            campo2
          )
  VALUES  ( @var1 , -- correlativo - numeric
            @var2        
          )
/*Mensaje en caso de error (opcional)*/  
  IF @@error <> 0
  BEGIN
   Print 'Error al Insertar'
   RETURN
  END

 FETCH c_ejemplo
 INTO @var1,  
      @var2  
           
END
/*Cierre y final del Cursor*/
CLOSE c_ejemplo
DEALLOCATE c_ejemplo

martes, 5 de mayo de 2015

C# - Fecha Automática para las Publicaciones

 //Solo Fecha
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                var fechaPublish = "01/01/1900";
                var dll = Server.MapPath("bin\\DLLNombre.dll");
                if (File.Exists(dll))
                    fechaPublish = File.GetLastWriteTime(dll).ToString("dd-MM-yyyy hh:mm") + " HRS.";
                lblFechaLiberacion.Text = fechaPublish;
            }
        }

        //Fecha + string de conexión
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                var dataSource = System.Configuration.ConfigurationManager.ConnectionStrings["NombreConexion"].ConnectionString.Split(';').ToArray();
                string data = dataSource[0].Replace("Data Source=", "");
                var dll = Server.MapPath("bin\\DLLNombre.dll");

                if (File.Exists(dll))
                    data += " - " + File.GetLastWriteTime(dll).ToString();
                lblInfo2.Text = data;
            }
        }