jueves, 21 de enero de 2016

SQL - Tabla Type

*Para enviar un DataTable desde el APP a SQL y tratarlo directamente.

/****************************CREA TABLA TYPE******************************/

USE miBD

CREATE TYPE [dbo].CargaMITABLAValidaType AS TABLE(
    [periodo] [int]  NULL,
[tipo_registro] [int]  NULL,
[fecha_proceso] [smalldatetime] NOT NULL
)

/**************************FIN CREA TABLA TYPE******************************/


/*************************SP QUE USA TABLA TYPE*************************/


/****** Object:  StoredProcedure [dbo].[pa_lo_valida_edicion_c13]    Script Date: 01/20/2016 18:39:43 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

/* =============================================
-- Author: JC
-- Create date: 20-01-2016
-- Description: Valida que los campos ingresados en informe

declare @cod_error INT
declare @desc_error varchar(500)
declare @miTabla CargaMITABLAValidaType
insert into @miTabla VALUES (201601,2,'20150102')
--select * FROM @miTabla
exec pa_lo_valida_edicion @miTabla , @cod_error OUTPUT, @desc_error OUTPUT
--select @cod_error, @desc_error


-- =============================================
*/
CREATE PROCEDURE [dbo].[pa_lo_valida_edicion]
@miTabla AS CargaMITABLAValidaType  READONLY ,
@cod_error INT OUTPUT ,
@desc_error VARCHAR(500) OUTPUT
AS
BEGIN
--variables de recorido
DECLARE @periodo [int] ,
@tipo_registro [int] ,
@fecha_proceso [smalldatetime]


--tabla de validaciones
CREATE TABLE #validaciones
(
 [periodo] [int] NOT NULL ,
 [tipo_registro] [int] NOT NULL ,
 [fecha_proceso] [smalldatetime] NOT NULL ,

)
--cursor de recorrido - VALIDACIONES
DECLARE c_valida CURSOR LOCAL
FOR
SELECT periodo ,
tipo_registro ,
fecha_proceso ,
FROM @miTabla

OPEN c_valida
FETCH c_valida INTO @periodo, @tipo_registro,@fecha_proceso
--
WHILE ( @@FETCH_STATUS = 0 )
BEGIN -- Inicio Ciclo

-- Seteo varaiables con valores OK
SELECT @cod_error = 0 ,
@desc_error = 'OK'
--Validaciones
IF ( @periodo <> '2016'
  )
BEGIN
SELECT @cod_error = 1 ,
@desc_error = 'Mensaje de Error Aquí'
END



-- fin ciclo
INSERT INTO #validaciones
VALUES ( @periodo, @tipo_registro, @fecha_proceso,
@cod_error,
 @desc_error )


FETCH c_valida INTO @periodo, @tipo_registro,
@fecha_proceso
END
CLOSE c_valida
DEALLOCATE c_valida


SELECT error,desc_error FROM #validaciones

END

GO





/*************************FIN SP QUE USA TABLA TYPE*************************/


/*************************DAC llamada desde .NET C#*************************/

public DataTable ValidaEdicionC13(DataTable dt)
        {
            Database db = DatabaseFactory.CreateDatabase("LeaseOper"); //enterprise library 5.0
            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_edicion", cnxx);
                    cmd.CommandType = CommandType.StoredProcedure;

                    SqlParameter tvparam = cmd.Parameters.AddWithValue("@miTabla", dt);

                    tvparam.SqlDbType = SqlDbType.Structured;
               
                    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);

                    //los rescato pero no los estoy usando
                    var codError = db.GetParameterValue(cmd, "@cod_error");
                    var desError = 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;
        }

/*************************.CS llamada desde .NET C# con JQUERY*************************/
 [WebMethod]
        public static string GeneraCuponera(object rows, string idDoc)
        {
            try
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("operacion", typeof(decimal));
                dt.Columns.Add("cod_material", typeof(int));

                string json = new JavaScriptSerializer().Serialize(rows);
                dynamic selectedRows = JsonConvert.DeserializeObject(json);

                foreach (dynamic rowGrid in selectedRows)
                {
                    DataRow rowDt = dt.NewRow();
                    rowDt["operacion"] = Convert.ToDecimal(rowGrid.operacion);
                    rowDt["cod_material"] = Convert.ToDecimal(rowGrid.cod_material);

                    dt.Rows.Add(rowDt);

                }
                var retorno = new BcCuponeras().GeneraCuponera(dt);
                return JsonConvert.SerializeObject(retorno);
            }
            catch (Exception ex)
            {
                var err = JsonConvert.SerializeObject(ex.Message);
                return err;
            }

        }


No hay comentarios:

Publicar un comentario