7

メモリストリームからデータベースにファイルをアップロードするのに問題があります(DBでは0xとして表示されるため、正しく保存されないと思います)。ストリームの作成に問題があるのか​​、ストリームからデータベースに保存するのに問題があるのか​​、別の方法で行う必要があるかどうかはわかりません。

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コードプレックスライブラリを使用しています。

4

1 に答える 1

7

ストリームに書き込んでいて、巻き戻さずにすぐにストリームから読み取ろうとしているので、読み取るデータがありません。

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

byte[] file = stream.ToArray();

ただし、別の潜在的な問題があります。

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

これにより、のサイズは500KMemoryStream固定されます。これ以上でもそれ以下でもありません。それはあなたが望んでいることではないと思います。storage変数を取り除き、パラメーターなしのMemoryStreamコンストラクターを呼び出すことをお勧めします。

于 2010-03-03T10:16:29.827 に答える