Frage

Ich habe einige Probleme Datei Datenbank von Speicher-Stream zu laden (es ist sichtbar in DB als 0x so dass ich denke, es wird nicht richtig gespeichert werden). Ich bin nicht sicher, ob es ein Problem mit Stream wird aus dem Strom zu db erstellt oder speichern sollte anders gemacht werden.

private void test {
        byte[] storage = new byte[500000];
        using (MemoryStream stream = new MemoryStream(storage))
        DocX documentWord = DocX.Create(stream);
        // some stuff
        documentWord.Save(); 
        databaseFilePut(stream);
}


public static void databaseFilePut(MemoryStream stream) {
        byte[] file;
        using (var reader = new BinaryReader(stream)) {
                file = reader.ReadBytes((int) stream.Length);
               // reader.Close();
        }
            //stream.Close();
        //}
        using (var varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetailsDZP))
        using (var sqlWrite = new SqlCommand("INSERT INTO Raporty (RaportPlik) Values(@File)", varConnection)) {
            sqlWrite.Parameters.Add("@File", SqlDbType.VarBinary, file.Length).Value = file;
            sqlWrite.ExecuteNonQuery();
        }
    }

Was mache ich falsch? Ich verwende Docx codeplex Bibliothek.

War es hilfreich?

Lösung

Sie schreibt in den Stream und dann sofort versuchen, daraus zu lesen, ohne Zurückspulen ... so gibt es keine Daten zu lesen.

Zum Glück gibt es eine sehr einfache Möglichkeit, den Code trotzdem zu vereinfachen:

byte[] file = stream.ToArray();

Allerdings haben Sie ein anderes potenzielles Problem bekommen:

byte[] storage = new byte[500000];
using (MemoryStream stream = new MemoryStream(storage))
...

Dies wird der MemoryStream macht eine fixed Größe von 500K - nicht mehr, nicht weniger. Ich vermute, das ist nicht das, was Sie wollen; Ich schlage vor, Sie loszuwerden, die storage Variable und rufen Sie die parameterlos MemoryStream Konstruktor.

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