none
fileUpload e tipo fileInfo RRS feed

  • Pergunta

  • Olá,

    Eu tenho um fileUpload no meu formulário e quero pegar o arquivo selecionado e atribuílo num parâmetro do tipo FileInfo, mas dá erro de tipos.

    Eu tenho uma tabela com um campo do tipo BLOB (Oracle) e preciso gravar direto na tabela o arquivo. não estou encontrando o tipo adequado para fazer a conversão e/ou atribuição necessária para gravar o arquivo enviado pelo usuário.

    Como eu viabilizo essa conversão para gravar na tabela o arquivo?

     

    Obrigado.

    quarta-feira, 10 de novembro de 2010 17:14

Respostas

Todas as Respostas

  • quarta-feira, 10 de novembro de 2010 18:11
    Moderador
  • Eu fiz o seguinte, recebi o arquivo e converti para um array de bytes (byte[]) e ele aceitou a conversão.

    mas quando eu jogo o parametro para a query e tento inserir no banco, dá o erro:

    ORA-01465: invalid hex number

    Eu tenho que converter o array para hexadecimal?

    quinta-feira, 11 de novembro de 2010 10:43
  • Posta o code
    quinta-feira, 11 de novembro de 2010 11:14
    Moderador
  • fulArquivo é o controle FileUpload.

    demanda é o objeto que vou enviar para inserir no banco.

    Arquivo é um parametro do tipo byte[];

    byte[] arquivoByte = fulArquivo.FileBytes;
    demanda.Arquivo = arquivoByte;
    

    aí eu uso o metodo para inserir o arquivo na tabela:

    repositorioBacklog.AtualizarBacklogCiclo(os, demanda);
    scriptLT.Text = "<script> alert('Demanda alterada com sucesso!'); </script>";
    

    depois eu passo para a query:

     public void AtualizarBacklogCiclo( byte[] demanda.Arquivo, int ID)
        {
          using (System.Data.OracleClient.OracleConnection conn = new System.Data.OracleClient.OracleConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
          {
            conn.Open();
            System.Data.OracleClient.OracleCommand comando = conn.CreateCommand();
            System.Data.OracleClient.OracleTransaction transaction;
    
            transaction = conn.BeginTransaction();
            comando.Connection = conn;
            comando.Transaction = transaction;
            try
            {
              comando.CommandText = "UPDATE tabela" +
                            " SET " +
                            "arq_file = '" + demanda.Arquivo + "'" +
                           " WHERE cod_tabela = " + ID + "";
              comando.ExecuteNonQuery();
    
    

    Acho que a questão é que no texto da query o parametro do tipo byte[] é exibido como 'System.Byte[]'. aí dá o erro. acho que o campo blob só aceita valor exadecimal... eu teria que pegar cada linha do array e concatenar numa coisa só?

    obrigado.

    quinta-feira, 11 de novembro de 2010 11:28
  • João,

    O arquivo deve ser transformado em ARRAY DE BYTE para ser gravado no banco de dados. Lembrando que, o banco fica muito pesado quando se coloca um arquivo dentro dele, será que não seria melhor colocar esse arquivo em uma pasta no servidor? Analise isso. Deixo um exemplo (um artigo) que transforma uma imagem em array de byte depois retorna ao normal.

    http://www.aspneti.com/Converte+Imagem+em+Array+e+Array+em+Imagem+830,0.aspx

    Espero ter ajudado.


    Espero ter ajudado. Se ajudei, favor marcar no fórum falando que foi útil.

    Mauricio Junior - Comunidade www.aspneti.com
    • Marcado como Resposta Ricardo OnedaModerator quinta-feira, 11 de novembro de 2010 15:31
    • Não Marcado como Resposta joaoluizbt quinta-feira, 11 de novembro de 2010 15:34
    quinta-feira, 11 de novembro de 2010 11:32
  • E ae, blz?

    Então... é o seguinte:

    eu quero que o usuario acrregue um arquivo na tela e o arquivo seja gravado na tabela. Eu sei que gravar numa pasta é muito melhor, mas a mula do analista quer que seja na tabela... agora... só para me esclarecer, é possível se gravar um arquivo na tabela, certo? ou o que fica gravado é só para se manipular no sistema e o arquivo continua numa pasta?

    de qualquer modo, eu consegui converter o arquivo em byte[] como nesse exemplo que vc me enviou, o problema é na hora de inserir.

    na query ele exibe " campo =  'System.Byte[]' " e dá o erro de

    ORA-01465: invalid hex number

    eu vi alguns artigos onde eles pegam o array e transformam em hexadecimal, mas não sei como se faz isso no c#...

    quinta-feira, 11 de novembro de 2010 11:45
  • consegui, só é possível inserir o array de bytes por parametro.

    // Step 4
    // Setting Oracle parameters
    
    // Bind the parameter as OracleDbType.Blob to command for inserting image
    OracleParameter param = comando.Parameters.Add("arquivoParaDB", OracleType.Blob);
    param.Direction = ParameterDirection.Input;
    
    // Assign Byte Array to Oracle Parameter
    param.Value = Arquivo;
    
    valeu pela atençao.
    • Marcado como Resposta joaoluizbt quinta-feira, 11 de novembro de 2010 15:25
    quinta-feira, 11 de novembro de 2010 15:25