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

Messages postés
34
Date d'inscription
mardi 13 janvier 2004
Dernière intervention
30 août 2006
- - Dernière réponse : neo557
Messages postés
34
Date d'inscription
mardi 13 janvier 2004
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.
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
18
Date d'inscription
mardi 20 septembre 2005
Dernière intervention
3 mars 2009
3
Merci
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+

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 86 internautes nous ont dit merci ce mois-ci

Commenter la réponse de crougni
Messages postés
300
Date d'inscription
jeudi 12 juin 2003
Dernière intervention
9 juillet 2008
1
0
Merci
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?
Commenter la réponse de boumarsel
Messages postés
34
Date d'inscription
mardi 13 janvier 2004
Dernière intervention
30 août 2006
0
Merci
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
Commenter la réponse de neo557

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.