[c#] Binary Data van MSSQL --> Object

Pagina: 1
Acties:

  • Facer
  • Registratie: Januari 2002
  • Niet online

Facer

Ken net.....

Topicstarter
Bezig met een project om FingerPrint reader software updaten. Hiervoor maak ik geen gebruik meer van een OleDbDataReader maar van de mogelijkheden die VS.NET 2005 bied aan TableSet en TableAdapters.

Helaas is de functie (GetBytes) die de byte's vanaf de database terugbrengt naar een object niet beschikbaar bij TableAdapters / Row.

Het opslaan van het Object in de database ziet er als volgt uit:
C#:
1
2
3
4
5
6
7
8
      /** Object omzetten naar Byte */
      System.Byte[] temp = new System.Byte[tpt._size + 1];
      System.Array.Copy(tpt._tpt, 0, temp, 0, tpt._size);

      try
      {
        fingerPrintAdapter.Insert(person.PersonID, flcID, temp);
      ..............

Dit werkt zonder problemen (Dit weet ik pas 100% zeker als ik de data kan terughalen)

Orginele code om de Byte uit de database weer op te zetten in het Object:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    public TTemplate getTemplate(OleDbDataReader rs)
    {
        long readedBytes; 
        tptBlob._size = 0;
        // alloc space
        System.Byte[] temp = new System.Byte[
            (int)GRConstants.GR_MAX_SIZE_TEMPLATE];
        // get bytes
        readedBytes = rs.GetBytes(1, 0, temp, 0,temp.Length);
        // copy to structure
        System.Array.Copy(temp, 0, tptBlob._tpt,0,(int)readedBytes);
        // set real size
        tptBlob._size = (int)readedBytes;

        return tptBlob;
    }

Helaas is deze code gemaakt om te gebruiken met een OleDbDataReader. Zelf maak ik nu gebruik van de TableSet en TableAdapter. Deze laat ik dan weer de data uitlezen met:
C#:
1
2
3
      foreach (FlexAccessDataSet.module_fingerprintRow fingerPrintRow in fingerPrintData)
      {
      }

De foreach heb ik getest en die geeft de juiste data weer. Hierdoor loop ik vast op de oude code. Google heeft me niet de juiste informatie kunnen verschaffen om tot de oplossing te komen.

Kortom: Hoe kan ik ervoor zorgen dat de byte's uit de database weer terug woorden gezet naar een Object?

  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Kijk eens naar Serialization en ook hier en hier (KB). En natuurlijk ook het Serializable attribute in de API documentatie.

Nu met Land Rover Series 3 en Defender 90


  • Facer
  • Registratie: Januari 2002
  • Niet online

Facer

Ken net.....

Topicstarter
MTWZZ schreef op vrijdag 10 november 2006 @ 08:34:
Kijk eens naar Serialization en ook hier en hier (KB). En natuurlijk ook het Serializable attribute in de API documentatie.
Thnx met: using System.Runtime.Serialization.Formatters.Binary; gaat het zeker weten lukken.
Bedankt voor je hulp


Voor het archief:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private byte[] SerializeObject(object obj)
{
    MemoryStream ms = new MemoryStream();
    BinaryFormatter bf = new BinaryFormatter();
    bf.Serialize(ms, obj);
    ms.Seek(0, SeekOrigin.Begin);
    return ms.ToArray();
}

private object DeserializeObject(byte[] buffer)
{
    MemoryStream ms = new MemoryStream();
    ms.Write(buffer, 0, buffer.Length);
    ms.Seek(0, SeekOrigin.Begin);

    BinaryFormatter bf = new BinaryFormatter();
    return bf.Deserialize(ms);
}

Bron: http://radcom.ir/weblog/Majid/archive/2006/09/23/36960.aspx

[ Voor 39% gewijzigd door Facer op 11-11-2006 17:20 ]