ERRO INSERT

NETVOO 07/06/2016 01:58:45
#463136
Pessoal estou com erro e já reescrevi várias vezes e não achei o erro no insert.
Alguém poderia ajudar erro:
Additional information: String or binary data would be truncated
Informações adicionais : String ou dados binários seria truncados

string StrSQL = null;
StrSQL = [Ô]INSERT INTO funcionarios (CodBarras,Nome,RG,CPF,DtNascimento,DtAdmissao,DtCadastro,CTPS,Serie,Telefone1,Telefone2,Celular,Cargo,Setor,Email,Cep,Logradouro,TipoVia,Municipio,Numero,Bairro,Complemento,UF,Pais,Status,ObSMedicaGerais,DatExameMedico,DatRenovaExameMedic,E1,S1,E2,S2,Segunda,Terca,Quarta,Quinta,Sexta,Sabado,Domingo) values (@CodBarras,@Nome,@RG,@CPF,@DtNascimento,@DtAdmissao,@DtCadastro,@CTPS,@Serie,@Telefone1,@Telefone2,@Celular,@Cargo,@Setor,@Email,@Cep,@Logradouro,@TipoVia,@Municipio,@Numero,@Bairro,@Complemento,@UF,@Pais,@Status,@ObSMedicaGerais,@DatExameMedico,@DatRenovaExameMedic,@E1,@S1,@E2,@S2,@Segunda,@Terca,@Quarta,@Quinta,@Sexta,@Sabado,@Domingo)[Ô];
SqlCommand cmd = new SqlCommand(StrSQL, DaoSqLServer.coSneXao);



cmd.Parameters.Add([Ô]@CodBarras[Ô], SqlDbType.NChar).Value = this.textBox12.Text;
cmd.Parameters.Add([Ô]@Nome[Ô], SqlDbType.NChar).Value = this.comboBox4.Text;
cmd.Parameters.Add([Ô]@RG[Ô], SqlDbType.NChar).Value = this.textBox13.Text;
cmd.Parameters.Add([Ô]@CPF[Ô], SqlDbType.NChar).Value = this.textBox2.Text;
cmd.Parameters.Add([Ô]@DtNascimento[Ô], SqlDbType.NChar).Value = this.dateTimePicker4.Value.ToString([Ô]dd/mm/yyyy[Ô]);
cmd.Parameters.Add([Ô]@DtAdmissao[Ô], SqlDbType.NChar).Value = this.dateTimePicker3.Value.ToString([Ô]dd/mm/yyyy[Ô]);
cmd.Parameters.Add([Ô]@DtCadastro[Ô], SqlDbType.NChar).Value = DateTime.Now.ToString([Ô]dd/mm/yyyy HH:mm:ss[Ô]);
cmd.Parameters.Add([Ô]@CTPS[Ô], SqlDbType.NVarChar).Value = this.textBox17.Text;
cmd.Parameters.Add([Ô]@Serie[Ô], SqlDbType.NChar).Value = this.textBox20.Text;
cmd.Parameters.Add([Ô]@Telefone1[Ô], SqlDbType.NChar).Value = this.maskedTextBox1.Text;
cmd.Parameters.Add([Ô]@Telefone2[Ô], SqlDbType.NChar).Value = this.maskedTextBox1.Text;
cmd.Parameters.Add([Ô]@Celular[Ô], SqlDbType.NChar).Value = this.maskedTextBox2.Text;
cmd.Parameters.Add([Ô]@Cargo[Ô], SqlDbType.NChar).Value = comboBox6.Text;
cmd.Parameters.Add([Ô]@Setor[Ô], SqlDbType.NChar).Value = this.comboBox7.Text;
cmd.Parameters.Add([Ô]@Email[Ô], SqlDbType.NChar).Value = this.textBox5.Text;
cmd.Parameters.Add([Ô]@Cep[Ô], SqlDbType.NChar).Value = this.textBox11.Text;
cmd.Parameters.Add([Ô]@Logradouro[Ô], SqlDbType.NChar).Value = this.textBox6.Text;
cmd.Parameters.Add([Ô]@TipoVia[Ô], SqlDbType.NChar).Value = this.comboBox2.Text;
cmd.Parameters.Add([Ô]@Municipio[Ô], SqlDbType.NChar).Value = this.textBox9.Text;
cmd.Parameters.Add([Ô]@Numero[Ô], SqlDbType.NChar).Value = this.textBox7.Text;
cmd.Parameters.Add([Ô]@Bairro[Ô], SqlDbType.NChar).Value = this.textBox8.Text;
cmd.Parameters.Add([Ô]@Complemento[Ô], SqlDbType.NChar).Value = this.textBox22.Text;
cmd.Parameters.Add([Ô]@UF[Ô], SqlDbType.NChar).Value = this.comboBox5.Text;
cmd.Parameters.Add([Ô]@Pais[Ô], SqlDbType.NChar).Value = this.textBox21.Text;



