2009-12-01 5 views
1

Le type de données d'image est-il converti en tableau d'octets dans sybase? J'applique un service Web pour obtenir des données dans sybase (type de données d'image). J'utilise byte [] pour obtenir le retour du service Web. Puis j'utilise le "response.binarywrite (byte [])" pour montrer l'image. (ASP.NET C#) Mais il y a un problème de distorsion d'image (quand i zoon dans l'image, certains points sont manqués). Je ne sais pas pourquoi Est-ce que quelqu'un sait que le type de données d'image dans sybase peut être transféré dans un tableau d'octets?A propos de l'image Sybase

Original Image

Distortion Image

Système:

1 Sybase

Sybase db: 11.9.2 

    Adaptive server enterprise 12.5.1 

    Sybase.Data.AseClient:1.0.152.0 

2 ASP.NET C# (Visual Studio 2008)

3 IE6

Répondre

3

Enfin, je trouve l'anwser. La raison de ce problème est la limitation de l'accès à la taille de l'image dans Sybase. Lorsque la taille de l'image est supérieure à 37k octets, la sortie est toujours 37K. Par conséquent, je manque un peu d'octet dans cette étape. La solution est que vous devez définir le paramètre pour récupérer toutes les données. Les codes partiels sont montré comme ci-dessous:

[WebMethod] 
    public byte[] Image(string c, string r) 
    { 
     //check input .. 
     ConnectionDatabase connbaseloc = new ConnectionDatabase(); 
     AseConnection conn1 = null; 
     AseCommand cmd1 = null; 
     string sqlstr1 = ""; 
     AseDataReader reader = null; 
     byte[] Imagebytes = null; 
     try 
     { 
      using (conn1 = connbaseloc.Odbcconn_xxx()) 
      { 
       string setTextCmd = " SET TEXTSIZE 130000"; //set parameter 
       cmd1 = new AseCommand(setTextCmd, conn1); 
       cmd1.ExecuteNonQuery(); 
       sqlstr1 = "select ...."; 
       cmd1 = new AseCommand(sqlstr1, conn1); 
       cmd1.CommandText = sqlstr1; 
       reader = cmd1.ExecuteReader(); 
       while (reader.Read()) 
       { 
        Imagebytes = (byte[])reader["Image"]; 
       } 
      } 
     } 
     catch (Exception e) 
     { 
      //do something 
     } 
     finally 
     { 
      if (conn1 != null) conn1.Close(); 
     } 

     return Imagebytes; 
    } 

La valeur du paramètre dépend de votre taille maximale des images.