2009-08-31 22 views
0

自分のMS-SQLデータベースの画像フィールドにアップロードしたファイルをダウンロードしようとしています。問題は、ファイルを開こうとすると、実際のコンテンツを格納する代わりにSystem.Byte []と表示されるということです。データベースからファイルを読み取る

while (reader.Read()) 
        { 
         UploadFiles uf = new UploadFiles(); 
         uf.FileData = encoding.GetBytes(reader["filedata"].ToString()); 
         uf.FileName = reader["name"].ToString(); 
         uf.FileType = reader["filetype"].ToString(); 
         uf.FileId = Convert.ToInt32(reader["id"]); 
         return uf; 
        } 
+0

あなたのオブジェクトにバイナリデータが取得/保存されていることは確かですか?データベースからデータをどのように取得したかを表示できますか? – CSharpAtl

+0

検索と関連があったかもしれないと思いました...あなたは答えを得てうれしいです。 – CSharpAtl

答えて

2

uf.FileData = encoding.GetBytes(reader["filedata"].ToString()); 

(バイト配列が返さ

uf.FileData = (byte[])reader["filedata"]; 

データであっても、あなたはバイト配列、クラス名を返すことにだけはデフォルトでtoString()を呼び出す必要がありますシステム.byte []) - バイト配列に変換します。それはちょうどすぐにキャストする必要があります

+0

もちろん、フィールドがNULL値を持つことができる場合、DbNull.Valueとして返されるNULLを最初にチェックする必要があります。 – Pete

+0

ありがとうございました!ファイルを取得するときにエンコーディングになるとは考えていませんでした。 データベースフィールドではnull型が許可されていないため、この場合は必要ありません。 – Dofs

-1

は(uf.FileName.ToStringを試してみてください):ここで私は私のデータベースからデータを取得

UploadFilesファイル名が含まれている私のクラスで、ID、FILEDATAなど

public void DownloadUploadedFile(Page sender, UploadFiles uf) 
{ 
    sender.Response.Clear(); 
    sender.Response.ContentType = uf.FileType; 
    sender.Response.AddHeader("Content-Disposition", 
     "attachment; filename=" + uf.FileName); 
    sender.Response.BinaryWrite(uf.FileData); // the binary data 
    sender.Response.End(); 
} 

、それ以外の場合は、FileNameプロパティのテキストではなくオブジェクトタイプを取得しています。

+0

uf.FileNameは、ファイル名を含むクラスのプロパティです。私はそれをデバッグし、test.txtを返します。また、私はUploadFilesは、ASPのファイルコントロールをアップロードするとは何の関係もないが、プロパティを含む自分のクラスです。 – Dofs

関連する問題