none
blob RRS feed

  • Question

  •  

    bonjour

    je souhaiterais avoir un exemple de recuperation d'un champ blob d'une base oracle

    pour l instant j ai cree une table de test contenant un id et un champ blob

    peut on utiliser un OracleDataReader , comment le faire

    merci par avance

    jeudi 6 septembre 2007 14:34

Réponses

  • Il suffit d'utiliser la méthode OracleDataReader.GetOracleLob()

    Celle-ci renvoi un objet OracleLob que vous pouvez lire par un BinaryReader par exemple...

     

    Cordialement

    jeudi 6 septembre 2007 15:03
    Modérateur

Toutes les réponses

  • Il suffit d'utiliser la méthode OracleDataReader.GetOracleLob()

    Celle-ci renvoi un objet OracleLob que vous pouvez lire par un BinaryReader par exemple...

     

    Cordialement

    jeudi 6 septembre 2007 15:03
    Modérateur
  •  

    merci pour la reponse,

    j'ai des difficultés avec l' objet OracleLob

    je ne sais pas vraiment comment l'inserer ce type d'objet dans la base, ni comment le convertir en BinaryReader ou  StreamReader

    vendredi 7 septembre 2007 09:38
  • j'ai creer des fonctions pr pouvoir passer dun blob a un binary reader mais ca ne fonctionne pas

    OracleLob n'a pas de constructeur comment faire merci par avance

     

    public static BinaryReader blob2BR(OracleLob ol) {

    BinaryReader br = null;

    byte[] buffer= new byte[100000];

    int offset=0;

    int tmp = 0;

    int count=10000;

    Stream input = null;

    if (ol.CanRead) {

    while((tmp=ol.Read(buffer,offset,count))!=0){

    offset = tmp;

    input.Write(buffer, offset, count);

    buffer = new byte[1000000];//vider le buffer?

    }

    }

    if (input != null)

    {

    br = new BinaryReader(input);

    }

    return br;

    }

    public static OracleLob BR2blob(BinaryReader br) {

    OracleLob ol = new OracleLob();

    byte[] buffer = new byte[100000];

    //byte b=new byte();

    int offset = 0;

    //int tmp = 0;

    int count = 10000;

    while ((offset=br.Read(buffer,offset,count))!=0) {

    ol.Write(buffer,offset,count);

    buffer = new byte[100000];

    }

    return ol;

    }

    vendredi 7 septembre 2007 13:53
  • Je ne sais pas ce que contient votre blob, mais pour lire uniquement des octets il suffit de faire :

     

    Code Snippet

    byte[] b;

    b = new byte[ol.Length];

    ol.Position = 0;

    ol.Read(b, 0, (int)ol);

     

    Où b est le tableau (et donc en mémoire) qui contient tout le contenu de votre blob...

    Après si vous souhaitez enregistrer ceci dans un fichier, le mieux est lire bloc par bloc de taille multiple de 512 et de l'écrire au fur et à mesure...

    Si votre blob contient un ensemble de données structurées Int32, Single, String, il faudra passer par BinaryReader. Dans ce cas précisez ce que vous voulez faire...

     

    Maintenant pour mettre un tableau d'octet (par exemple) dans un blob il faut passer par les OracleParameter de votre requête :

     

    Code Snippet

    OracleCommand c;

    OracleParameter p;

     

    c = new OracleCommand("UPDATE MaTable SET MonBlob = :Param");

     

    p = c.CreateParameter();

    p.ParameterName = "Param";

    p.Value = monTableau;

    p.OracleType = OracleType.Blob;

     

    c.ExecuteNonQuery();

     

     

    Cordialement

     

     

     

    vendredi 7 septembre 2007 16:53
    Modérateur