Usuário com melhor resposta
Upload de imagem usando PictureBox - windows forms

Pergunta
-
Fala Galera bom dia ! to com pequeno problema e não to conseguindo resolver, é primeira vez que to usando o PictureBox do c#, minha aplicação é Windows Forms. e eu estou fazendo um cadastro usando foto! porém quando to fazendo a inserção dos dados e convertendo a foto para binario em meu banco de dados minha exeção me retorna esse erro.
esse é meu codigo do insert:
private void BT_SaveOnibus_Click(object sender, EventArgs e) { try { if (TB_NomeUser.Text == "") { MessageBox.Show("Informe o nome do Usuário", "Aviso do sistema", MessageBoxButtons.OK, MessageBoxIcon.Warning); TB_NomeUser.Focus(); return; } if (MK_TelUser.Text == "") { MessageBox.Show("Informe o Telefone", "Aviso do sistema", MessageBoxButtons.OK, MessageBoxIcon.Warning); MK_TelUser.Focus(); return; } if (TB_RgUser.Text == "") { MessageBox.Show("Informe o Rg do Usuário", "Aviso do sistema", MessageBoxButtons.OK, MessageBoxIcon.Warning); TB_RgUser.Focus(); return; } if (TB_CpfUser.Text == "") { MessageBox.Show("Informe o Cpf do Usuário", "Aviso do sistema", MessageBoxButtons.OK, MessageBoxIcon.Warning); TB_CpfUser.Focus(); return; } if (CLB_Opcao.CheckedItems.Count > 0) { for (int i = 0; i < CLB_Opcao.CheckedItems.Count; i++) { if (str == "") { str = CLB_Opcao.CheckedItems[i].ToString(); } else { str += "," + CLB_Opcao.CheckedItems[i].ToString(); } } } cg.con = new SqlConnection(cn.DBconn); cg.con.Open(); string cb = "insert into CadOnibusUser(F_Cod,Id_UserOnibus,TB_NomeUser,TB_TelefoneUser,TB_RgUser,TB_CpfUser,TB_OpcaoUser,TB_ImageUser,TB_NomePropri,TB_TelefonePropri,TB_EnderecoPropri,TB_EnderecoPropri,TB_QuadraPropri,TB_EmailPropri,TB_RgPropri,TB_CpfPropri,TB_NumeroPropri,TB_LotePropri) VALUES (@d1,@d2,@d3,@d4,@d5,@d6,@d7,@d8,@d9,@d10,@d11,@d12,@d13,@d14,@d15,@d16,@d17)"; cg.cmd = new SqlCommand(cb); cg.cmd.Connection = cg.con; cg.cmd.Parameters.AddWithValue("@d1", TB_IdFicha.Text); cg.cmd.Parameters.AddWithValue("@d2", TB_id.Text); cg.cmd.Parameters.AddWithValue("@d3", TB_NomeUser.Text); cg.cmd.Parameters.AddWithValue("@d4", MK_TelUser.Text); cg.cmd.Parameters.AddWithValue("@d5", TB_RgUser.Text); cg.cmd.Parameters.AddWithValue("@d6", TB_CpfUser.Text); cg.cmd.Parameters.AddWithValue("@d7", str); cg.cmd.Parameters.AddWithValue("@d9", TB_NomeProprietario.Text); cg.cmd.Parameters.AddWithValue("@d10", TB_NumeroProprietario.Text); cg.cmd.Parameters.AddWithValue("@d11", TB_EnderecoProprietario.Text); cg.cmd.Parameters.AddWithValue("@d12", TB_QdProprietario.Text); cg.cmd.Parameters.AddWithValue("@d13", TB_EmailProprietario.Text); cg.cmd.Parameters.AddWithValue("@d14", TB_RgProprietario.Text); cg.cmd.Parameters.AddWithValue("@d15", TB_CpfProprietario.Text); cg.cmd.Parameters.AddWithValue("@d16", TB_NumeroProprietario.Text); cg.cmd.Parameters.AddWithValue("@d17", TB_LoteProprietario.Text); converterFoto(); cg.cmd.ExecuteReader(); cg.con.Close(); st1 = Lbl_Usuario.Text; st2 = "Novo Usuário incluído '" + TB_NomeUser.Text + "' com seguinte id '" + TB_id.Text + "'"; cf.LogFunc(st1, System.DateTime.Now, st2); BT_SaveOnibus.Enabled = false; MessageBox.Show("Salvo com sucesso", "Registro", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception erro) { MessageBox.Show(erro.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
Esse é meu metodovoid converterFoto() { //convertendo a foto para dados binários if (picFoto.Image != null) { ms = new MemoryStream(); picFoto.Image.Save(ms, ImageFormat.Jpeg); byte[] foto_array = new byte[ms.Length]; ms.Position = 0; ms.Read(foto_array, 0, foto_array.Length); cg.cmd.Parameters.AddWithValue("@d8", foto_array); } }
OBS: Estou usando DB sqlServer- e o tipo da coluna imagem eu defini como "image" desde de já agradeço Galera!
Respostas
-
Olá Lucas, desculpa a demora em responder, olha só o mais comum para salvar uma imagem que não seja pelo método de conversão binária usando o principio que as imagens serão salvas no servidor e não na máquina do cliente/usuário é usar esta lógica:
1. Após a escolha da imagem, deve-se copiar a imagem (usando a propriedade copy do objeto SAVEFILEDIALOG) para o caminho (de preferência pré-parametrizado em algum local do sistema) do servidor.
2. Após a montagem desse caminho com a imagem escolhida (geralmente monta-se uma string do tipo "C:\TEMP\IMG\Usuario01\teste.jpg" ) e esta string deve ser salva na tabela do campo, pois através desse caminho é que será possível recuperar a imagem escolhida pelo usuário.Caso esteja com dúvida pergunte sempre!
Abs!
Leandro de Agostini MCTS - Web Application, Framework 4
- Marcado como Resposta Filipe B CastroModerator quinta-feira, 2 de agosto de 2018 19:32
Todas as Respostas
-
Olá, a mensagem e erro está lhe informando que o número de campos que existe na sua tabela está diferente do número de parâmetros que você está passando. Ex: a sua tabela possui 3 campos (NOME, IDADE, SEXO) porém você está passando 2 ou 4 parâmentros, essa diferença gera essa mensagem. Meu conselho é você verificar quantas colunas de fato há na sua tabela e se a quantidade de parâmetros é a mesma.
Dica: ao invés de usar o tipo de campo na sua tabela IMAGE use VARBINARY (MAX), se você pesquisar é melhor usar este tipo, outra coisa eu aconselho você de fato não usar imagens convertidas salvas no banco, pois a tabela vai ficar muito "pesada", aconselho você salvar a imagem em uma pasta específica e no banco você armazenar o caminho onde esta imagem foi salva.Abs!
Leandro de Agostini MCTS - Web Application, Framework 4
-
Olá Leandro Obrigado pela observação! Realmente de fato estava eu estava passando mais de um parametro quando estava fazendo o Insert. minha tabela estava com 17 colunas e eu estava passando 18 foi um erro nao obervar! Mas consegui resolver.
Outro ponto que você citou é referente ao armazenamento das imagens, poderia me explicar melhor como funciona ou alguma referencia... é a minha primeira vez que to trabalhando com imagens para operações de Insert,Update,Delete....
desde de já agradeço!
-
Olá Lucas, desculpa a demora em responder, olha só o mais comum para salvar uma imagem que não seja pelo método de conversão binária usando o principio que as imagens serão salvas no servidor e não na máquina do cliente/usuário é usar esta lógica:
1. Após a escolha da imagem, deve-se copiar a imagem (usando a propriedade copy do objeto SAVEFILEDIALOG) para o caminho (de preferência pré-parametrizado em algum local do sistema) do servidor.
2. Após a montagem desse caminho com a imagem escolhida (geralmente monta-se uma string do tipo "C:\TEMP\IMG\Usuario01\teste.jpg" ) e esta string deve ser salva na tabela do campo, pois através desse caminho é que será possível recuperar a imagem escolhida pelo usuário.Caso esteja com dúvida pergunte sempre!
Abs!
Leandro de Agostini MCTS - Web Application, Framework 4
- Marcado como Resposta Filipe B CastroModerator quinta-feira, 2 de agosto de 2018 19:32
-
Boa tarde,
Por falta de retorno essa thread está encerrada.
Se necessário favor abrir uma nova thread.
Atenciosamente,Filipe B de Castro
Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita
MSDN Community Support
Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.