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

Signaler
Messages postés
34
Date d'inscription
mardi 13 janvier 2004
Statut
Membre
Dernière intervention
30 août 2006
-
Messages postés
34
Date d'inscription
mardi 13 janvier 2004
Statut
Membre
Dernière intervention
30 août 2006
-
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

Messages postés
18
Date d'inscription
mardi 20 septembre 2005
Statut
Membre
Dernière intervention
3 mars 2009

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+
Messages postés
298
Date d'inscription
jeudi 12 juin 2003
Statut
Membre
Dernière intervention
9 juillet 2008
1
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?
Messages postés
34
Date d'inscription
mardi 13 janvier 2004
Statut
Membre
Dernière intervention
30 août 2006

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