Comment insérer un fichier (PDF) dans une colonne varbinary SQL Server et le récupérer ultérieurement?

StackOverflow https://stackoverflow.com/questions/443635

  •  22-07-2019
  •  | 
  •  

Question

Je souhaite prendre les résultats d'un rapport (fichier PDF de Crystal Reports), le sérialiser, le coller dans un champ varbinary, puis pouvoir le désérialiser plus tard et le présenter à l'utilisateur.

Pour le moment, je dois tout simplement utiliser le vieil ADO .NET (SqlClient, SqlCommand, etc.)

Y a-t-il des pièges à cela? Quelle est la syntaxe de base pour y parvenir compte tenu du fait que je saurais le chemin sur la machine locale où le fichier PDF est actuellement enregistré?

Était-ce utile?

La solution

MODIFIER: dans la documentation MSDN cette image va être supprimée . Mieux vaut utiliser VARBINARY (MAX). (Hey, je ne le savais pas).

MA VIEILLE RÉPONSE: VARBINARY a une limite de 8 Ko. Peut être trop petit pour stocker des PDF. Vous feriez mieux d'utiliser le type de données IMAGE.

Utilisez des paramètres pour insérer / sélectionner vos données via la commande SqlCommand. Vous pouvez utiliser du code SQL simple comme n'importe quel champ ordinaire.

Les données que vous transmettez dans le champ d'image sont un tableau d'octets.

Éditer 2: Puisque vous utilisez C #, vous devriez récupérer les données en utilisant un DataReader. Pour créer le lecteur de données, utilisez l'indicateur SequentialAccess sur le SqlCommand.ExecuteReader . pour éviter que les données ne soient lues trop tôt dans la mémoire.

Autres conseils

Je ne voudrais vraiment pas utiliser un paramètre octet [] pour un IDbCommand . Que faire si votre PDF fait 100 Mo? Autant que je sache, tous ces 100 Mo de votre base de données (nécessitant une telle mémoire sur votre serveur) seraient récupérés avant l'envoi du résultat au navigateur demandeur. Pensez maintenant à recevoir plusieurs demandes simultanées pour différents PDF de cette taille environ ... par seconde ... Cela n’est pas très évolutif.

Pour une solution éventuelle, consultez la page & Blob + Stream = BlobStream ". ; , un article que j'ai écrit pour le magazine .NET ici aux Pays-Bas il y a quelques années. Cette méthode utilise des commandes SQL Server pour accéder à des parties d'un BLOB à partir d'un flux classe dérivée.

L'article est en néerlandais, mais l'exemple de code qui va avec devrait suffire à vous aider à démarrer. Peter De Jonghe semble également avoir écrit un article sur CodeProject qui s'étend plus loin. mon article un peu, généralisant à plus de colonnes image dans SQL Server. Cet article est en anglais.

J'espère que cela vous aide à résoudre votre problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top