.docxのファイルのC#を保存するためのMemoryStreamを使用しました
-
24-09-2019 - |
質問
私は(私はそれが正しく保存されないと思いますので、それは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
のコンストラクタを呼び出す勧めます。
所属していません StackOverflow