2011-11-21 92 views
0

我有一个小问题..我使用blob上传我的文件,我也可以下载它们,比如当他们是电影或mp3时,但是当我尝试下载照片时,我总是有这个例外...有人能告诉我为什么吗?System.Byte,上传图片

Unable to cast object of type 'System.DBNull' to type 'System.Byte[]'. 

Description: An unhandled exception occurred during the execution of the current 
web request. Please review the stack trace for more information about the error 
and where it originated in the code. 

Exception Details: System.InvalidCastException: Unable to cast object of type 
'System.DBNull' to type 'System.Byte[]'. 

Source Error: 

An unhandled exception was generated during the execution of the current web requt. 
Information regarding the origin and location of the exception can be identified using 
the exception stack trace below. 

谢谢你的帮助。

This is the code to retrieve them . 

     string filename = Request["file"].ToString(); 
     var conString = ConfigurationManager.ConnectionStrings["LocalSqlServer"]; 
     string strConnString = conString.ConnectionString; 
     SqlConnection dbConnection = new SqlConnection(strConnString); 
     dynamic queryString = ("SELECT Data,ContentType FROM Files WHERE Name = '" + filename + "'"); 
     SqlCommand theCommand = new SqlCommand(queryString, dbConnection); 
     dbConnection.Open(); 
     SqlDataReader reader = theCommand.ExecuteReader(); 

     if (reader.Read() && reader != null) 
     { 

      Byte[] bytes; 
      bytes = Encoding.UTF8.GetBytes(String.Empty); 
      bytes = (Byte[])reader["Data"]; 
          string contentType = reader["ContentType"].ToString(); 
      Response.ContentType = contentType; 
      Response.AddHeader("content-disposition", "attachment; filename=" + filename + ""); 
      Response.BinaryWrite(bytes); 
      reader.Close(); 
     } 

     dbConnection.Close(); 

以及上传他们:

dbConnection.Open(); 
         string queryString = "INSERT INTO Files (Name,Path,UserUpload,Date,Data,ContentType,Size) VALUES (@Name,@Path,@UserUpload,@Date,@Data,@ContentType,@Size);" + "SELECT CAST(scope_identity() AS int)"; 
         SqlCommand theCommand = new SqlCommand(queryString, dbConnection); 
         theCommand.Parameters.AddWithValue("@Name", FileUpload1.FileName); 
         theCommand.Parameters.AddWithValue("@Path", GetTheCurrentDirectory(MyTreeView.SelectedNode)); 
         theCommand.Parameters.AddWithValue("@UserUpload", Request.Cookies["UserSettings"]["UserName"]); 
         theCommand.Parameters.AddWithValue("@Date", DateTime.Now); 
         theCommand.Parameters.AddWithValue("@Data", FileUpload1.FileBytes); 
         theCommand.Parameters.AddWithValue("@ContentType", FileUpload1.PostedFile.ContentType); 
         theCommand.Parameters.AddWithValue("@Size", FileUpload1.PostedFile.ContentLength); 

         int newFid = (Int32)theCommand.ExecuteScalar(); 

         dynamic queryStringFolder = "INSERT INTO FILES_FOLDERS (File_Id,Folder_Id) VALUES (@FileId,@FolderId);"; 
         theCommand = new SqlCommand(queryStringFolder, dbConnection); 
         theCommand.Parameters.AddWithValue("@FileId", newFid); 
         theCommand.Parameters.AddWithValue("@FolderId", MyTreeView.SelectedValue); 
         theCommand.ExecuteNonQuery(); 

回答

1

这听起来像你正试图检索BLOB是NULL。如果这是预期条件,则在尝试转换为字节数组之前,您需要对DBNull进行检查。

+0

但是,这很奇怪,因为我的数据库,我可以看到字节.. =( – Kiwimoisi

+0

请提供您的方案的更多信息。你是如何从数据库中检索数据? –

+0

如果你把一个断点,你能看见从数据库中检索数据后,你的数据中的字节是否正确? – sq33G