none
Upload de imagem usando PictureBox - windows forms RRS feed

  • 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 metodo
    void 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!

    terça-feira, 3 de julho de 2018 12:49

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

    quarta-feira, 4 de julho de 2018 15:01

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

    terça-feira, 3 de julho de 2018 13:27
  • 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!

    terça-feira, 3 de julho de 2018 16:01
  • 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

    quarta-feira, 4 de julho de 2018 15:01
  • 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.

    quinta-feira, 2 de agosto de 2018 19:42
    Moderador