Come si inserisce un file (PDF) in una colonna varbinary di SQL Server e successivamente lo si recupera?

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

  •  22-07-2019
  •  | 
  •  

Domanda

Sto cercando di prendere i risultati di un'esecuzione di un rapporto (un file PDF di Crystal Reports), serializzarlo, inserirlo in un campo varbinary e poi essere in grado di deserializzarlo e presentarlo all'utente.

Per ora devo semplicemente aggiungere il vecchio ADO .NET (SqlClient, SqlCommand, ecc.)

Ci sono insidie ??in questo? Qual è la sintassi di base per realizzare questo dato che vorrei conoscere il percorso sul computer locale in cui il file PDF è stato attualmente salvato?

È stato utile?

Soluzione

EDIT: appena visto nella documentazione MSDN che l'immagine verrà rimossa . Meglio usare VARBINARY (MAX). (Ehi, non lo sapevo).

MY OLD ANSWER: VARBINARY ha un limite di 8 KB. Può essere troppo piccolo per archiviare i PDF. Faresti meglio a usare il tipo di dati IMMAGINE.

Usa i parametri per inserire / selezionare i tuoi dati tramite il comando Sql, e puoi usare solo il semplice SQL come qualsiasi altro campo.

I dati che passi nel campo immagine sono una matrice di byte.

Modifica 2: poiché stai usando C #, dovresti recuperare i dati usando un DataReader. Per creare il DataReader utilizzare il flag SequentialAccess su SqlCommand.ExecuteReader , per impedire che i dati vengano letti in memoria troppo presto.

Altri suggerimenti

Non userei affatto un parametro byte [] per un IDbCommand . Cosa succede se il tuo PDF ha una dimensione di 100 Mb? Per quanto ne so, questo otterrebbe tutti quei 100 Mb dal tuo database (che richiede quella quantità di memoria sul tuo server) prima di inviare il risultato al browser richiedente. Ora pensa a ottenere una serie di richieste simultanee per diversi PDF di circa queste dimensioni ... al secondo ... Non è molto scalabile.

Per una possibile soluzione, consulta " Blob + Stream = BlobStream " ; , un articolo che ho scritto per .NET Magazine qui in Olanda un paio di anni fa. Questo metodo utilizza i comandi di SQL Server per accedere a parti di un BLOB da un Stream classe derivata.

L'articolo è in olandese, ma il codice di esempio che ne deriva dovrebbe essere sufficiente per iniziare. Inoltre, sembra che Peter De Jonghe abbia scritto un su CodeProject che si espande su il mio articolo un po ', generalizzandolo a qualcosa di più delle semplici colonne image in SQL Server. Questo articolo è in inglese.

Spero che questo ti aiuti con il tuo problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top