none
Problema ao Inserir a data do Controle DateTimePicker no SQL RRS feed

  • Pergunta

  • Boa Tarde Pessoal,


    O meu problema é o seguinte: ao mandar inserir o registro, da tela de cadastro de clientes. Dá seguinte erro:


    Additional information: ERROR [22007] [Microsoft][ODBC SQL Server Driver][SQL Server]Falha ao converter data e/ou hora da cadeia de caracteres.


    Obs:

    Visual Studio 2013;

    SQL Server Management Studio 2012;

    Estou usando uma Classe de Conexão Padrão ao banco SQL; 

    O campo Data de Cadastro no banco esta como tipo "date";


    Todas as Classes já foram criadas;

    Todos os CRUDs já foram criados;


    O código do botão incluir Clientes:


            private void btnIncluirCliente_Click(object sender, EventArgs e)
            {
                
                clcli.Nome = txtNome.Text;
                clcli.DataCadastro = dateTimePickerDataCad.Text;
                clcli.Fantasia = txtFantasia.Text;
                clcli.CNPJ = txtCNPJ.Text;
                clcli.IE = txtIE.Text;
                clcli.CPF = txtCPF.Text;
                clcli.RG = txtRG.Text;
                clcli.Endereco = txtEndereco.Text;
                clcli.Numero = txtNumero.Text;
                clcli.Complemento = txtComplemento.Text;
                clcli.Bairro = txtBairro.Text;
                clcli.CEP = txtCEP.Text;
                clcli.Cidade = txtCidade.Text;
                clcli.UF = cmbUF.Text;
                clcli.Pais = txtPais.Text;
                clcli.Telefone = txtTelefone.Text;
                clcli.Celular = txtCelular.Text;
                clcli.Email = txtEmail.Text;
                clcli.Tipo = cmbTipo.Text;
                clcli.Observacao = txtObservacao.Text;
                crudcli.Insere(clcli);
                MessageBox.Show("Cadastro realizado");
            }

            O CRUD  - Insere - Cliente:

    public void Insere(ClCliente cli)
            {
                using (OdbcConnection conexao = ConexaoPadrao.CreateConnection())
                {
                    string sql = "Insert into tblCliente (nome, fantasia, cnpj, ie, cpf, rg, data_cadastro, endereco, numero, complemento, bairro, cep, cidade, uf, pais, telefone, celular, email, tipo, observacao) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
                    OdbcCommand comando = new OdbcCommand(sql, conexao);
                    comando.Parameters.AddWithValue("@nome", cli.Nome);
                    comando.Parameters.AddWithValue("@fantasia", cli.Fantasia);
                    comando.Parameters.AddWithValue("@data_cadastro", cli.DataCadastro);                        
                    comando.Parameters.AddWithValue("@cnpj", cli.CNPJ);
                    comando.Parameters.AddWithValue("@ie", cli.IE);
                    comando.Parameters.AddWithValue("@cpf", cli.CPF);
                    comando.Parameters.AddWithValue("@rg", cli.RG);
                    comando.Parameters.AddWithValue("@endereco", cli.Endereco);
                    comando.Parameters.AddWithValue("@numero", cli.Numero);
                    comando.Parameters.AddWithValue("@complemento", cli.Complemento);
                    comando.Parameters.AddWithValue("@bairro", cli.Bairro);
                    comando.Parameters.AddWithValue("@cep", cli.CEP);
                    comando.Parameters.AddWithValue("@cidade", cli.Cidade);
                    comando.Parameters.AddWithValue("@UF", cli.UF);
                    comando.Parameters.AddWithValue("@pais", cli.Pais);
                    comando.Parameters.AddWithValue("@telefone", cli.Telefone);
                    comando.Parameters.AddWithValue("@celular", cli.Celular);
                    comando.Parameters.AddWithValue("@email", cli.Email);
                    comando.Parameters.AddWithValue("@tipo", cli.Tipo);
                    //comando.Parameters.AddWithValue("@atendimento", cli.Atendimento);
                    comando.Parameters.AddWithValue("@observacao", cli.Observacao);
                    conexao.Open();
                    comando.ExecuteNonQuery();
                }
            }

    Obrigado pela ajuda.


    Marcelo Freitas
    marcelo.freitas5@fatec.sp.gov.br
    domingo, 4 de outubro de 2015 19:17

