ERRO INSERT

NETVOO 11/06/2016 01:30:44
#463353
Pessoal estou querendo mudar esse insert, quem sabe funciona.
Alguém teria um modelo que seja diferente desse que usei e que esteja funcionando. ?
DS2T 11/06/2016 04:26:10
#463355
O problema não está no seu Insert. Senão, daria erro de síntaxe. Como já mencionaram, o problema está no tamanho do campo.
Ontem mesmo ele apareceu na minha tela, e reparei que era porque estava tentando salvar um valor de 32 bits num campo tinyint do sql server.

Verifique campo a campo, seja ele numérico ou varchar... Tem coisa com tamanho errado aí.
Abraços!
NETVOO 11/06/2016 10:29:03
#463359
Citação:

:
Não é exatamente um erro, dependendo das configurações do SQL Server, pode até inserir os dados. Essa mensagem está dizendo que o valor que você vai inserir em um dos campos é menor que o tamanho do campo na tabela. Não vai adiantar mudar nada no código enquanto não mudar o tamanho do campo na tabela. Mesmo assim, aqui vão alguns conselhos para tentar melhorar sua aplicação:
1 - Considere refatorar essa tabela para mais de uma tabela. Documentos em uma, contatos em outra, endereço(s) em outra, escala de trabalho, enfim, separar dados por tipo.
2 - Use nomenclatura apropriada para seus objetos, [Ô]textbox1, textbox20, textbox14[Ô] é muito vago, coloque o nome do componente de acordo com o que ele é.
3 - Use blocos [Ô]using[Ô] para todo e qualquer objeto que implemente IDisposable, como a conexão e o comando(SqlConnection, SqlCommand).
4 - Use blocos [Ô]try...catch[Ô] contendo toda e qualquer chamada de método que possa lançar uma exceção, como os métodos Open da conexão e ExecuteNonQuery do comando SQL.
5 - Se você seguir o primeiro ítem dessa lista, considere escrever seu código usando princípios de OOP(veja no meu canal), isso vai reduzir drasticamente o tamanho e complexidade de seu código, melhorando em muito a depuração, além de aumentar muito a clareza e versatilidade dele.
6 - Propriedades que são do tipo boolean, não precisa de operador e comparador, além disso, o valor da propriedade é o mesmo do parâmetro. Por exemplo:
O código:


if (this.checkBox6.Checked == true)
{
cmd.Parameters.Add([Ô]@Sabado[Ô], SqlDbType.NChar).Value = true;
}
else
{
cmd.Parameters.Add([Ô]@Sabado[Ô], SqlDbType.NChar).Value = false;
}


Tem exatamente o mesmo efeito de:

cmd.Parameters.Add([Ô]@Sabado[Ô], SqlDbType.NChar).Value = this.checkBox6.Checked;

Uma só linha substituindo todo um bloco de código, que inclui um teste lógico totalmente desnecessário.
7 - O objeto SqlCommand, possui um método chamado [Ô]AddWithValue[Ô], que internamente [Ô]traduz[Ô] o valor passado para o valor correspondente no banco se os tipos forem compatíveis. Exemplo:

cmd.Parameters.AddWithValue([Ô]@Telefone2[Ô], this.maskedTextBox1.Text);

Isso pode ser usado para todas os demais parâmetros.
8 - Procure dividir o código para não ter tanta coisa em um só local. Aqui entra mais uma vez os princípios de OOP.
9 - Considere também estudar o Entity Framework. Você vai ver que facilita a vida por demais e esse tipo de problema que está tendo(de dados truncando), jamais teria nele.



Show KERPLUNK, valeu, cara já mudei todos os campos da tabela.
tipo os que eram int coloquei como char ou nvarchar tudo para ver se passava, srrss mais não deu certo.

Então esse erro é por que o valor inserido é menor e não maior...!!!
Ou seja então o que teria no txtbox teria que ser do tamanho exato que está no banco, e se for assim, como faço com o campo nome da pessoa, pois cada um tem um nome e por sua vez um tamanho.? --> isso deve ser só em algum campo né.

Desculpe se entendi errado sua colocação inicial.


KERPLUNK 11/06/2016 20:30:02
#463372
Eu acho que você entendeu errado mesmo. [Ô]Truncar[Ô] é cortar um pedaço, muito mais comum(se não exclusivo) de tipos de dados string, logo mudar os campos numéricos para string era completamente desnecessário. Liste todos os campos string(char, varchar, nvarchar...) e veja seus tamanhos na tabela, então coloque o MaxLength de cada um dos campos referentes no seu form com o mesmo tamanho do campo no banco, isso deve impedir que o tamanho exceda.
NETVOO 13/06/2016 15:13:58
#463443
Citação:

:
Eu acho que você entendeu errado mesmo. [Ô]Truncar[Ô] é cortar um pedaço, muito mais comum(se não exclusivo) de tipos de dados string, logo mudar os campos numéricos para string era completamente desnecessário. Liste todos os campos string(char, varchar, nvarchar...) e veja seus tamanhos na tabela, então coloque o MaxLength de cada um dos campos referentes no seu form com o mesmo tamanho do campo no banco, isso deve impedir que o tamanho exceda.



ok vou ver isso, e com a sua dica eu corrigi um insert de outra tela em outro banco e tabela, que estava com o mesmo erro, e era um campo que estava setado para nvarchar(1) e eu estava tentando injetar uns 30 ou mais catacteres lá.
Comi essa bola ai por que o banco em questão e as tabelas não são minhas e sua dica ajudou pra cara....!
Vou fazer o mesmo nesse select, revisar o banco primeiro, e depois sigo sua ultima fica.

Pessoal Agradeço a Todos ai pelas respostas..
Página 2 de 2 [15 registro(s)]
Tópico encerrado , respostas não são mais permitidas