質問

私は(私はそれが正しく保存されないと思いますので、それは0XとしてDBに見えます)データベースにメモリストリームからファイルをアップロードするためにいくつかのトラブルをしました。私は確かにそれが作成またはストリームからDBに保存されているストリームに問題が異なって行われるべきであるのかどうかではないと思います。

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

私が間違って何をしているのですか?私は、DOCX CodePlexのライブラリを使用しています。

役に立ちましたか?

解決

あなたのストリームにしている書き込み、その後、すぐにの...ので、読むためにはデータがありません。

巻き戻しをせずに、それからを読み取ろうとします

幸い、とにかくコードを簡素化する非常に簡単な方法があります:

byte[] file = stream.ToArray();

しかし、あなたは別の潜在的な問題を持ってます:

byte[] storage = new byte[500000];
using (MemoryStream stream = new MemoryStream(storage))
...
劣らず、これ以上 -

このはMemoryStreamは500Kのの固定の大きさがあることを確認してくださいません。私はそれはあなたが望むものではありません疑います。私はあなたがstorage変数を取り除くだけパラメータのないMemoryStreamのコンストラクタを呼び出す勧めます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top