Data SqlServer

Bom dia amigos;

estou com o seguinte erro:

http://image.prntscr.com/image/1fc966a2050449a39152ef440b1ec5dc.png

Estava dando uma verificada como eu poderia validar as datas e acabei usando estes dois metodos

http://image.prntscr.com/image/dc803335aadf43468e57bd1b5854535f.png

Se funcionou? Sim, funcionou mas deixou a montagem dos Objetos lentos demais(tenho 3633 pessoas cadastradas), sendo que coloquei o ProgressBar para iniciar apenas depois que os objetos foram carregandos, somente para os inserts.

Estou usando assim:

http://image.prntscr.com/image/b2c00da915d44ce78d52c410eb48be5f.png

Tem alguma forma de torna isso mais rápido.

Existem problemas no seu código e basicamente você converter o dado mesmo com erros, ou seja o seu isValidateDate converte primeiro e depois testa, no if deveria ser DateTime.TryParse primeiro, e na verdade só ele resolveria seu problema

Código in-line para verificação de data (DateTime):

// data extraida de algum input/componente
string data = "31/02/1990";

// declaração da data
DateTime dataConvert;

// verificando data
if (DateTime.TryParse(data, out dataConvert))
{
	// data válida e
	// dataConvert possui a data 
}
else
{
	// data inválida
	// dataConvert tem o valor inicial 
	if (dataConvert == DateTime.MinValue)
	{
		// a data não foi convertida 
		// e a dataConvert está com valor inicial
	}
}

Método para verificação:

public class Date
{
	public static bool isValidate(string value)
	{
		DateTime result;
		if (string.IsNullOrEmpty(value)) return false;
		if (value.Length < 10) return false;
		return DateTime.TryParse(value, out result);
	}
	public static bool isValidate(string value, out DateTime result)
	{
		if (string.IsNullOrEmpty(value))
		{
			result = DateTime.MinValue;
			return false;
		}
		if (value.Length < 10)
		{
			result = DateTime.MinValue;
			return false;
		}
		return DateTime.TryParse(value, out result);
	}
}

Como usar:

// data extraida de algum input/componente
string data = "31/01/1990";

// declaração da data
DateTime dataConvert;

System.Console.WriteLine(Date.isValidate(data));
System.Console.WriteLine(Date.isValidate(data, out dataConvert));
System.Console.WriteLine(dataConvert);

Na verdade nem precisa fazer isso, mas, seria uma forma de formatar a sua lógica de processo aonde eu percebi que é para receber o ano maior de 1953 como seria:


Adicione mais um método nessa classe Date igual exemplo abaixo:

public class Date
{
	public static bool isValidate(string value)
	{
		DateTime result;
		if (string.IsNullOrEmpty(value)) return false;
		if (value.Length < 10) return false;
		return DateTime.TryParse(value, out result);
	}
	public static bool isValidate(string value, out DateTime result)
	{
		if (string.IsNullOrEmpty(value))
		{
			result = DateTime.MinValue;
			return false;
		}
		if (value.Length < 10)
		{
			result = DateTime.MinValue;
			return false;
		}
		return DateTime.TryParse(value, out result);
	}

	public static bool isValidate(string value, int year, out DateTime result)
	{
		if (isValidate(value, out result))
		{
			return result.Year < year;
		}
		return false;
	}
}

Como usar:

// data extraida de algum input/componente
string data = "31/01/1990";

// declaração da data
DateTime dataConvert;

System.Console.WriteLine(Date.isValidate(data));
System.Console.WriteLine(Date.isValidate(data, 2000, out dataConvert));
System.Console.WriteLine(dataConvert);
1 curtida

show de bola, veja aqui como fiz.
Funcionou perfeitamente, tive que colocar por fora para ela preencher a variavel DateTime, quando eu coloquei diretamente dentro do if, ele n preencheu.

O que acha da minha aplição?

não precisa o _1 o resto está perfeito.

vlw obrigadão