//-----------------------------------------
if (this.comboBox3.Text == [Ô]Ativo[Ô])
{
cmd.Parameters.Add([Ô]@Status[Ô], SqlDbType.NChar).Value = [Ô]1[Ô];

}
if (this.comboBox3.Text == [Ô]Inativo[Ô])
{
cmd.Parameters.Add([Ô]@Status[Ô], SqlDbType.NChar).Value = [Ô]0[Ô];
}
if (this.comboBox3.Text == [Ô][Ô])
{
cmd.Parameters.Add([Ô]@Status[Ô], SqlDbType.NChar).Value = [Ô]1[Ô];
}
//-----------------------------------------


cmd.Parameters.Add([Ô]@ObSMedicaGerais[Ô], SqlDbType.NVarChar).Value = this.textBox1.Text;
cmd.Parameters.Add([Ô]@DatExameMedico[Ô], SqlDbType.NChar).Value = this.dateTimePicker2.Text;
cmd.Parameters.Add([Ô]@DatRenovaExameMedic[Ô], SqlDbType.NChar).Value = this.dateTimePicker2.Text;

cmd.Parameters.Add([Ô]@E1[Ô], SqlDbType.NChar).Value = this.maskedTextBox3.Text;
cmd.Parameters.Add([Ô]@S1[Ô], SqlDbType.NChar).Value = this.maskedTextBox4.Text;
cmd.Parameters.Add([Ô]@E2[Ô], SqlDbType.NChar).Value = this.maskedTextBox6.Text;
cmd.Parameters.Add([Ô]@S2[Ô], SqlDbType.NChar).Value = this.maskedTextBox5.Text;


//-----------------------------------------
if (this.checkBox1.Checked == true)
{
cmd.Parameters.Add([Ô]@Segunda[Ô], SqlDbType.NChar).Value = true;

}
else
{
cmd.Parameters.Add([Ô]@Segunda[Ô], SqlDbType.NChar).Value = false;

}
//-----------------------------------------
if (this.checkBox2.Checked == true)
{
cmd.Parameters.Add([Ô]@Terca[Ô], SqlDbType.NChar).Value = true;

}
else
{
cmd.Parameters.Add([Ô]@Terca[Ô], SqlDbType.NChar).Value = false;
}
//-----------------------------------------
if (this.checkBox3.Checked == true)
{
cmd.Parameters.Add([Ô]@Quarta[Ô], SqlDbType.NChar).Value = true;

}
else
{
cmd.Parameters.Add([Ô]@Quarta[Ô], SqlDbType.NChar).Value = false;
}
//-----------------------------------------
if (this.checkBox4.Checked == true)
{
cmd.Parameters.Add([Ô]@Quinta[Ô], SqlDbType.NChar).Value = true;

}
else
{
cmd.Parameters.Add([Ô]@Quinta[Ô], SqlDbType.NChar).Value = false;
}
//-----------------------------------------
if (this.checkBox5.Checked == true)
{
cmd.Parameters.Add([Ô]@Sexta[Ô], SqlDbType.NChar).Value = true;

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

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

}
else
{
cmd.Parameters.Add([Ô]@Domingo[Ô], SqlDbType.NChar).Value = false;
}
//-----------------------------------------

