none
Passar NULL para um parâmetro tipo DateTime - C# RRS feed

  • 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.


    sexta-feira, 29 de maio de 2015 01:12

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

    sexta-feira, 29 de maio de 2015 02:48

Todas as Respostas

  • Coloca assim e não precisa passar nenhum valor.

    public DateTime? Dt_Fechamento { get; set; }


    Se encontrou a solução nesta resposta, ou se o conteúdo foi útil, lembre-se de marcá-la

    sexta-feira, 29 de maio de 2015 01:22
  • 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.

    sexta-feira, 29 de maio de 2015 02:23
  • 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

    sexta-feira, 29 de maio de 2015 02:48
  •    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

    sexta-feira, 29 de maio de 2015 18:34
  • Rapaz, nunca pensei q fosse uma migração "traumática" do vb6 pra o mundo .net OOP, mas...

    FUNCIONANDO, valeu mesmo, foi na mosca.

    sexta-feira, 29 de maio de 2015 20:06