Para enviar correo por SQL Server es a través de la sentencia:
EXEC [msdb].[dbo].[sp_send_dbmail]
@profile_name = 'NombrePerfilCorreo',
@recipients = 'correoDestino@gmail.com',
@copy_recipients = 'otroCorreo@gmail.com',
@body = 'TEST2',
@body_format='html',
@subject = 'NombreDelAsunto'
jueves, 1 de diciembre de 2016
jueves, 13 de octubre de 2016
Cookies en ASP.NET C#
Para crear una Cookies en .NET se necesita colocarle un nombre propio. En C# sería:
private void createUserInformationCookie(string username, TokenSecurityGeneratedResponseTypeProxy tokenSecurity, string cookieName)
{
try
{
UserInformation userInformation = new UserInformation();
userInformation.userName = username;
userInformation.tokenSecurityId = tokenSecurity.tokenSecurity.TokenSecurityId;
userInformation.businessUnitCode = tokenSecurity.tokenSecurity.BusinessUnity;
String json = JsonConvert.SerializeObject(userInformation);
HttpCookie cookie = new HttpCookie(cookieName);
cookie.Expires = DateTime.Now.AddHours(Common.cookieExpirationTime);
cookie.Value = json;
cookie.HttpOnly = true;
HttpContext.Response.Cookies.Add(cookie);
}
catch (Exception ex)
{
}
}
private void createUserInformationCookie(string username, TokenSecurityGeneratedResponseTypeProxy tokenSecurity, string cookieName)
{
try
{
UserInformation userInformation = new UserInformation();
userInformation.userName = username;
userInformation.tokenSecurityId = tokenSecurity.tokenSecurity.TokenSecurityId;
userInformation.businessUnitCode = tokenSecurity.tokenSecurity.BusinessUnity;
String json = JsonConvert.SerializeObject(userInformation);
HttpCookie cookie = new HttpCookie(cookieName);
cookie.Expires = DateTime.Now.AddHours(Common.cookieExpirationTime);
cookie.Value = json;
cookie.HttpOnly = true;
HttpContext.Response.Cookies.Add(cookie);
}
catch (Exception ex)
{
}
}
sábado, 8 de octubre de 2016
No se puede cargar el archivo o ensamblado (Excepción de HRESULT: 0x80070020)
Cuando tengan un error en visual studio de tipo "No se puede cargar el archivo o ensamblado (Excepción de HRESULT: 0x80070020)" es probable que otro puerto está siendo usado por el mismo puerto que usa visual studio .net 80 y 443.
miércoles, 5 de octubre de 2016
SQL Service Broker
Los Service Brocker es un servicio que se activa en la base de datos del servidor del SQL Server para realizar una comunicación de Servidor a Cliente.
https://msdn.microsoft.com/es-es/library/bb522893.aspx
Las sentencias en base de datos para activar este servicio son:
ALTER DATABASE [db name] SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE
ALTER AUTHORIZATION ON DATABASE::[db name] TO [sa];
https://msdn.microsoft.com/es-es/library/bb522893.aspx
Las sentencias en base de datos para activar este servicio son:
ALTER DATABASE [db name] SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE
ALTER AUTHORIZATION ON DATABASE::[db name] TO [sa];
jueves, 7 de abril de 2016
SQL Server estructura de tablas
DECLARE @NAME_TABLE VARCHAR(100) = '[GRL].[COLABORADOR_CIERRE]'
--********************** CONSULTA DE COLUMNAS INDEXADAS *******************************
SELECT
--TableName = t.name,
IndexName = ind.name,
--IndexId = ind.index_id,
--ColumnId = ic.index_column_id,
ColumnName = col.name
--ind.*,
--ic.*,
--col.*
FROM
sys.indexes ind
INNER JOIN
sys.index_columns ic ON ind.object_id = ic.object_id and ind.index_id = ic.index_id
INNER JOIN
sys.columns col ON ic.object_id = col.object_id and ic.column_id = col.column_id
INNER JOIN
sys.tables t ON ind.object_id = t.object_id
WHERE
ind.is_primary_key = 0
AND ind.is_unique = 0
AND ind.is_unique_constraint = 0
AND t.is_ms_shipped = 0
AND t.object_id = OBJECT_ID(@NAME_TABLE)
ORDER BY
t.name, ind.name, ind.index_id, ic.index_column_id
--********************** CONSULTA DE COLUMNAS *******************************
SELECT
c.name 'Columna',
t.Name 'Tipo',
c.max_length 'Tamaño',
--c.precision ,
--c.scale ,
CASE WHEN c.is_nullable = 0 THEN 'N' ELSE 'Y' END 'Nulo',
CASE WHEN ISNULL(i.is_primary_key, 0) = 0 THEN 'N' ELSE 'Y' END 'PK' ,
i.object_id, c.column_id,
CASE WHEN (SELECT COUNT(1) FROM sys.foreign_key_columns WHERE parent_object_id = i.object_id
AND parent_column_id = c.column_id ) > 0 THEN 'Y'
ELSE 'N' END 'FK'
,PP.VALUE 'DESCRIPCION'
FROM
sys.columns c
INNER JOIN
sys.types t ON c.user_type_id = t.user_type_id
LEFT OUTER JOIN
sys.index_columns ic ON ic.object_id = c.object_id AND ic.column_id = c.column_id
LEFT OUTER JOIN
sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id
INNER JOIN sys.extended_properties PP ON PP.major_id = C.object_id AND PP.minor_id = C.column_id
WHERE
c.object_id = OBJECT_ID(@NAME_TABLE)
Resultado:
--********************** CONSULTA DE COLUMNAS INDEXADAS *******************************
SELECT
--TableName = t.name,
IndexName = ind.name,
--IndexId = ind.index_id,
--ColumnId = ic.index_column_id,
ColumnName = col.name
--ind.*,
--ic.*,
--col.*
FROM
sys.indexes ind
INNER JOIN
sys.index_columns ic ON ind.object_id = ic.object_id and ind.index_id = ic.index_id
INNER JOIN
sys.columns col ON ic.object_id = col.object_id and ic.column_id = col.column_id
INNER JOIN
sys.tables t ON ind.object_id = t.object_id
WHERE
ind.is_primary_key = 0
AND ind.is_unique = 0
AND ind.is_unique_constraint = 0
AND t.is_ms_shipped = 0
AND t.object_id = OBJECT_ID(@NAME_TABLE)
ORDER BY
t.name, ind.name, ind.index_id, ic.index_column_id
--********************** CONSULTA DE COLUMNAS *******************************
SELECT
c.name 'Columna',
t.Name 'Tipo',
c.max_length 'Tamaño',
--c.precision ,
--c.scale ,
CASE WHEN c.is_nullable = 0 THEN 'N' ELSE 'Y' END 'Nulo',
CASE WHEN ISNULL(i.is_primary_key, 0) = 0 THEN 'N' ELSE 'Y' END 'PK' ,
i.object_id, c.column_id,
CASE WHEN (SELECT COUNT(1) FROM sys.foreign_key_columns WHERE parent_object_id = i.object_id
AND parent_column_id = c.column_id ) > 0 THEN 'Y'
ELSE 'N' END 'FK'
,PP.VALUE 'DESCRIPCION'
FROM
sys.columns c
INNER JOIN
sys.types t ON c.user_type_id = t.user_type_id
LEFT OUTER JOIN
sys.index_columns ic ON ic.object_id = c.object_id AND ic.column_id = c.column_id
LEFT OUTER JOIN
sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id
INNER JOIN sys.extended_properties PP ON PP.major_id = C.object_id AND PP.minor_id = C.column_id
WHERE
c.object_id = OBJECT_ID(@NAME_TABLE)
Resultado:
martes, 23 de febrero de 2016
SQL SERVER convertir números a letras
Varios nos preguntamos cómo convertir números decimales o enteros en texto (Ejm: DIEZ con 00/100 soles) en base de datos SQL Server.
Aquí tengo una función donde podría ayudar a resolver este problema.
--TEST:
--select [dbo]].[CantidadConLetra](50580.25)
CREATE FUNCTION [dbo].[CantidadConLetra]
(
@Numero Decimal(18,2)
)
RETURNS Varchar(180)
AS
BEGIN
DECLARE @ImpLetra Varchar(180)
DECLARE @lnEntero INT,
@lcRetorno VARCHAR(512),
@lnTerna INT,
@lcMiles VARCHAR(512),
@lcCadena VARCHAR(512),
@lnUnidades INT,
@lnDecenas INT,
@lnCentenas INT,
@lnFraccion INT
SELECT @lnEntero = CAST(@Numero AS INT),
@lnFraccion = (@Numero - @lnEntero) * 100,
@lcRetorno = '',
@lnTerna = 1
WHILE @lnEntero > 0
BEGIN /* WHILE */
-- Recorro terna por terna
SELECT @lcCadena = ''
SELECT @lnUnidades = @lnEntero % 10
SELECT @lnEntero = CAST(@lnEntero/10 AS INT)
SELECT @lnDecenas = @lnEntero % 10
SELECT @lnEntero = CAST(@lnEntero/10 AS INT)
SELECT @lnCentenas = @lnEntero % 10
SELECT @lnEntero = CAST(@lnEntero/10 AS INT)
-- Analizo las unidades
SELECT @lcCadena =
CASE /* UNIDADES */
WHEN @lnUnidades = 1 THEN 'UN ' + @lcCadena
WHEN @lnUnidades = 2 THEN 'DOS ' + @lcCadena
WHEN @lnUnidades = 3 THEN 'TRES ' + @lcCadena
WHEN @lnUnidades = 4 THEN 'CUATRO ' + @lcCadena
WHEN @lnUnidades = 5 THEN 'CINCO ' + @lcCadena
WHEN @lnUnidades = 6 THEN 'SEIS ' + @lcCadena
WHEN @lnUnidades = 7 THEN 'SIETE ' + @lcCadena
WHEN @lnUnidades = 8 THEN 'OCHO ' + @lcCadena
WHEN @lnUnidades = 9 THEN 'NUEVE ' + @lcCadena
ELSE @lcCadena
END /* UNIDADES */
-- Analizo las decenas
SELECT @lcCadena =
CASE /* DECENAS */
WHEN @lnDecenas = 1 THEN
CASE @lnUnidades
WHEN 0 THEN 'DIEZ '
WHEN 1 THEN 'ONCE '
WHEN 2 THEN 'DOCE '
WHEN 3 THEN 'TRECE '
WHEN 4 THEN 'CATORCE '
WHEN 5 THEN 'QUINCE '
WHEN 6 THEN 'DIEZ Y SEIS '
WHEN 7 THEN 'DIEZ Y SIETE '
WHEN 8 THEN 'DIEZ Y OCHO '
WHEN 9 THEN 'DIEZ Y NUEVE '
END
WHEN @lnDecenas = 2 THEN
CASE @lnUnidades
WHEN 0 THEN 'VEINTE '
ELSE 'VEINTI' + @THEN
END
WHEN @lnDecenas = 3 THEN
CASE @lnUnidades
WHEN 0 THEN 'TREINTA '
ELSE 'TREINTA Y ' + @lcCadena
END
WHEN @lnDecenas = 4 THEN
CASE @lnUnidades
WHEN 0 THEN 'CUARENTA'
ELSE 'CUARENTA Y ' + @lcCadena
END
WHEN @lnDecenas = 5 THEN
CASE @lnUnidades
WHEN 0 THEN 'CINCUENTA '
ELSE 'CINCUENTA Y ' + @lcCadena
END
WHEN @lnDecenas = 6 THEN
CASE @lnUnidades
WHEN 0 THEN 'SESENTA '
ELSE 'SESENTA Y ' + @lcCadena
END
WHEN @lnDecenas = 7 THEN
CASE @lnUnidades
WHEN 0 THEN 'SETENTA '
ELSE 'SETENTA Y ' + @lcCadena
END
WHEN @lnDecenas = 8 THEN
CASE @lnUnidades
WHEN 0 THEN 'OCHENTA '
ELSE 'OCHENTA Y ' + @lcCadena
END
WHEN @lnDecenas = 9 THEN
CASE @lnUnidades
WHEN 0 THEN 'NOVENTA '
ELSE 'NOVENTA Y ' + @lcCadena
END
ELSE @lcCadena
END /* DECENAS */
-- Analizo las centenas
SELECT @lcCadena =
CASE /* CENTENAS */
WHEN @lnCentenas = 1 THEN 'CIENTO ' + @lcCadena
WHEN @lnCentenas = 2 THEN 'DOSCIENTOS ' + @lcCadena
WHEN @lnCentenas = 3 THEN 'TRESCIENTOS ' + @lcCadena
WHEN @lnCentenas = 4 THEN 'CUATROCIENTOS ' + @lcCadena
WHEN @lnCentenas = 5 THEN 'QUINIENTOS ' + @lcCadena
WHEN @lnCentenas = 6 THEN 'SEISCIENTOS ' + @lcCadena
WHEN @lnCentenas = 7 THEN 'SETECIENTOS ' + @lcCadena
WHEN @lnCentenas = 8 THEN 'OCHOCIENTOS ' + @lcCadena
WHEN @lnCentenas = 9 THEN 'NOVECIENTOS ' + @lcCadena
ELSE @lcCadena
END /* CENTENAS */
-- Analizo la terna
SELECT @lcCadena =
CASE /* TERNA */
WHEN @lnTerna = 1 THEN @lcCadena
WHEN @lnTerna = 2 THEN @lcCadena + 'MIL '
WHEN @lnTerna = 3 THEN @lcCadena + 'MILLONES '
WHEN @lnTerna = 4 THEN @lcCadena + 'MIL '
ELSE ''
END /* TERNA */
-- Armo el retorno terna a terna
SELECT @lcRetorno = @lcCadena + @lcRetorno
SELECT @lnTerna = @lnTerna + 1
END
IF @lnTerna = 1
SELECT @lcRetorno = 'CERO'
DECLARE @sFraccion VARCHAR(15)
SET @sFraccion = '00' + LTRIM(CAST(@lnFraccion AS varchar))
SELECT @ImpLetra = RTRIM(@lcRetorno) +' con '+ SUBSTRING(@sFraccion,LEN(@sFraccion)-1,2) + '/100 soles'
RETURN @ImpLetra
END
Para comprobar el resultado de la función, invocaremos lo siguiente:
select [dbo].[CantidadConLetra](150.60)
quedando como resultado:
Aquí tengo una función donde podría ayudar a resolver este problema.
--TEST:
--select [dbo]].[CantidadConLetra](50580.25)
CREATE FUNCTION [dbo].[CantidadConLetra]
(
@Numero Decimal(18,2)
)
RETURNS Varchar(180)
AS
BEGIN
DECLARE @ImpLetra Varchar(180)
DECLARE @lnEntero INT,
@lcRetorno VARCHAR(512),
@lnTerna INT,
@lcMiles VARCHAR(512),
@lcCadena VARCHAR(512),
@lnUnidades INT,
@lnDecenas INT,
@lnCentenas INT,
@lnFraccion INT
SELECT @lnEntero = CAST(@Numero AS INT),
@lnFraccion = (@Numero - @lnEntero) * 100,
@lcRetorno = '',
@lnTerna = 1
WHILE @lnEntero > 0
BEGIN /* WHILE */
-- Recorro terna por terna
SELECT @lcCadena = ''
SELECT @lnUnidades = @lnEntero % 10
SELECT @lnEntero = CAST(@lnEntero/10 AS INT)
SELECT @lnDecenas = @lnEntero % 10
SELECT @lnEntero = CAST(@lnEntero/10 AS INT)
SELECT @lnCentenas = @lnEntero % 10
SELECT @lnEntero = CAST(@lnEntero/10 AS INT)
-- Analizo las unidades
SELECT @lcCadena =
CASE /* UNIDADES */
WHEN @lnUnidades = 1 THEN 'UN ' + @lcCadena
WHEN @lnUnidades = 2 THEN 'DOS ' + @lcCadena
WHEN @lnUnidades = 3 THEN 'TRES ' + @lcCadena
WHEN @lnUnidades = 4 THEN 'CUATRO ' + @lcCadena
WHEN @lnUnidades = 5 THEN 'CINCO ' + @lcCadena
WHEN @lnUnidades = 6 THEN 'SEIS ' + @lcCadena
WHEN @lnUnidades = 7 THEN 'SIETE ' + @lcCadena
WHEN @lnUnidades = 8 THEN 'OCHO ' + @lcCadena
WHEN @lnUnidades = 9 THEN 'NUEVE ' + @lcCadena
ELSE @lcCadena
END /* UNIDADES */
-- Analizo las decenas
SELECT @lcCadena =
CASE /* DECENAS */
WHEN @lnDecenas = 1 THEN
CASE @lnUnidades
WHEN 0 THEN 'DIEZ '
WHEN 1 THEN 'ONCE '
WHEN 2 THEN 'DOCE '
WHEN 3 THEN 'TRECE '
WHEN 4 THEN 'CATORCE '
WHEN 5 THEN 'QUINCE '
WHEN 6 THEN 'DIEZ Y SEIS '
WHEN 7 THEN 'DIEZ Y SIETE '
WHEN 8 THEN 'DIEZ Y OCHO '
WHEN 9 THEN 'DIEZ Y NUEVE '
END
WHEN @lnDecenas = 2 THEN
CASE @lnUnidades
WHEN 0 THEN 'VEINTE '
ELSE 'VEINTI' + @THEN
END
WHEN @lnDecenas = 3 THEN
CASE @lnUnidades
WHEN 0 THEN 'TREINTA '
ELSE 'TREINTA Y ' + @lcCadena
END
WHEN @lnDecenas = 4 THEN
CASE @lnUnidades
WHEN 0 THEN 'CUARENTA'
ELSE 'CUARENTA Y ' + @lcCadena
END
WHEN @lnDecenas = 5 THEN
CASE @lnUnidades
WHEN 0 THEN 'CINCUENTA '
ELSE 'CINCUENTA Y ' + @lcCadena
END
WHEN @lnDecenas = 6 THEN
CASE @lnUnidades
WHEN 0 THEN 'SESENTA '
ELSE 'SESENTA Y ' + @lcCadena
END
WHEN @lnDecenas = 7 THEN
CASE @lnUnidades
WHEN 0 THEN 'SETENTA '
ELSE 'SETENTA Y ' + @lcCadena
END
WHEN @lnDecenas = 8 THEN
CASE @lnUnidades
WHEN 0 THEN 'OCHENTA '
ELSE 'OCHENTA Y ' + @lcCadena
END
WHEN @lnDecenas = 9 THEN
CASE @lnUnidades
WHEN 0 THEN 'NOVENTA '
ELSE 'NOVENTA Y ' + @lcCadena
END
ELSE @lcCadena
END /* DECENAS */
-- Analizo las centenas
SELECT @lcCadena =
CASE /* CENTENAS */
WHEN @lnCentenas = 1 THEN 'CIENTO ' + @lcCadena
WHEN @lnCentenas = 2 THEN 'DOSCIENTOS ' + @lcCadena
WHEN @lnCentenas = 3 THEN 'TRESCIENTOS ' + @lcCadena
WHEN @lnCentenas = 4 THEN 'CUATROCIENTOS ' + @lcCadena
WHEN @lnCentenas = 5 THEN 'QUINIENTOS ' + @lcCadena
WHEN @lnCentenas = 6 THEN 'SEISCIENTOS ' + @lcCadena
WHEN @lnCentenas = 7 THEN 'SETECIENTOS ' + @lcCadena
WHEN @lnCentenas = 8 THEN 'OCHOCIENTOS ' + @lcCadena
WHEN @lnCentenas = 9 THEN 'NOVECIENTOS ' + @lcCadena
ELSE @lcCadena
END /* CENTENAS */
-- Analizo la terna
SELECT @lcCadena =
CASE /* TERNA */
WHEN @lnTerna = 1 THEN @lcCadena
WHEN @lnTerna = 2 THEN @lcCadena + 'MIL '
WHEN @lnTerna = 3 THEN @lcCadena + 'MILLONES '
WHEN @lnTerna = 4 THEN @lcCadena + 'MIL '
ELSE ''
END /* TERNA */
-- Armo el retorno terna a terna
SELECT @lcRetorno = @lcCadena + @lcRetorno
SELECT @lnTerna = @lnTerna + 1
END
IF @lnTerna = 1
SELECT @lcRetorno = 'CERO'
DECLARE @sFraccion VARCHAR(15)
SET @sFraccion = '00' + LTRIM(CAST(@lnFraccion AS varchar))
SELECT @ImpLetra = RTRIM(@lcRetorno) +' con '+ SUBSTRING(@sFraccion,LEN(@sFraccion)-1,2) + '/100 soles'
RETURN @ImpLetra
END
Para comprobar el resultado de la función, invocaremos lo siguiente:
select [dbo].[CantidadConLetra](150.60)
quedando como resultado:
Suscribirse a:
Entradas (Atom)