if (DaoSqLServer.coSneXao.State == ConnectionState.Closed) DaoSqLServer.coSneXao.Open();
cmd.ExecuteNonQuery();
JABA 07/06/2016 02:52:33
#463137
Tente descobrir qual linha gera o erro, pois desse jeito fica complicado identificarmos o problema.

OBS: Por que você não joga o valor diretamente em vez de usar condicionais? Ex:

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

NETVOO 07/06/2016 02:56:22
#463138
Citação:

:
Tente descobrir qual linha gera o erro, pois desse jeito fica complicado identificarmos o problema.

OBS: Por que você não joga o valor diretamente em vez de usar condicionais? Ex:

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



Não da erro ele gera erro direto no cmd.ExecuteNonQuery();

Additional information: String or binary data would be truncated

E uso dessa forma pois tenho em outros formulários assim e funcionando então deixei assim.
PERCIFILHO 07/06/2016 07:09:44
#463141
Bom dia, você já depurou linha a linha para ver o que os dados estão retornando?
Assim dá para saber em qual campo é que está ocorrendo o erro.
Muitas vezes esse erro acontece pois determinado campo da tabela tem um tamanho e você quer inserir um dado com tamanho maior do que o do campo da tabela.
XLEGENDARY 07/06/2016 08:49:47
#463146
use o breakpoint e percorra linha a linha até achar o que está truncado
ele da erro no ExecuteNonQuery justamente porque o erro esta vindo do seu command que está ligado aos campos que você está especificando pra ele.

o certo é achar qual a linha está dando erro, olhar o tamanho da string e comparar com o tamanho do campo que está na base de dados, possivelmente um está maior que o outro permite.
NETVOO 08/06/2016 15:38:23
#463198
Pessoal não da erro e nenhuma linha só na linha cmd.ExecuteNonQuery();
Passei linha por linha e todos os campos preenchidos.
NOBODY 08/06/2016 16:09:59
#463200
O código esta bem melhor assim:
string SQL = [Ô]INSERT INTO funcionarios([Ô];
SQL += [Ô]CodBarras,Nome,RG,CPF,DtNascimento,DtAdmissao,DtCadastro,CTPS,Serie,[Ô];
SQL += [Ô]Telefone1,Telefone2,Celular,Cargo,Setor,Email,Cep,Logradouro,TipoVia,[Ô];
SQL += [Ô]Municipio,Numero,Bairro,Complemento,UF,Pais,Status,ObSMedicaGerais,[Ô];
SQL += [Ô]DatExameMedico,DatRenovaExameMedic,E1,S1,E2,S2,Segunda,Terca,Quarta,[Ô];
SQL += [Ô]Quinta,Sexta,Sabado,Domingo) VALUES([Ô];
SQL += [Ô]@CodBarras,@Nome,@RG,@CPF,@DtNascimento,@DtAdmissao,@DtCadastro,@CTPS,@Serie,[Ô];
SQL += [Ô]@Telefone1,@Telefone2,@Celular,@Cargo,@Setor,@Email,@Cep,@Logradouro,@TipoVia,[Ô];
SQL += [Ô]@Municipio,@Numero,@Bairro,@Complemento,@UF,@Pais,@Status,@ObSMedicaGerais,[Ô];
SQL += [Ô]@DatExameMedico,@DatRenovaExameMedic,@E1,@S1,@E2,@S2,@Segunda,@Terca,@Quarta,[Ô];
SQL += [Ô]@Quinta,@Sexta,@Sabado,@Domingo)[Ô];
string strConnection = [Ô]Data Source=.\\sqlexpress;Initial Catalog=Membership;Integrated Security=True[Ô];

SqlConnection cn = new SqlConnection(strConnection);
SqlCommand cmd = new SqlCommand(SQL, cn);