Respostas

  • @mbfreitas0

    Meu metodo de Inserta esta Errado! 

    O metu metodo deveria retornar um valor integer. Deveria ficar assim:

    Public int Insert(ClCliente cli)

    {

    codigo aki...

    }

    Depois numa outra camada voce retornaria um valor true, se for verdade grava se for falso, nao grava.

    Public bool  _Save_Insert(ClCliente cli)

    {

    if(Insert(cli))

    { return true

    }

    else

    {

    codigo

    }

    }


    A flower cannot blossom without sunshine, and man cannot live without love.

    • Marcado como Resposta Marcos SJ segunda-feira, 5 de outubro de 2015 13:18
    segunda-feira, 5 de outubro de 2015 08:00
    Moderador
  • verifique o tamanho dos campos,compare com a quantidade de caracteres que voce está tentando inserir,pode ser que em algum campo no banco de dados esteja limitado e voce tentando salvar com um texto maior do que o configurado.

    dessa forma era para funcionar.


    Microsoft Technology Associate (MTA)

    • Marcado como Resposta mbfreitas0 quinta-feira, 22 de outubro de 2015 10:35
    sexta-feira, 9 de outubro de 2015 01:26
  • Eduardo Boa Noite,

    Fiz o seguinte: alterei o campo no sql data_cadastro que estava como "date" para "datatime" (fiz um insert no banco e a data ficou como 2015-10-08 21:05:21.970) e acrescentei o código conforme me passou para inserir no botão Inserir:

    clcli.DataCadastro = this.dateTimePickerDataCad.Value.ToShortDateString();

    Mas deu o erro abaixo:

    An unhandled exception of type 'System.Data.Odbc.OdbcException' occurred in System.Data.dll

    Additional information: ERROR [22001] [Microsoft][ODBC SQL Server Driver][SQL Server]Dados de cadeia ou binários seriam truncados.

    Obrigado.

    • Marcado como Resposta Marcos SJ segunda-feira, 19 de outubro de 2015 12:53
    sexta-feira, 9 de outubro de 2015 00:08
  • Eduardo Boa Noite,

    Consegui resolver o problema agora. Segui suas orientações e fiz algumas coisas por conta, segue:

    1º Na tabela Cliente, alterei todos os campos Char por String;

    2º Verifiquei o tamanho dos campos;

    3º No Visual Studio, fui no maxlength e delimitei o tamanho dos txtboxes, conforme a tabela Clientes;

    4º No form de Cadastro de Clientes Havia um textbox "Código" e acabei desabilitando ele nas propriedades, colocando-o como Visible: "false"(Na verdade eu queria que ficasse aparecendo o código do registro quando fosse ser inserido mas não consegui fazer isso ...);

    5º fui até a Classe de Clientes e fiz a seguinte alteração:

    de:

    public DateTime DataCadastro { get; set; }

    mudei para:

    public string DataCadastro { get; set; }

    Ai deu certo,

    Obrigado Eduardo pela Ajuda !!!

    Marcelo Freitas.


    • Editado Marcos SJ sexta-feira, 23 de outubro de 2015 12:17 Ortografia
    • Marcado como Resposta Marcos SJ sexta-feira, 23 de outubro de 2015 12:17
    quarta-feira, 21 de outubro de 2015 01:43

