Wie fügen Sie eine Datei (PDF) in eine varbinary SQL-Spalte Server und später abrufen?

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

  •  22-07-2019
  •  | 
  •  

Frage

Ich bin auf der Suche, die Ergebnisse eines Bericht Lauf (eine PDF-Datei von Crystal Reports), serialisiert es, steckte sie in eine varbinary Feld zu nehmen, und dann später in der Lage sein, es deserialisieren und es zurück an den Benutzer darstellen.

Für den Moment muss ich einfach nur alte ADO .NET (SqlClient, SqlCommand usw.)

Gibt es irgendwelche Gefahren zu diesem? Was ist die grundlegende Syntax diese angesichts der Tatsache zu tun, dass ich den Weg auf der lokalen Maschine wissen würde, wo die PDF-Datei wurde zur Zeit gespeichert?

War es hilfreich?

Lösung

EDIT: gesehen Gerade in der MSDN-Dokumentation dass Bild wird entfernt werden . Bessere Nutzung Verwendung VARBINARY (MAX). (Hey, ich habe das nicht wissen).

MEIN ALTES ANTWORT: VARBINARY eine Grenze von 8 KB hat. Kann zu klein sein PDF-Dateien zu speichern. Sie würden besser den Bilddatentyp verwenden.

Verwenden Sie Parameter zum Einfügen / wählen Sie Ihre Daten über das SqlCommand, und Sie können einfach nur SQL wie ein ganz normales Feld.

Die Daten, die Sie in das Bildfeld passieren ist ein Array von Bytes.

Edit 2: Da Sie C # verwenden, sollten Sie die Daten abrufen einen Datareader verwenden. So erstellen Sie das Datareader die SequentialAccess Flagge auf der Verwendung SqlCommand.ExecuteReader , zu verhindern, dass zu früh, um die Daten in dem Speicher gelesen werden.

Andere Tipps

Ich würde wirklich überhaupt nicht einen byte[] Parameter zu einem IDbCommand verwenden. Was passiert, wenn Sie Ihre PDF-100 Mb groß? Soweit ich weiß, würde sich dies alle jene 100 Mb aus Ihrer Datenbank (diese Menge an Speicher auf dem Server benötigen), bevor das Ergebnis an den anfordernden Browser gesendet wird. Denken Sie jetzt an eine Anzahl von gleichzeitigen Anforderungen für verschiedene PDF-Dateien von etwa diese Größe bekommen ... pro Sekunde ... Das ist nicht sehr skalierbar.

Für eine mögliche Lösung, lesen Sie bitte "Blob + Strom = BlobStream" , ein Artikel, den ich für das .NET Magazine hier in den Niederlanden schrieb vor ein paar Jahren. Diese Methode verwendet SQL Server-Befehle Teile eines BLOB von einer Stream abgeleiteten Klasse.

Der Artikel ist auf Niederländisch, aber das Beispiel -Code, der mit ihm geht, sollte genug sein, um Ihnen den Start. Auch scheint Peter De Jonghe eine Artikel auf Codeproject geschrieben haben dass erweitert sie meinen Artikel ein bisschen, um es zu mehr als nur image Spalten in SQL Server zu verallgemeinern. Dieser Artikel ist auch in englischer Sprache.

Ich hoffe, das hilft Ihnen bei Ihrem Problem.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top