cmd.Connection = cn;
cmd.CommandText = SQL;
cmd.Parameters.Add([Ô]@CodBarras[Ô], SqlDbType.NChar).Value = this.textBox12.Text;
cmd.Parameters.Add([Ô]@Nome[Ô], SqlDbType.NChar).Value = this.comboBox4.Text;
cmd.Parameters.Add([Ô]@RG[Ô], SqlDbType.NChar).Value = this.textBox13.Text;
cmd.Parameters.Add([Ô]@CPF[Ô], SqlDbType.NChar).Value = this.textBox2.Text;
cmd.Parameters.Add([Ô]@DtNascimento[Ô], SqlDbType.NChar).Value = this.dateTimePicker4.Value.ToString([Ô]dd/MM/yyyy[Ô]);
cmd.Parameters.Add([Ô]@DtAdmissao[Ô], SqlDbType.NChar).Value = this.dateTimePicker3.Value.ToString([Ô]dd/MM/yyyy[Ô]);
cmd.Parameters.Add([Ô]@DtCadastro[Ô], SqlDbType.NChar).Value = DateTime.Now.ToString([Ô]dd/MM/yyyy HH:mm:ss[Ô]);
cmd.Parameters.Add([Ô]@CTPS[Ô], SqlDbType.NVarChar).Value = this.textBox17.Text;
cmd.Parameters.Add([Ô]@Serie[Ô], SqlDbType.NChar).Value = this.textBox20.Text;
cmd.Parameters.Add([Ô]@Telefone1[Ô], SqlDbType.NChar).Value = this.maskedTextBox1.Text;
cmd.Parameters.Add([Ô]@Telefone2[Ô], SqlDbType.NChar).Value = this.maskedTextBox1.Text;
cmd.Parameters.Add([Ô]@Celular[Ô], SqlDbType.NChar).Value = this.maskedTextBox2.Text;
cmd.Parameters.Add([Ô]@Cargo[Ô], SqlDbType.NChar).Value = comboBox6.Text;
cmd.Parameters.Add([Ô]@Setor[Ô], SqlDbType.NChar).Value = this.comboBox7.Text;
cmd.Parameters.Add([Ô]@Email[Ô], SqlDbType.NChar).Value = this.textBox5.Text;
cmd.Parameters.Add([Ô]@Cep[Ô], SqlDbType.NChar).Value = this.textBox11.Text;
cmd.Parameters.Add([Ô]@Logradouro[Ô], SqlDbType.NChar).Value = this.textBox6.Text;
cmd.Parameters.Add([Ô]@TipoVia[Ô], SqlDbType.NChar).Value = this.comboBox2.Text;
cmd.Parameters.Add([Ô]@Municipio[Ô], SqlDbType.NChar).Value = this.textBox9.Text;
cmd.Parameters.Add([Ô]@Numero[Ô], SqlDbType.NChar).Value = this.textBox7.Text;
cmd.Parameters.Add([Ô]@Bairro[Ô], SqlDbType.NChar).Value = this.textBox8.Text;
cmd.Parameters.Add([Ô]@Complemento[Ô], SqlDbType.NChar).Value = this.textBox22.Text;
cmd.Parameters.Add([Ô]@UF[Ô], SqlDbType.NChar).Value = this.comboBox5.Text;
cmd.Parameters.Add([Ô]@Pais[Ô], SqlDbType.NChar).Value = this.textBox21.Text;

