2009-05-13 3 views
2

Je développe une application ASP.NET (C#) qui se connecte à SQL Server 2008 à l'aide de l'infrastructure d'entité ADO.NET.Comment puis-je insérer un fichier dans SQL Server à l'aide d'ASP.Net?

L'utilisateur de cette application peut sélectionner une image de son disque dur local à insérer dans SQL Server. Comment puis-je faire ceci?

Je sais comment stocker l'image dans SQL Server mais je ne sais pas comment télécharger l'image sur le serveur (en utilisant le contrôle de serveur FileUpload?).

Merci!

Répondre

3

Eh bien, pour télécharger sur le serveur Web, vous avez juste besoin d'un <input type="file" .../>. À ASP.NET, cela devrait être disponible dans la collection Request.Files.

Dans SQL Server, vous voulez un varbinary(max) (ou image dans les versions antérieures).

La grande question avant de les pousser dans SQL Server est: quelle est leur taille? Si elles ne sont pas massives, vous pouvez les traiter comme byte[]; juste tampon à partir du InputStream et envoyer. Voici une façon assez générique de mise en mémoire tampon un Stream à un seul byte[]:

 byte[] buffer = new byte[1024]; 
     int bytesRead; 
     MemoryStream ms = new MemoryStream(); 
     while ((bytesRead = inputStream.Read(buffer, 0, buffer.Length)) > 0) 
     { 
      ms.Write(buffer, 0, bytesRead); 
     } 
     byte[] data = ms.ToArray(); 

Pour les fichiers massifs (qui peut-être ne font pas partie du db sauf si vous utilisez les extensions FILESTREAM SQL 2008), vous voulez le morceau. Here's an old reply J'ai utilisé pour le découpage (avant SQL 2005) - mais il montre l'idée globale.

+0

Salut Marc, j'utilise le type 'image' dans SQL05 pour mon application mais je ne savais pas que ce n'était pas le type préféré. Pourquoi 'varbinary (max)' est-il plus approprié? –

+0

Voir: http://msdn.microsoft.com/fr-fr/library/ms187993(SQL.90).aspx –

Questions connexes