简体   繁体   中英

System.Byte , Upload picture

I have a little question .. I am using blob to upload my files and I can download them too when they are movies or mp3 for example, but when I try to download a photo i always have this exception ... Can someone tell me why ?

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.

Thank you for helping.

    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();

And to upload them :

   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();

It sounds like the blob you are attempting to retrieve is NULL. If this is an expected condition, you'll need to place a check for DBNull before you attempt to cast to a byte array.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM