Una de las operaciones a las que con mayor frecuencia se enfrenta cualquier desarrollador de bases de datos es la detección de datos duplicados, ya sea para encontrar varios registros exactamente iguales en una tabla
select noOT,count(*) from Work.OT
group by noOT having COUNT(noOT) >1
order by 2
Tips de desarrollo SQL SERVER, ASP.NET, C#, MVVM, WCF, WPF, XAMARIN, AZURE etc
viernes, 23 de agosto de 2019
jueves, 1 de agosto de 2019
Xamarin.Android para Visual Studio requiere Android SDK
Descripcion del error
Error de estado de supresión de línea Xamarin.Android para Visual Studio requiere Android SDK.
Instálelo o configure la ruta del SDK de Android en Herramientas-> Opciones-> Xamarin-> Menú de configuración de Android. 0
Seguí el error en el campo en el que puede ingresar la ruta al SDK. Le doy la ruta, pero luego ocurre otro problema. Hay una X al lado de la ruta. Esto ocurre después de la última actualización de Visual Studio 2017
Solución.
Ejecutar Visual Studio Instaler, desintalar el sdk mas reciente, volver a abrir el sdk e instalar de nuevo el sdk... eso soluciono el problema.
Error de estado de supresión de línea Xamarin.Android para Visual Studio requiere Android SDK.
Instálelo o configure la ruta del SDK de Android en Herramientas-> Opciones-> Xamarin-> Menú de configuración de Android. 0
Seguí el error en el campo en el que puede ingresar la ruta al SDK. Le doy la ruta, pero luego ocurre otro problema. Hay una X al lado de la ruta. Esto ocurre después de la última actualización de Visual Studio 2017
Solución.
Ejecutar Visual Studio Instaler, desintalar el sdk mas reciente, volver a abrir el sdk e instalar de nuevo el sdk... eso soluciono el problema.
sábado, 27 de julio de 2019
Membership aumentar el numero de intentos antes de bloquear al usuario
Propiedad MaxInvalidPasswordAttempts
Obtiene el número de intentos de contraseña no válida o de respuesta a la contraseña incorrecta permitidos antes de bloquear al usuario
Obtiene el número de intentos de contraseña no válida o de respuesta a la contraseña incorrecta permitidos antes de bloquear al usuario
El siguiente ejemplo de código muestra la pertenencia elemento en el system.websección del archivo Web.config de la aplicación. Especifica que la aplicación utiliza una instancia de la SqlMembershipProvider clase para proporcionar servicios de pertenencia y establece el maxInvalidPasswordAttempts atribuir a cinco intentos no válidos y el passwordAttemptWindow en 30 minutos.
<membership defaultProvider="SqlProvider"
userIsOnlineTimeWindow = "20>
<providers>
<add
name="SqlProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="SqlServices"
requiresQuestionAndAnswer="true"
maxInvalidPasswordAttempts="5"
passwordAttemptWindow="30"
applicationName="MyApplication" />
</providers>
</membership>
jueves, 25 de julio de 2019
C# Ejecutando un metodo asincrono como sincrono
Hay varias formas de ejecutar métodos asíncronos en un contexto sincrónico:
La mejor manera de ejecutar cualquier método asíncrono y esperar a que se complete es usar la palabra clave await de la siguiente manera:
1
|
var t = await AsyncMethod<T>();
|
Lo que se espera aquí es devolver el resultado de la operación de forma inmediata y sincrónica si la operación ya se ha completado o, si no lo ha hecho, programar una continuación para ejecutar el resto de la palabra clave async antes de devolver el control a la persona que llama. Cuando finaliza la operación asíncrona , se ejecutará la finalización programada. Esto es excelente para evitar los interbloqueos y también se puede usar dentro de un bloque try / catch para obtener la excepción generada por el propio método AsyncMethod .
El único inconveniente de usar la palabra clave async es que requiere que el método que contiene se marque como async también. Si no puede hacerlo, solo puede optar por una solución alternativa menos segura para lograr el mismo objetivo como los que se explican a continuación.
La siguiente forma es aun mejor que la anterior:
Si se ve obligado a usar un método que contiene sincronización , puede usar la siguiente clase auxiliar:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
using System;
using System.Threading;
using System.Threading.Tasks;
namespace AC.Components.Util
{
/// <summary>
/// Helper class to run async methods within a sync process.
/// </summary>
public static class AsyncUtil
{
private static readonly TaskFactory _taskFactory = new
TaskFactory(CancellationToken.None,
TaskCreationOptions.None,
TaskContinuationOptions.None,
TaskScheduler.Default);
/// <summary>
/// Executes an async Task method which has a void return value synchronously
/// USAGE: AsyncUtil.RunSync(() => AsyncMethod());
/// </summary>
/// <param name="task">Task method to execute</param>
public static void RunSync(Func<Task> task)
=> _taskFactory
.StartNew(task)
.Unwrap()
.GetAwaiter()
.GetResult();
/// <summary>
/// Executes an async Task<T> method which has a T return type synchronously
/// USAGE: T result = AsyncUtil.RunSync(() => AsyncMethod<T>());
/// </summary>
/// <typeparam name="TResult">Return Type</typeparam>
/// <param name="task">Task<T> method to execute</param>
/// <returns></returns>
public static TResult RunSync<TResult>(Func<Task<TResult>> task)
=> _taskFactory .StartNew(task) .Unwrap() .GetAwaiter() .GetResult();
}
}
|
Entonces puedes usarlo de esa manera:
1
|
var t = AsyncUtil.RunSync<T>(() => AsyncMethod<T>());
|
Esta solución es definitivamente más compleja que la anterior, pero básicamente es la única forma decente de realizar una llamada asíncrona dentro de sincronización . Como podemos ver, la clase auxiliar básicamente crea, configura e inicia una tarea asíncrona sobre la marcha, luego la desenvuelve y espera sincrónicamente su resultado: al igual que el método de espera anterior, este enfoque evitará los interbloqueos y podría usarse dentro de un bloque try / catch para obtener la excepción generada por el propio AsyncMethod .
Enlaces relacionados:
Suscribirse a:
Entradas (Atom)