ASP.NET - blob excel

 
Vista:

blob excel

Publicado por Esteban (3 intervenciones) el 29/04/2014 15:48:11
Hola alguien me puede ayudar con esto: tengo un store procedure que me genera el archivo.csv y se guarda en el servidor de base de datos, genera un archivo fisico, no se guarda en una tabla; se aloja fisicamente en el servidor.

el store es este

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
function from_file_funcion(dir in varchar2, file in varchar2) return blob is
    ret blob;
  begin
    dbms_lob.createTemporary(ret, true);
     from_file(dir, file, ret);
    return ret;
  end from_file_funcion;
 
  procedure from_file(dir in varchar2, file in varchar2, b in out blob) is
    input_file    utl_file.file_type;
    chunk_size    constant pls_integer := 4096;
    buf           raw                    (4096); -- Must be equal to chunk_size
    read_sofar    pls_integer := 0;              --(avoid PLS-00491: numeric literal required)
    bytes_to_read pls_integer;
  begin
 
    input_file := utl_file.fopen(dir, file, 'RB');
 
    begin loop
 
      utl_file.get_raw(input_file, buf, chunk_size);
      bytes_to_read := length(buf) / 2; -- strange and unexplanable!
      dbms_lob.write(b, bytes_to_read, read_sofar+1, buf);
      read_sofar := read_sofar + bytes_to_read;
 
    -- utl_file raises no_data_found when unable to read
    end loop; exception when no_data_found then null; end;
 
    utl_file.fclose(input_file);
 
  end from_file;
 
  procedure devuelve_funcion(dir in varchar2, file in varchar2, b in out blob)
  is
  begin
      b:= blob_wrapper.from_file_funcion('CSV_DIR','deve.csv');  
  end;
el store devuelve_funcion es el que me retorna un blob(que es el archivo fisico), el problema esta que desde .net no se como recibirlo al blob y que me lo levante con excel, esta es la parte de .net

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
OracleConnection conn = new OracleConnection("Data Source=bd; User Id=usr;Password=dir;");
                OracleCommand cmd = new OracleCommand();
                cmd.Connection = conn;
                cmd.CommandText = "blob_wrapper.devuelve_funcion";
                cmd.CommandType = CommandType.StoredProcedure;
 
                OracleParameter directorio = new OracleParameter("dir", OracleType.VarChar, 500);
                directorio.Direction = ParameterDirection.Input;
                directorio.Value = "CSV_DIR";
                cmd.Parameters.Add(directorio);
 
                OracleParameter file = new OracleParameter("file", OracleType.VarChar, 500);
                file.Direction = ParameterDirection.Input;
                file.Value = "dev.csv";
                cmd.Parameters.Add(file);
 
                OracleParameter inval = new OracleParameter("b", OracleType.Blob);
                inval.Direction = ParameterDirection.Input;
                inval.Value = null;
                cmd.Parameters.Add(inval);
 
                OracleParameter outval = new OracleParameter("b", OracleType.Blob);
                outval.Direction = ParameterDirection.Output;
                cmd.Parameters.Add(outval);
                conn.Open();
                cmd.ExecuteNonQuery();
                conn.Close();

alguien me puede dar una mano con esto.-

gracias...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

blob excel

Publicado por Khristian (335 intervenciones) el 30/04/2014 17:01:46
Y para que generas el archivo fisico..?

Por lo general, si guardas el archivo en la base de datos es porque no se requiere el archivo fisico, y viceversa.
Ahora, si hago las dos cosas, guardar el archivo en la base de datos y crear el archivo propiamente tal, es por seguridad, pero podria inducir a error. Imagina que creas el registro, ambos datos (bd y disco) tendrán el mismo archivo e informacion, pero si hay un proceso de modificación posterior, y por cualquier problema, solo se actualiza el registro de la base de datos y no el archivo en disco, podrias tener disconformidad en la información. La unicidad, te va a garantizar integridad en la informacion.

No se si podemos emplear la palabra "fisico" para representar al archivo en disco, pero bueno, sigamos.

cuando dices "el store devuelve_funcion es el que me retorna un blob(que es el archivo fisico)", me queda en duda el porque recibir el archivo en disco en binario, no seria mas ultil solo recibir la ruta del archivo y luego crear la ruta virtual.

Yo por ejemplo, hago eso, devuelvo la ruta del archivo. No es necesario recibir el binario de ese archivo, salvo que vayas a hacer un proceso de ese archivo, como podria ser en en caso de las imagenes como cuando se les pone marca de agua.

En todos los casos un csv es un archivo de texto plano, el cual hasta podrias leer con funciones de lectura de archivos, o si es desde la base de datos, asignando a un objeto string el blob.

string s = System.Text.Encoding.Unicode.GetString( blob);

Puedes usar tambien FileStream, etc.

Ve antes cual seria la opcion mas rapida y comoda de acceder al archivo y resuelve si es necesario recibir el archivo como blob o a traves de la ruta hacer lo que quieras con el archivo.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar