Récupérer image (HugeBlob) dans une bd Oracle

Résolu
neo557 Messages postés 34 Date d'inscription mardi 13 janvier 2004 Statut Membre Dernière intervention 30 août 2006 - 27 févr. 2006 à 16:32
neo557 Messages postés 34 Date d'inscription mardi 13 janvier 2004 Statut Membre Dernière intervention 30 août 2006 - 8 mars 2006 à 15:37
Bonjour,

Mon problème est le suivant : je dois récupérer une image contenue dans une BD oracle sous le format HUGEBLOB.

J'ai tenté ceci :


m_db =
DatabaseFactory.CreateDatabase(
"MaDB");
m_connection = m_db.CreateConnection();
m_connection.Open();



DbCommand command = m_db.GetSqlStringCommand(
String.Format(
"SELECT Image1 FROM Table2 where Id = '{0}'", sref));
command.Connection = m_connection;



MemoryStream ms =
new
MemoryStream((
Byte[])command.ExecuteScalar());
ou
DbDataReader reader = command.ExecuteReader();

au moment d'Executer ma commande (dans les deux cas ci-dessus) j'obtiens un message d'erreur, le voici : Unspecified error Oracle error occurred, but error message could not be retrieved rom Oracle. Data type is not supported.


QQun peut-il m'aider ou me dire simplement que le fomat de mon image n'est pas accessible sous Visual Studio 2005... Merci d'avance.

3 réponses

crougni Messages postés 18 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 3 mars 2009
27 févr. 2006 à 23:44
Salut neo,



voici un chti bout de code que j'ai vu sur le site d'Oracle...

mais il faut utiliser le ODP.NET d'oracle !



using System;

using System.Data;

using Oracle.DataAccess.Client;

using Oracle.DataAccess.Types;

using System.IO;

using System.Text;









String block = " BEGIN " +


" SELECT
photo into :1 from testblob WHERE id = 100; " +

" END; ";





OracleCommand cmd = new OracleCommand();

cmd.CommandText = block;

cmd.Connection = con;

cmd.CommandType = CommandType.Text;



OracleParameter param1 = cmd.Parameters.Add("blobfromdb", OracleDbType.Blob);

param1.Direction = ParameterDirection.Output;



cmd.ExecuteNonQuery();



byte[] byteData = new byte[0];



byteData = (byte[])((OracleBlob)(cmd.Parameters[0].Value)).Value;



int ArraySize = new int();

ArraySize = byteData.GetUpperBound(0);



FileStream fs1 = new FileStream(@DestinationLoc,


FileMode.OpenOrCreate, FileAccess.Write);

fs1.Write(byteData, 0,ArraySize);

fs1.Close();



PS: pas pu tester j'ai pas Oracle...



et pis l'adresse de la source :

http://www.oracle.com/technology/sample_code/tech/windows/odpnet/howto/anonyblock/index.html

et le lien pour recup l'ODP .NET

http://www.oracle.com/technology/software/tech/windows/odpnet/utilsoft.html



A+
3
boumarsel Messages postés 298 Date d'inscription jeudi 12 juin 2003 Statut Membre Dernière intervention 9 juillet 2008 1
27 févr. 2006 à 17:32
cherche dans cette section de MSDN
http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/cpref/html/frlrfsystemdataoracleclient.asp

les types de données oracle de format lob que je connais (et que je trouve dans la documentation oracle) sont : blob, clob et nclob,
mais hugeblob...no idea, tu es certain que ça existe?
0
neo557 Messages postés 34 Date d'inscription mardi 13 janvier 2004 Statut Membre Dernière intervention 30 août 2006 1
8 mars 2006 à 15:37
Dsl de répondre si tard, mais j'avais switché sur un autre projet...

Alors en fait j'ai installé puis testé ces composants ODP.NET mais je n'arrivai pas à les faire marcher...

Je pensais au'il y a vait un manque ds l'exemple ci-dessus. Mais en fait le problème venais de mon application et du fait qu'elle était très mal construite.

Alors merci à crougni, à boumarsel aussi

Nelson
0
Rejoignez-nous