2009-07-08 7 views
3

私はデータベースにファイルを格納しています。これは私が使用しているコードであり、データを追加する際に機能します。どうやってやるの?SQLDatabaseからvarbinaryデータフィールドを取得

string filename = FileUploader.PostedFile.FileName; 
    string filecontent = FileUploader.PostedFile.ContentType; 
    int filesize = FileUploader.PostedFile.ContentLength; 

    string filepath = System.IO.Path.GetFileName(filename); 


    FileUploader.PostedFile.SaveAs("c:\\try\\" + filepath); 

    byte[] fileData = new byte[FileUploader.PostedFile.ContentLength]; 
    FileUploader.PostedFile.InputStream.Read(fileData, 0, fileData.Length); 
    string originalName = Path.GetFileName(FileUploader.PostedFile.FileName); 


    con.ConnectionString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["FAQ"].ToString(); 

    con.Open(); 

    using (SqlCommand cmd = new SqlCommand("INSERT INTO Files(FileData) VALUES (@binaryValue)", con)) 
    { 
     // Replace 8000, below, with the correct size of the field 
     cmd.Parameters.Add("@binaryValue", SqlDbType.VarBinary, fileData.Length).Value = fileData; 
     cmd.ExecuteNonQuery(); 
     con.Close(); 
    } 

答えて

9

あなたはそうのように、ファイルを作成するために、値、およびBinaryWriterを取得するためにSqlDataReaderを使用することができます。

//Database connection code... 
cmd.CommandText = "SELECT FileData FROM Files WHERE ID = @ID"; 
cmd.Parameters.Add("@ID", SqlDbType.Int).Value = 1234; 
SqlDataReader sqlRead = cmd.ExecuteReader(); 

string fileName = "file.txt"; 
string fileDir = "C:\\Test\\"; 
string fileUrl = "/"; 

if (sqlRead.HasRows) 
{ 
    while(sqlRead.Read()) 
    { 
     byte[] fileData = (byte[]) sqlRead[0].Value; 
     BinaryWriter fileCreate = 
      new BinaryWriter(File.Open(fileDir + fileName, FileMode.Create)); 
     fileCreate.Write(fileData); 
     fileCreate.Close(); 
     HttpResponse.Redirect(fileUrl + fileName); 
    } 
} 

sqlRead.Close(); 
+0

感謝の男。私は質問に何かを追加した場合は心配しないでください。 この日付をファイルに入れてこのファイルをダウンロードするにはどうすればよいですか?前もって感謝します。 –

+2

行byte []に​​エラーがあります。fileData =(byte [])sqlRead [0] .Value; SqlDataReaderには、呼び出す「値」メソッドがありません! –

+0

fileCreate.Write(fileDate)はfileCreate.Write(fileData)である必要があります。 – DrLazer

関連する問題