Todas as Respostas

  • Seu banco está com o campo formatado apenas para Date,certo?

    voce precisa passar a propriedade value como valor do seu parametro e inserir no banco,

    tente isso:

    string _data = this.dateTimePicker1.Value.ToShortDateString();


    Microsoft Technology Associate (MTA)


    • Editado Eduardo xUni segunda-feira, 5 de outubro de 2015 02:16
    segunda-feira, 5 de outubro de 2015 01:58
  • @mbfreitas0

    Meu metodo de Inserta esta Errado! 

    O metu metodo deveria retornar um valor integer. Deveria ficar assim:

    Public int Insert(ClCliente cli)

    {

    codigo aki...

    }

    Depois numa outra camada voce retornaria um valor true, se for verdade grava se for falso, nao grava.

    Public bool  _Save_Insert(ClCliente cli)

    {

    if(Insert(cli))

    { return true

    }

    else

    {

    codigo

    }

    }


    A flower cannot blossom without sunshine, and man cannot live without love.

    • Marcado como Resposta Marcos SJ segunda-feira, 5 de outubro de 2015 13:18
    segunda-feira, 5 de outubro de 2015 08:00
    Moderador
  • Eduardo Boa Tarde,

    o  " string_data = this.dateTimePicker1.ValueToShortDateString() " eu coloco no evento do botão " IncluirCliente" ou no CRUD do Cliente ?

    Obrigado.

    segunda-feira, 5 de outubro de 2015 16:06
  • no botao,segue

     private void btnIncluirCliente_Click(object sender, EventArgs e)
            {
                
                clcli.Nome = txtNome.Text;
                clcli.DataCadastro =  this.dateTimePicker1.Value.ToShortDateString();
                clcli.Fantasia = txtFantasia.Text;
                clcli.CNPJ = txtCNPJ.Text;
                clcli.IE = txtIE.Text;
                clcli.CPF = txtCPF.Text;
                clcli.RG = txtRG.Text;
                clcli.Endereco = txtEndereco.Text;
                clcli.Numero = txtNumero.Text;
                clcli.Complemento = txtComplemento.Text;
                clcli.Bairro = txtBairro.Text;
                clcli.CEP = txtCEP.Text;
                clcli.Cidade = txtCidade.Text;
                clcli.UF = cmbUF.Text;
                clcli.Pais = txtPais.Text;
                clcli.Telefone = txtTelefone.Text;
                clcli.Celular = txtCelular.Text;
                clcli.Email = txtEmail.Text;
                clcli.Tipo = cmbTipo.Text;
                clcli.Observacao = txtObservacao.Text;
                crudcli.Insere(clcli);
                MessageBox.Show("Cadastro realizado");
            }


    Microsoft Technology Associate (MTA)

    segunda-feira, 5 de outubro de 2015 16:15
  • Eduardo Obrigado Mesmo ... bora testar ...
    segunda-feira, 5 de outubro de 2015 16:22
  • Opa! Coloque aqui sua resolução,para ajudar quem esteja com o mesmo problema!

    []'s


    Microsoft Technology Associate (MTA)

    segunda-feira, 5 de outubro de 2015 16:25
  • Eduardo Boa Noite,

    Fiz o seguinte: alterei o campo no sql data_cadastro que estava como "date" para "datatime" (fiz um insert no banco e a data ficou como 2015-10-08 21:05:21.970) e acrescentei o código conforme me passou para inserir no botão Inserir:

    clcli.DataCadastro = this.dateTimePickerDataCad.Value.ToShortDateString();

    Mas deu o erro abaixo:

    An unhandled exception of type 'System.Data.Odbc.OdbcException' occurred in System.Data.dll

    Additional information: ERROR [22001] [Microsoft][ODBC SQL Server Driver][SQL Server]Dados de cadeia ou binários seriam truncados.

    Obrigado.

    • Marcado como Resposta Marcos SJ segunda-feira, 19 de outubro de 2015 12:53
    sexta-feira, 9 de outubro de 2015 00:08
  • verifique o tamanho dos campos,compare com a quantidade de caracteres que voce está tentando inserir,pode ser que em algum campo no banco de dados esteja limitado e voce tentando salvar com um texto maior do que o configurado.

    dessa forma era para funcionar.


    Microsoft Technology Associate (MTA)

    • Marcado como Resposta mbfreitas0 quinta-feira, 22 de outubro de 2015 10:35
    sexta-feira, 9 de outubro de 2015 01:26
  • Eduardo Boa Noite,

    Consegui resolver o problema agora. Segui suas orientações e fiz algumas coisas por conta, segue:

    1º Na tabela Cliente, alterei todos os campos Char por String;

    2º Verifiquei o tamanho dos campos;

    3º No Visual Studio, fui no maxlength e delimitei o tamanho dos txtboxes, conforme a tabela Clientes;

    4º No form de Cadastro de Clientes Havia um textbox "Código" e acabei desabilitando ele nas propriedades, colocando-o como Visible: "false"(Na verdade eu queria que ficasse aparecendo o código do registro quando fosse ser inserido mas não consegui fazer isso ...);

    5º fui até a Classe de Clientes e fiz a seguinte alteração:

    de:

    public DateTime DataCadastro { get; set; }

    mudei para:

    public string DataCadastro { get; set; }

    Ai deu certo,

    Obrigado Eduardo pela Ajuda !!!

    Marcelo Freitas.


    • Editado Marcos SJ sexta-feira, 23 de outubro de 2015 12:17 Ortografia
    • Marcado como Resposta Marcos SJ sexta-feira, 23 de outubro de 2015 12:17
    quarta-feira, 21 de outubro de 2015 01:43