Usuário com melhor resposta
Passar NULL para um parâmetro tipo DateTime - C#

Pergunta
-
Olá, já tentei várias alternativas e não consigo gravar no banco SqlServer um campo tipo DateTime como nulo.
Ex: Na minha tabela tem um campo Dt_Fechamento, Datetime e definido como apdrao NULL. Acontece que esse campo logo que insiro o registro ele tem q estar NULO ou EM BRANCO ja que no momento que abro o registro ainda nao tenho essa data.
Como faço pra gravar nulo nesse campo? ja tentei omitir ele na inserção para ver se o sql assumia o valor padrao mas nao tem jeito.Estou fazendo da seguinte forma: criei um DTO com os campos e na hora que to setando os parametros dá critica na linha do parametro Dt_Fechamento justamente pq nao estou passando uma data. segue abaixo:
public class Atendimento //DTO
{
public int ChvAtendimento { get; set; }
public int ChvCad { get; set; }
public DateTime Dt_Abertura { get; set; }
public string Hora_Abertura { get; set; }
public DateTime Dt_Fechamento { get; set; }
public string Hora_Fechamento { get; set; }
public int ChvTecnico { get; set; }
public string Origem { get; set; }
public string Problema { get; set; }
public string Problema_Chave { get; set; }
public string Servico { get; set; }
public string Situacao { get; set; }
public string Tipo_Status { get; set; }
public string Responsavel { get; set; }
}
.
.
.
Atendimento atendimento = new Atendimento();
atendimento.Dt_Fechamento = NULL // qual o valor que devo colocar aqui?
Grato desde ja a todos pela ajuda.
Respostas
-
Quando você define a propriedade como DateTime? ela passar a aceitar o valor NULL, caso esteja dando problema na hora de inseri você pode fazer o seguinte:
if(atendimento.Dt_Fechamento != null) acessoDAdosSqlServer.AdicionarParametros("@Dt_Fechamento", atendimento.Dt_Fechamento);
Claro que na procedure o parâmetro deve estar definido para aceitar NULL
CREATE PROCEDURE uspAtendimentoInserir @Dt_Fechamento = NULL
Se encontrou a solução nesta resposta, ou se o conteúdo foi útil, lembre-se de marcá-la
- Sugerido como Resposta Levi DomingosModerator sexta-feira, 29 de maio de 2015 08:30
- Marcado como Resposta Sebastiao Freitas sexta-feira, 29 de maio de 2015 20:06
Todas as Respostas
-
-
Claudinei, mas so que na mina classe de inserir eu tenho que passar os parametros :
public string Inserir(Atendimento atendimento)
{
try
{
acessoDAdosSqlServer.LimparParametros();
acessoDAdosSqlServer.AdicionarParametros("@ChvAtendimento", atendimento.ChvAtendimento);
acessoDAdosSqlServer.AdicionarParametros("@ChvCad", atendimento.ChvCad);
acessoDAdosSqlServer.AdicionarParametros("@Dt_Abertura", atendimento.Dt_Abertura);
acessoDAdosSqlServer.AdicionarParametros("@Hora_Abertura", atendimento.Hora_Abertura);
acessoDAdosSqlServer.AdicionarParametros("@Dt_Fechamento", atendimento.Dt_Fechamento);
acessoDAdosSqlServer.AdicionarParametros("@Hora_Fechamento", atendimento.Hora_Fechamento);
acessoDAdosSqlServer.AdicionarParametros("@ChvTecnico", atendimento.ChvTecnico);
acessoDAdosSqlServer.AdicionarParametros("@Origem", atendimento.Origem);
acessoDAdosSqlServer.AdicionarParametros("@Problema", atendimento.Problema);
acessoDAdosSqlServer.AdicionarParametros("@Problema_Chave", atendimento.Problema_Chave);
acessoDAdosSqlServer.AdicionarParametros("@Servico", atendimento.Servico);
acessoDAdosSqlServer.AdicionarParametros("@Situacao", atendimento.Situacao);
acessoDAdosSqlServer.AdicionarParametros("@Tipo_Status", atendimento.Tipo_Status);
acessoDAdosSqlServer.AdicionarParametros("@Responsavel", atendimento.Responsavel);
string chvAtendimento = acessoDAdosSqlServer.ExecutaManipulacao(CommandType.StoredProcedure, "uspAtendimentoInserir").ToString();
return chvAtendimento;Tudo bem que eu retire esse parametro, mas vai haver situacao que eu vou precisar alterar esse registro e na proxima gravacao pode ser uma alteracao de dados e/ou com inserção da dt_fechamento.
ja que defini como DateTime? nao teria alguma forma de passar NULO ?
Muito grato pela sua atencao.
-
Quando você define a propriedade como DateTime? ela passar a aceitar o valor NULL, caso esteja dando problema na hora de inseri você pode fazer o seguinte:
if(atendimento.Dt_Fechamento != null) acessoDAdosSqlServer.AdicionarParametros("@Dt_Fechamento", atendimento.Dt_Fechamento);
Claro que na procedure o parâmetro deve estar definido para aceitar NULL
CREATE PROCEDURE uspAtendimentoInserir @Dt_Fechamento = NULL
Se encontrou a solução nesta resposta, ou se o conteúdo foi útil, lembre-se de marcá-la
- Sugerido como Resposta Levi DomingosModerator sexta-feira, 29 de maio de 2015 08:30
- Marcado como Resposta Sebastiao Freitas sexta-feira, 29 de maio de 2015 20:06
-
Veja com os link abaixo, ajuda um pouco mais, onde você pode definir que pode receber nulo.
https://msdn.microsoft.com/en-us/library/ydkbatt6(v=vs.110).aspx
E conforme o Claudinei também indicou, segue mais um exemplo.
http://stackoverflow.com/questions/3797800/nullable-types-as-property
-