ID | Asunto | Fecha | Nick | |
57617 | Semilla unica | 30/05/14 12:09 | Manuel_74 | | |
Buenas tardes a todos, espero puedan ayudarme, estoy tratando de sacar de Sql Server 2008 un campo auto numérico, lo que pasa que este acceso a la BD me demora tiempo sobre unos 120 ms, lo que pretendo es sacar este campo lo más rápidamente posible, o sea, que baje bastante esos 120ms es posible???.. Podrían darme alguna idea de cómo hacerlo.. Por otro lado, si veo que esto es imposible, estoy intentando crear mediante esta función, una semilla única : Public Shared Function CrearAleatorio(ByVal PasswordLength As
Integer) As String
Dim _allowedChars As String =
"abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789"
Dim randomNumber As New Random()
Dim chars(PasswordLength - 1) As Char
Dim allowedCharCount As Integer = _allowedChars.Length
For i As Integer = 0 To PasswordLength - 1
chars(i) = _allowedChars.Chars(CInt(Fix((
_allowedChars.Length) * randomNumber.NextDouble())))
Next i
Return New String(chars )
End Function Bien, funciona muy bien, pero resulta que las llamadas que realizo son concurrentes y no sé el porqué algunas veces me repite la misma semilla y claro, no me vale.. Y ya aun más desesperado de cómo hacer esto, trato de montar yo mismo la semilla de esta manera: Año mes dia hora minutos segundos milisegundos y sé repite algunas veces, he pensado en sacar los nano segundos que creo que con estos ya no se repetiría, alguien sabría como sacar los nanosegundos en vb.net??? Mil gracias a todos. [Editado: Manuel_74, 30/05/2014 12:10:28] |
|
ID | Asunto | Fecha | Nick | |
57621 | Re: Semilla unica (Resp: 57617) | 02/06/14 12:45 | Pipe[hgjfkdls] | | |
Manuel,
Puedes configurar el campo de tu DB para que autoincremente, debe ser tipo int, identity y con incremento de (int)1.
ahora bien, para la creacion de semillas, personalmete prefiero ocupar un algoritmo MD5 o SHA1 o cualquier otro, encripto un objeto DateTime.Now.Ticks mas un numero random para hacerlo aun mas eficiente.
Otra opcion para las semillas es generar un campo global y estatico de tipo numerico y sumas 1 cada vez que se inserta o se añade un registro a la DB. Cuando tu programa inicializa es necesario leer la semilla mayor y setear tu variable estatica.
Espero haber entendido tu duda. con el termino "sacar" me jodiste un poco.
Saludos,
Pipe [hgjfkdls]
Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias. |
|
ID | Asunto | Fecha | Nick | |
57622 | Re: Semilla unica (Resp: 57621) | 02/06/14 12:57 | Manuel_74 | | |
Mil perdones por lo de "sacar" no lo hice ni mucho menos, con mala intención, solo, que aqui en España, es algo común utilizarlo Configurar el incrementable ya lo tengo, si el problema esta en que acceder a la BD me ralentiza la respuesta, por eso pense en una semilla que no atacar a la BD y así aumentar mi tiempo de respuesta, el algoritmo que puse me devuelve simillas repetidas ya que al ser asincrono el proceso no sé el porque lo hace. Ahora bien, podrías pasarme ese algoritmo que dices que haces por favor, si no es mucha molestia claro. Como encripta el objeto Datetime.Now.Ticks?? Muchisimas gracias de nuevo por vuestra ayuda. Saludos.
Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias. |
|
ID | Asunto | Fecha | Nick | |
57623 | Re: Semilla unica (Resp: 57622) | 02/06/14 13:19 | Pipe[hgjfkdls] | | |
Manolo, Hace un tiempo me hice este metodo extendido, entra una cadena y sale la encriptacion unidireccional, para vuestro caso, deberia entrar: string unique=(Datetime.Now.Ticks+RND(1000)).ToString().GetMD5(); using System;
using System.Text;
using System.Security.Cryptography;
using System.Linq;
using System.Xml.Linq;
namespace Service
{
public static class ExtendMethods
{
#region MD5
/// <summary>
/// Serializa una cadena segun protocolo MD5
/// </summary>
/// <param name=input">cadena a codificar</param>"
/// <returns>cadena tipo MD5</returns>
public static
string GetMD5(this
string input)
{
using(MD5 hash=MD5.Create())
{
byte[] data=hash.ComputeHash(Encoding.UTF8.GetBytes(input));
StringBuilder sb=new StringBuilder();
foreach(byte b in data)
{
sb.Append(b.ToString("X2"));
}
return sb.ToString();
}
}
/// <summary>
/// Verifica si la cadena coincide con la serializacion MD5 especificada
/// </summary>
/// <param name=input">Cadena de comparacion</param>"
/// <param name=hash">Cadena MD5 de verificacion</param>"
/// <returns>bool: verdadero o falso segun
verificacion</returns>
public static
bool VerifyMD5(this
string input,string
hash)
{
return input.GetMD5()==hash;
}
#endregion
}
} Saludos, Pipe [hgjfkdls]
Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias. |
|
ID | Asunto | Fecha | Nick | |
57626 | Re: Semilla unica (Resp: 57623) | 02/06/14 20:32 | Manuel_74 | | |
Buenas.. muchas gracias Pipe, voy a intentar traducirlo a vb.net. Ya te voy contando. Saludos
Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias. |
|
ID | Asunto | Fecha | Nick | |
57631 | Re: Semilla unica (Resp: 57626) | 03/06/14 10:07 | Manuel_74 | | |
Buenos días.. Muchas gracias Pipe.. me ha funcionado correctamente.. Saludos.
Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias. |