Usuário com melhor resposta
Erro ao converter nvarchar em datetime

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?
Respostas
-
Deleted
- Marcado como Resposta Ricardo Santana Ribeiro quinta-feira, 1 de setembro de 2016 15:55
-
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]
- Marcado como Resposta Ricardo Santana Ribeiro quinta-feira, 1 de setembro de 2016 15:52
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 -
Deleted
- Sugerido como Resposta Junior Galvão - MVPMVP quinta-feira, 1 de setembro de 2016 15:20
-
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);
}- Editado Ricardo Santana Ribeiro quarta-feira, 31 de agosto de 2016 15:06
-
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?
-
Deleted
- Marcado como Resposta Ricardo Santana Ribeiro quinta-feira, 1 de setembro de 2016 15:55
-
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]
- Marcado como Resposta Ricardo Santana Ribeiro quinta-feira, 1 de setembro de 2016 15:52
-
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!
- Sugerido como Resposta Junior Galvão - MVPMVP quinta-feira, 1 de setembro de 2016 16:14