2

ファイルはわずか 14kb (14,000 バイト) です。varbinary(max)列タイプ (私が使用しているもの) は 8,000 バイトしかサポートしていないことを読みました。あれは正しいですか?ファイルをデータベースにアップロードするにはどうすればよいですか?

if (file.ContentLength < (3 * 1048576))
{
    // extract only the fielname
    var fileName = Path.GetFileName(file.FileName);

    using (MemoryStream ms = new MemoryStream())
    {
        file.InputStream.CopyTo(ms);
        byte[] array = ms.GetBuffer();
        adj.resumeFile = array;
        adj.resumeFileContentType = file.ContentType;
    }
}

エラー:

文字列型やバイナリは省略されます。ステートメントは終了されました。

4

4 に答える 4

5

このプロセス中に挿入する他の列を確認してください。これは単なる画像やjpegではなく、 ContentType似たようなものになるため、特に列を確認します。image/jpeg

ContentType 列に十分なスペースを作成できるように、可能なコンテンツ タイプのリストを次に示します。

于 2013-05-09T19:28:36.857 に答える
1

これはあなたの質問に対する答えではないことはわかっていますが、 ms.GetBuffer() は、おそらくデータの正確なサイズではない基礎となるバッファーを取得します。MemoryStream は書き込み用の余分なスペースを割り当てます。おそらく、未使用のバッファから余分なバイトを挿入しています。ここでは、ファイルの長さが 5 バイトしかないにもかかわらず、GetBuffer() が 256 バイトの配列を返すことがわかります。

using (MemoryStream ms = new MemoryStream())
{
    using (FileStream fs = File.OpenRead("C:\\t\\hello.txt"))
    {
        fs.CopyTo(ms);
        byte[] results = ms.GetBuffer();
        Console.WriteLine("Size: {0}", results.Length); // 256
        byte[] justdata = new byte[ms.Length];
        Array.Copy(results, justdata, ms.Length);
        Console.WriteLine("Size: {0}", justdata.Length); // 5
    }
}
于 2013-05-09T23:35:06.637 に答える