Question

J'ai quelques problèmes à télécharger le fichier de flux mémoire dans la base de données (il est visible dans DB 0x donc je suppose qu'il ne soit pas enregistrée correctement). Je ne suis pas sûr que ce soit un problème avec Stream en cours de création ou d'enregistrer db de flux devrait être fait différemment.

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();
        }
    }

Qu'est-ce que je fais mal? J'utilise la bibliothèque de CodePlex docx.

Était-ce utile?

La solution

Vous écrivez au courant, puis immédiatement essayer de lire ce sans rebobinage ... donc il n'y a pas de données à lire.

Heureusement, il y a un moyen très facile de simplifier le code de toute façon:

byte[] file = stream.ToArray();

Cependant, vous avez un autre problème potentiel:

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

Cela rendra le MemoryStream ont une fixe taille de 500K - pas plus, pas moins. Je soupçonne que ce n'est pas ce que vous voulez; Je vous suggère de se débarrasser de la variable storage et juste appeler le constructeur MemoryStream parameterless.

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