ERRO 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();
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;
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.
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.
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.
Passei linha por linha e todos os campos preenchidos.
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
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.
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 ..?
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.