Usuário com melhor resposta
Problema ao Inserir a data do Controle DateTimePicker no SQL

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
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
-
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
-
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
-
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.
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
-
@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
-
-
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)
-
-
-
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
-
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
-
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.