none
Convert Datetime Null RRS feed

  • Pergunta

  • Prezados(as),

    Há uma coluna no banco de dados de nome gp_databaixa do tipo Date, já no Visual C# ela é declarada como Datetime, este campo será para inserir a data de baixa de terminado documento pendente, porém, ele deve iniciar como Null, pois só irá inserir a data de baixa no dia que resolver o assunto. Sendo isso, fazer um "update" na tela, ele da o seguinte erro: Cadeia de caracteres não foi reconhecida como DateTime válido.

    Obs: Meus dados estão em Camadas: Model, BLL e DAL.

     private void bt_gpdocumento_gravar_Click(object sender, EventArgs e)
            {
                Camadas.BLL.GerenciamentoProtocolo bllGereneciamentoProtocolo = new Camadas.BLL.GerenciamentoProtocolo();
                Camadas.Model.GerenciamentoProtocolo oProtocolo = new Camadas.Model.GerenciamentoProtocolo();

                oProtocolo.gp_codigo = Convert.ToInt32(txtgp_Codigo.Text);
                oProtocolo.gp_dataentrada = Convert.ToDateTime(txtgp_Dataentrada.Text);
                oProtocolo.doc_codigo = Convert.ToInt32(cbgp_Documento.Text);
                oProtocolo.cl_codigo = Convert.ToInt32(cbgp_Cliente.Text);
                oProtocolo.gp_descricao = txtgp_Descricao.Text;
                oProtocolo.gp_status = cbgp_Status.Text;
                oProtocolo.gp_databaixa = Convert.ToDateTime(txtgp_Databaixa.Text);

                DialogResult result;
                string msg = " ";

                if (tipoOper == 'E') {
                    msg = "Atualizar dados?";
                }
                result = MessageBox.Show(msg, "Gravar", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
                if (result == DialogResult.Yes)
                {
                    bllGereneciamentoProtocolo.Update(oProtocolo);

                    MessageBox.Show("Dados gravados com sucesso.", "Gravar", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                dtgv_GerenciamentoDocumento.DataSource = bllGereneciamentoProtocolo.Select();
                LimparControles();
                HabilitaControle(false);
            }

    --------------------------------------------------------------------------------------------------------------------------

    UPDATE...

            public void Update(Model.GerenciamentoProtocolo oProtocolo)
            {
                SqlConnection conexao = new SqlConnection(strCon);
                string sql = "Update GerenciamentoProtocolo set ";
                sql += "gp_dataentrada=@gp_dataentrada, doc_codigo=@doc_codigo,cl_codigo=@cl_codigo, ";
                sql += "gp_descricao=@gp_descricao, gp_status=@gp_status, gp_databaixa=@gp_databaixa where gp_codigo=@gp_codigo;";
                SqlCommand cmd = new SqlCommand(sql, conexao);

                cmd.Parameters.AddWithValue("@gp_codigo", oProtocolo.gp_codigo);
                cmd.Parameters.AddWithValue("@gp_dataentrada", oProtocolo.gp_dataentrada);
                cmd.Parameters.AddWithValue("@doc_codigo", oProtocolo.doc_codigo);
                cmd.Parameters.AddWithValue("@cl_codigo", oProtocolo.cl_codigo);
                cmd.Parameters.AddWithValue("@gp_descricao", oProtocolo.gp_descricao);
                cmd.Parameters.AddWithValue("@gp_status", oProtocolo.gp_status);
                cmd.Parameters.AddWithValue("@gp_databaixa", oProtocolo.gp_databaixa);
                conexao.Open();
                try
                {
                    cmd.ExecuteNonQuery();
                }

                catch
                {
                    Console.WriteLine("Erro ao Atualizar Protocolo.");
                }
                finally
                {
                    conexao.Close();
                }
            }

    terça-feira, 12 de novembro de 2013 17:08

Respostas

  • Isso teria que funcionar, se na sua classe esta como nullable deve funcionar olha um exemplo pra esclarecer :

    //supondo que declarou em sua classe como nullable tipo
    DateTime? gp_databaixa;
    
    //e em algum momento voce atribuiu a data tipo
    gp_databaixa = Datetime.Now;
    
    
    /isso deveria funcionar verifica se neste momento o valor que esta na data
    //veja que como sendo nullable passe sua variavel com .Value
    //como no link que te enviei
    cmd.Parameters.AddWithValue("@gp_databaixa", oProtocolo.gp_databaixa.Value);

    • Marcado como Resposta Giovani Cr sexta-feira, 22 de novembro de 2013 13:39
    terça-feira, 12 de novembro de 2013 19:17
  • "Cadeia de caracteres não foi reconhecida como DateTime válido."

    Esse erro é de entrada. O que tá sendo passado para o objeto DateTime não é válido.

    Pode falar em que linha "estoura" o erro?

    • Marcado como Resposta Giovani Cr sexta-feira, 22 de novembro de 2013 13:39
    quarta-feira, 13 de novembro de 2013 16:10

Todas as Respostas

  • Declare o seu gp_databaixa como nullable assim :

    DateTime? gp_databaixa;

    Olha esta explicação sobre tipos nullable 

    http://www.macoratti.net/11/03/c_ntp.htm

    http://msdn.microsoft.com/pt-br/library/1t3y8s4s(v=vs.90).aspx

    terça-feira, 12 de novembro de 2013 17:23
  • Declarei, continua o mesmo erro.
    terça-feira, 12 de novembro de 2013 19:03
  • Isso teria que funcionar, se na sua classe esta como nullable deve funcionar olha um exemplo pra esclarecer :

    //supondo que declarou em sua classe como nullable tipo
    DateTime? gp_databaixa;
    
    //e em algum momento voce atribuiu a data tipo
    gp_databaixa = Datetime.Now;
    
    
    /isso deveria funcionar verifica se neste momento o valor que esta na data
    //veja que como sendo nullable passe sua variavel com .Value
    //como no link que te enviei
    cmd.Parameters.AddWithValue("@gp_databaixa", oProtocolo.gp_databaixa.Value);

    • Marcado como Resposta Giovani Cr sexta-feira, 22 de novembro de 2013 13:39
    terça-feira, 12 de novembro de 2013 19:17
  • Tem e-mail ou facebook? Passa ae.
    terça-feira, 12 de novembro de 2013 20:01
  • Resolveu seu problema ?
    quarta-feira, 13 de novembro de 2013 15:12
  • "Cadeia de caracteres não foi reconhecida como DateTime válido."

    Esse erro é de entrada. O que tá sendo passado para o objeto DateTime não é válido.

    Pode falar em que linha "estoura" o erro?

    • Marcado como Resposta Giovani Cr sexta-feira, 22 de novembro de 2013 13:39
    quarta-feira, 13 de novembro de 2013 16:10
  • Bom dia 2ADST1

    Peço que caso tenha encontrado alguma solução compartilhe a mesma para auxiliar outros usuários com o mesmo problema.

    Att,


    Giovani Cruzara – Microsoft Contingent Staff

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    Msdn Community Support

    Por favor, lembre-se de “Marcar como Resposta” as respostas que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quinta-feira, 21 de novembro de 2013 12:40