2009-06-17 2 views
1

J'ai un fichier binaire qui stocke dans la colonne customerPicture qui a Image comme type de données dans la table CUSTOMERs. J'ai enregistré une image en utilisant cette ligne de code dans LINQ to SQL.Comment faire pour récupérer une image à partir de MS SQL Server pour lier dans Gridview ASP.NET en utilisant LINQ to SQL?

Dim db = new MyCompanyDataContext 
Dim newCus = new CUSTOMERs 
Dim filebyte As Byte() = fileUploader.FileBytes 
Dim fileBinary As New System.Data.Linq.Binary(filebyte) 
newCus.customerPicture = fileBinary 

Alors maintenant, je veux récupérer ce fichier binaire pour lier dans le GridView dans ASP.NET en utilisant LINQ to SQL, mais je ne sais pas comment. Pouvez-vous s'il vous plaît me montrer quelques façons d'atteindre la solution?

Répondre

0

Essayez ceci:

dim ms as new MemoryStream 
ms.Write(fileBinary.ToArray(),0,fileBinary.Length) 

dim img as Image 
img = Image.FromStream(ms) 

newCus.customerPicture = img 
2

vous pouvez utiliser HTTPHandler retrive les images de la base de données.

  <ItemTemplate> 
       <asp:Image ID="imgPhoto" runat="server"/> 
      </ItemTemplate> 

Si vous avez une image en tant que ItemTemplate dans la grille de données.

Dans l'événement ItemDataBound de la grille de données, appelez le "HttpHandler" pour afficher l'image. Dans le code ci-dessous, je trouve le contrôle de l'image et assigne imageUrl comme chemin de fichier HttpHandler.Je passe également l'ID comme querystring à le fichier HttpHandlerFile.

 System.Web.UI.WebControls.Image photoImage = (System.Web.UI.WebControls.Image)e.Item.FindControl("imgPhoto"); 
     photoImage.ImageUrl = "ImageHandler.ashx?PhotoID=" + id.ToString(); 

Et dans le fichier HttpHandler utiliser LINQ retrive l'image et l'afficher. Comme ce fichier HttpHandler

public void ProcessRequest (HttpContext context)
{
context.Response.ContentType = "image/jpeg";

int photoId = -1; 
    //Check the query string. 
    if (context.Request.QueryString["PhotoId"] != null && context.Request.QueryString["PhotoId"] != "") 
    { 
     photoId = Convert.ToInt32(context.Request.QueryString["PhotoID"]); 
    } 

    if (photoId != -1) 
    { 
     MovieDataContext db = new MovieDataContext(); 
     //Get the movie record based on the ID 
     MovieTable movie = db.MovieTables.First(m => m.ID == photoId); 

     System.Data.Linq.Binary fileBinary = movie.Photo; 
     byte[] fileByte = fileBinary.ToArray(); 
     //displays the Image. 
     context.Response.BinaryWrite(fileByte); 
    } 
} 

est mis en correspondance avec le imageURL dans le DataGrid, vous pouvez voir les images affichées dans la grille de données.

Questions connexes