none
Erro ao converter nvarchar em datetime RRS feed

  • Pergunta

  • Olá Pessoal.

    Estou desenvolvendo uma aplicação em C#.  Ocorre que na operação Inserir Cliente recebo a mensagem "Erro ao converter nvarchar em datetime".

    No meu banco de dados todas as tabelas tem campos de data definidos como datetime.

    No meu form o controle que envia a data para as regras de negócio é um dateTimePicker.

    Já verifiquei minha StoredProcedure e não tem nada anormal.

    Alguém pode me dar uma luz?

    quarta-feira, 31 de agosto de 2016 14:33

Respostas

  • Deleted
    quinta-feira, 1 de setembro de 2016 11:00
  • Ricardo, se na mensagem de erro o número da linha estiver 0, indica erro diretamente em um dos parâmetros do procedimento.

    Se quiser avaliar o que o procedimento está recebendo no parâmetro de data, você pode alterar a declaração do parâmetro para nvarchar(30) e então exibir o conteúdo do parâmetro antes de qualquer processamento no procedimento.


        José Diz     Belo Horizonte, MG - Brasil
    (Se encontrou a solução nesta resposta, ou se o conteúdo foi útil, lembre-se de marcá-la)



    Ricardo,

    Além disso, este tipo de mensagem de erro é muito clara e específica, normalmente ocorre sempre que o dado que esta sendo enviado para armazenamento é conflitante com a estrutura de armazenamento.

    Concordo com as observações e sugestões do José Diz, e principalmente quando ele se referi a identificar o dado que esta sendo manipulado.

    Faça um teste, antes de salvar este dado no banco, apresente o mesmo em tela e verificação se a formatação que esta sendo processada após a conversão esta correta.


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quinta-feira, 1 de setembro de 2016 15:23

Todas as Respostas

  • Olá Ricardo,

    O seu DateTimePicker está passando a propriedade Value para as suas regras, correto? Pois ele possui a propriedade Text que retorna uma string (aí poderia ocorrer o erro).

    Se possível poste seu código para analisarmos.

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    quarta-feira, 31 de agosto de 2016 14:39
  • Deleted
    quarta-feira, 31 de agosto de 2016 14:56
  • Segue procedimento do evento Salvar:

      if (AcaoNaTelaSelecionada.Equals(AcaoNaTela.Inserir))
                {
                    paciente.pac_Bairro = textBoxPacBairro.Text;
                    paciente.pac_CEP = textBoxPacCEP.Text;
                    paciente.pac_Cidade = textBoxPacCidade.Text;
                    paciente.pac_CPF = textBoxPacCPF.Text;
                    paciente.pac_DataCadastro =  dateTimePickerPacDataCadastro.Value;    
                    paciente.pac_DataNascimento = dateTimePickerPacDataNascimento.Value;
                    paciente.pac_Email = textBoxPacEmail.Text;
                    paciente.pac_Nome = textBoxPacNome.Text;
                    paciente.pac_Numero = textBoxPacNumero.Text;
                    if (radioButtonPacResponsavelSim.Checked == true)
                    {
                        paciente.pac_RespFinanceiro = true;
                    }
                    else
                        paciente.pac_RespFinanceiro = false;
                    paciente.pac_RG = textBoxPacRG.Text;
                    paciente.pac_Rua = textBoxPacRua.Text;
                    if (radioButtonPacFeminino.Checked == true)
                    {
                        paciente.pac_Sexo = false;
                    }
                    else
                    {
                        paciente.pac_Sexo = true;
                    }
                    paciente.pac_TelefoneCelular = textBoxPacCelular.Text;
                    paciente.pac_TelefoneFixo = textBoxPacFixo.Text;
                    paciente.pac_TelefoneRecado = textBoxPacRecado.Text;
                    paciente.pac_UF = textBoxPacUF.Text;
                    PacienteNegocios pacienteNegocios = new PacienteNegocios();
                  string retono  =  pacienteNegocios.Inserir(paciente);
                    try
                    {
                        int IdPaciente = Convert.ToInt32(retono);
                        MessageBox.Show("Paciente cadastrado com sucesso. Prontuário: " + IdPaciente.ToString(), "Salvar", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        this.DialogResult = DialogResult.Yes;
                    }
                    catch
                    {
                        MessageBox.Show("Não foi possível cadastrar o Paciente. Detalhes: " + retono, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }


    quarta-feira, 31 de agosto de 2016 15:04
  • José,

    O meu procedimento armazenado usa o tipo date time, mantive este padrão nas tabelas e nos procedimentos armazenados. Por acaso o problema pode ser ocasionado por diferentes configurações de idioma no meu VisualStudio e no SQL Server?

    Eu poderia usar algum procedimento para formatar a data antes de passar para as regras de negócio?

    quarta-feira, 31 de agosto de 2016 15:15
  • Deleted
    quinta-feira, 1 de setembro de 2016 11:00
  • Ricardo, se na mensagem de erro o número da linha estiver 0, indica erro diretamente em um dos parâmetros do procedimento.

    Se quiser avaliar o que o procedimento está recebendo no parâmetro de data, você pode alterar a declaração do parâmetro para nvarchar(30) e então exibir o conteúdo do parâmetro antes de qualquer processamento no procedimento.


        José Diz     Belo Horizonte, MG - Brasil
    (Se encontrou a solução nesta resposta, ou se o conteúdo foi útil, lembre-se de marcá-la)



    Ricardo,

    Além disso, este tipo de mensagem de erro é muito clara e específica, normalmente ocorre sempre que o dado que esta sendo enviado para armazenamento é conflitante com a estrutura de armazenamento.

    Concordo com as observações e sugestões do José Diz, e principalmente quando ele se referi a identificar o dado que esta sendo manipulado.

    Faça um teste, antes de salvar este dado no banco, apresente o mesmo em tela e verificação se a formatação que esta sendo processada após a conversão esta correta.


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quinta-feira, 1 de setembro de 2016 15:23
  • Olá Amigos.

    De fato meu código continha um erro. Na hora de passar o valor para a variável nas minhas regras de negócio me referi ao valor errado.

    Segue erro:

       public string Inserir(Paciente paciente)
            {
                try
                {
                    acessoDadosSQLServer.LimparParametros();
                    acessoDadosSQLServer.AdicionarParametros("@pac_Nome", paciente.pac_Nome);
                    acessoDadosSQLServer.AdicionarParametros("@pac_DataCadastro", paciente.pac_RG
                    acessoDadosSQLServer.AdicionarParametros("@pac_DataNascimento", paciente.pac_DataNascimento);

    Atribui ao parâmetro pac_DataCadastro, o valor correspondente ao RG.

    Problema resolvido!

    Agradeço pela colaboração!

    quinta-feira, 1 de setembro de 2016 15:55