//Supondo que o combobox [ô]comboBox3[ô]
//Tenha as seguintes informações [ô]0-Inativo[ô], [ô]1-Ativo[ô]
cmd.Parameters.Add([Ô]@Status[Ô], SqlDbType.NChar).Value = Strings.mid(this.comboBox3.Text, 1, 1);
cmd.Parameters.Add([Ô]@ObSMedicaGerais[Ô], SqlDbType.NVarChar).Value = this.textBox1.Text;
cmd.Parameters.Add([Ô]@DatExameMedico[Ô], SqlDbType.NChar).Value = this.dateTimePicker2.Text;
cmd.Parameters.Add([Ô]@DatRenovaExameMedic[Ô], SqlDbType.NChar).Value = this.dateTimePicker2.Text;
cmd.Parameters.Add([Ô]@E1[Ô], SqlDbType.NChar).Value = this.maskedTextBox3.Text;
cmd.Parameters.Add([Ô]@S1[Ô], SqlDbType.NChar).Value = this.maskedTextBox4.Text;
cmd.Parameters.Add([Ô]@E2[Ô], SqlDbType.NChar).Value = this.maskedTextBox6.Text;
cmd.Parameters.Add([Ô]@S2[Ô], SqlDbType.NChar).Value = this.maskedTextBox5.Text;
cmd.Parameters.Add([Ô]@Segunda[Ô], SqlDbType.NChar).Value = this.checkBox1.Checked;
cmd.Parameters.Add([Ô]@Terca[Ô], SqlDbType.NChar).Value = this.checkBox2.Checked == true;
cmd.Parameters.Add([Ô]@Quarta[Ô], SqlDbType.NChar).Value = this.checkBox3.Checked;
cmd.Parameters.Add([Ô]@Quinta[Ô], SqlDbType.NChar).Value = this.checkBox4.Checked;
cmd.Parameters.Add([Ô]@Sexta[Ô], SqlDbType.NChar).Value = this.checkBox5.Checked;
cmd.Parameters.Add([Ô]@Sabado[Ô], SqlDbType.NChar).Value = this.checkBox6.Checked;
cmd.Parameters.Add([Ô]@Domingo[Ô], SqlDbType.NChar).Value = this.checkBox7.Checked;
cn.Open();
cmd.ExecuteNonQuery();
cn.Close();

Teste ai
PERCIFILHO 09/06/2016 08:10:18
#463244
Colega NetVoo
Citação:

Pessoal não da erro e nenhuma linha só na linha cmd.ExecuteNonQuery();
Passei linha por linha e todos os campos preenchidos.


Realmente, esse erro somente vai aparecer no ExecuteNonQuery do comando, pois não ocorreu nenhum erro no código.
Citação:

Additional information: String or binary data would be truncated
Informações adicionais : String ou dados binários seria truncados


Como já disse anteriormente, esse erro está ligado ao fato de você ter um campo na tabela com um certo tamanho e na hora de gravar, está tentando gravar um dado com tamanho maior do que o campo permite. Sugiro que você tendo em mãos a estrutura da sua tabela, percorra linha a linha o seu Insert e verifique qual dos registros está tentando ser inserido com tamanho maior que o campo da sua tabela.
LLAIA 09/06/2016 15:07:18
#463256
Seu datatype nos campos é NChar mesmo?
NETVOO 11/06/2016 00:50:25
#463350
Citação:

:
Colega NetVoo
Pessoal não da erro e nenhuma linha só na linha cmd.ExecuteNonQuery();
Passei linha por linha e todos os campos preenchidos.
Realmente, esse erro somente vai aparecer no ExecuteNonQuery do comando, pois não ocorreu nenhum erro no código.
Additional information: String or binary data would be truncated
Informações adicionais : String ou dados binários seria truncados
Como já disse anteriormente, esse erro está ligado ao fato de você ter um campo na tabela com um certo tamanho e na hora de gravar, está tentando gravar um dado com tamanho maior do que o campo permite. Sugiro que você tendo em mãos a estrutura da sua tabela, percorra linha a linha o seu Insert e verifique qual dos registros está tentando ser inserido com tamanho maior que o campo da sua tabela.




Ok vi isso e só se for o contrário tenho um campo no banco de dados que é ObSMedicaGerais SqlDbType NVarChar(MAX) e na hora do teste não digitei mais do que 20 até menos só que o campo está declarado no código como cmd.Parameters.Add([Ô]@ObSMedicaGerais[Ô], SqlDbType.NVarChar).Value = this.textBox1.Text;

Sem o (MAX), só se for isso, porem tentei declarar no código SqlDbType.NVarChar(MAX) porem ele não aceita ai tentei colocar 500 e da o mesmo erro.
Tem alguma ideia ..?
KERPLUNK 11/06/2016 01:17:36
#463352
Resposta escolhida
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.
Página 1 de 2 [15 registro(s)]
Tópico encerrado , respostas não são mais permitidas