C sharp - Escribr archivo en Campo Blob

 
Vista:
sin imagen de perfil

Escribr archivo en Campo Blob

Publicado por Leonardo Josué (25 intervenciones) el 17/09/2007 15:35:25
Buenos Días:

Estoy tratanto de subir algunos archivos a una tabla en Oracle que contiene un campo Tipo BLOB utilizando C#.

El procedimiento que estoy utilizando para subir los archivos lo encontré referenciado en la siguiente página:

http://support.microsoft.com/kb/309158/es

y lo que hago es lo siguiente:

SqlConnection con = new SqlConnection("Server=Darkover;uid=<username>;pwd=<strong password>;database=northwind");
SqlDataAdapter da = new SqlDataAdapter("Select * From MyImages", con);
SqlCommandBuilder MyCB = new SqlCommandBuilder(da);
DataSet ds = new DataSet("MyImages");

da.MissingSchemaAction = MissingSchemaAction.AddWithKey;
FileStream fs = new FileStream(@"C:\winnt\Gone Fishing.BMP", FileMode.OpenOrCreate, FileAccess.Read);

byte[] MyData= new byte[fs.Length];
fs.Read(MyData, 0, System.Convert.ToInt32(fs.Length));

fs.Close();

da.Fill(ds,"MyImages");

DataRow myRow;
myRow=ds.Tables["MyImages"].NewRow();

myRow["Description"] = "This would be description text";
myRow["imgField"] = MyData;
ds.Tables["MyImages"].Rows.Add(myRow);
da.Update(ds, "MyImages");

con.Close();

Hasta ahora no había tenido problemas, pero recientemente me solicitaron subir a la tabla un video que tiene un tamaño de casi 1 Gb, por lo que este procedimiento me manda un error de desbordamiento de memoria.

Mi pregunta es si alguien de ustedes sabe cómo puedo escribir archivos bastante grandes a un campo Blob (recordando que el campo Blob puede almacenar hasta 4 Gb de información binaria) .

Saludos y espero que me puedan ayudar.

Leo
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

RE:Escribr archivo en Campo Blob

Publicado por Carlos García (3 intervenciones) el 21/09/2007 15:07:07
Adapta este código a C#, creo que te servirá: (No enuentro la version en C#)
Private Function SetData(ByVal ao_cmd As SqlClient.SqlCommand) As Boolean
Dim lo_ms As MemoryStream = New MemoryStream
Dim lo_formato As ImageFormat
lo_formato = io_IMAGEN.RawFormat
io_IMAGEN.Save(lo_ms, ImageFormat.Png)
Dim lo_DatosBlob(lo_ms.Length - 1) As Byte
lo_ms.Position = 0
lo_ms.Read(lo_DatosBlob, 0, lo_ms.Length)
ao_cmd.Parameters("@IMAGEN").Size = lo_DatosBlob.Length
lo_ms.Close()
If Not IsNothing(ao_cmd) Then
If il_IDIMAGEN > 0 Then
ao_cmd.Parameters("@ID_IMAGEN").Value = il_IDIMAGEN
Else
If il_IDIMAGEN <> -1 Then
ao_cmd.Parameters("@ID_IMAGEN").Value = DBNull.Value
End If
End If
If Not IsNothing(io_IMAGEN) Then
ao_cmd.Parameters("@IMAGEN").Value = lo_DatosBlob
Else
ao_cmd.Parameters("@IMAGEN").Value = DBNull.Value
End If
If is_NombreImagen.Length > 0 Then
ao_cmd.Parameters("@NombreImagen").Value = is_NombreImagen
Else
ao_cmd.Parameters("@NombreImagen").Value = DBNull.Value
End If
SetData = True
End If
End Function
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
sin imagen de perfil

RE:Escribr archivo en Campo Blob

Publicado por leonardo (25 intervenciones) el 24/09/2007 17:44:16
Gracias por contestar Carlos, pero sigo teniendo el mismo problema...

El error viene al tratar de hacer la instrucción
Dim lo_DatosBlob(lo_ms.Length - 1) As Byte,
o en el caso de c#
var byte[] MyData= new byte[fs.Length];

en este caso se genera un arreglo dinámico de bytes donde la longitud del arreglo corresponde al tamaño del archivo... cuando se trata de archivos pequeños no hay problemas (yo he tratado con archivos de hasta 200 Megas), pero cuando probé el archivo enorme (de casi 900 Megas) me manda un error de desbordamiento de memoria...

De cualquier manera muchas gracias por contestar

Saludos
Leo
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