2015-11-07 3 views
-2
using System; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
using System.IO; 
using System.Data; 
using System.Data.SqlClient; 
using System.Configuration; 


public partial class _Default : System.Web.UI.Page 
{ 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      BindGrid(); 
     } 
    } 
    private void BindGrid() 
    { 
     string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString; 
     using (SqlConnection con = new SqlConnection(constr)) 
     { 
      using (SqlCommand cmd = new SqlCommand()) 
      { 
       cmd.CommandText = "select id, Name from FileControl"; 
       cmd.Connection = con; 
       con.Open(); 
       GridView1.DataSource = cmd.ExecuteReader(); 
       GridView1.DataBind(); 
       con.Close(); 
      } 
     } 
    } 
    protected void DownloadFile(object sender, EventArgs e) 
    { 
     int id = int.Parse((sender as LinkButton).CommandArgument); 
     byte[] bytes; 
     string fileName, contentType; 
     string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString; 
     using (SqlConnection con = new SqlConnection(constr)) 
     { 
      using (SqlCommand cmd = new SqlCommand()) 
      { 
       cmd.CommandText = "select Name, Data, ContentType from FileControl where [email protected]"; 
       cmd.Parameters.AddWithValue("@id", id); 
       cmd.Connection = con; 
       con.Open(); 
       using (SqlDataReader sdr = cmd.ExecuteReader()) 
       { 
        sdr.Read(); 
        bytes = (byte[])sdr["Data"]; 
        contentType = sdr["ContentType"].ToString(); 
        fileName = sdr["Name"].ToString(); 
       } 
       con.Close(); 
      } 
     } 
     Response.Clear(); 
     Response.Buffer = true; 
     Response.Charset = ""; 
     Response.Cache.SetCacheability(HttpCacheability.NoCache); 
     Response.ContentType = contentType; 
     Response.AppendHeader("Content-Disposition", "attachment; filename=" + fileName); 
     Response.BinaryWrite(bytes); 
     Response.Flush(); 
     Response.End(); 
    } 
    protected void View(object sender, EventArgs e) 
    { 
     int id = int.Parse((sender as LinkButton).CommandArgument); 
     string embed = "<object data=\"{0}{1}\" type=\"image/jpg\" width=\"500px\" height=\"300px\">"; 
     embed += "If you are unable to view file, you can download from <a href = \"{0}{1}&download=1\">here</a>"; 
     embed += " or download <a target = \"_blank\" href = \"http://get.adobe.com/reader/\">Adobe PDF Reader</a> to view the file."; 
     embed += "</object>"; 
     ltEmbed.Text = string.Format(embed, ResolveUrl("~/FileCS.ashx?Id="), id); 
    } 
    protected void DeleteFile(object sender, EventArgs e) 
    { 
     int id = int.Parse((sender as LinkButton).CommandArgument); 
     byte[] bytes; 
     string fileName, contentType; 
     string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString; 
     using (SqlConnection con = new SqlConnection(constr)) 
     { 
      using (SqlCommand cmd = new SqlCommand()) 
      { 
       cmd.CommandText = "Delete Name, Data, ContentType from FileControl where [email protected]"; 
       cmd.Parameters.AddWithValue("@id", id); 
       cmd.Connection = con; 
       con.Open(); 
       using (SqlDataReader sdr = cmd.ExecuteReader()) 
       { 
        sdr.Read(); 
        bytes = (byte[])sdr["Data"]; 
        contentType = sdr["ContentType"].ToString(); 
        fileName = sdr["Name"].ToString(); 
       } 

       con.Close(); 
      } 

     } 
    } 
    protected void Button1_Click(object sender, EventArgs e) 
    { 
     Response.Redirect("~/ProfileChange.aspx"); 
    } 
} 

Здесь функции просмотра и загрузки работают отлично. Мне нужно удалить загруженный файл. Проблема в том, что я не использую какую-либо папку для хранения файлов - я напрямую использую базу данных для хранения путей к файлам. Пожалуйста, помогите мне с исправлением функциональности удаления.Удалить загруженный файл в базе данных C#

+4

Вы не можете опубликовать кучу кода и сказать «исправить». В чем проблема? Что вы сделали, чтобы попытаться исправить это? – ernest

+0

AFAIK, TSQL 'Delete' не возвращает записи, поэтому вместо этого я использовал бы ExecuteNonQuery(). Кроме того, если вы не получаете каких-либо исключений, то проблема заключается не в том, как написана инструкция TSQL, но, скорее всего, значение параметра '@ id'. –

+1

Если вы хотите удалить файл в файловой системе, вам понадобится код, который фактически пытается удалить файл в файловой системе, а не только запись в базе данных, которая имеет путь к файлу в файловой системе. –

ответ

1

Метод DeleteFile имеет правильную команду SQL, чтобы удалить запись из таблицы FileControl по идентификатору.

Проблемы метода DeleteFile является то, что он копируется, вставил и переименовал версию метода DownloadFile и DownloadFile имеет запрос SQL, который возвращает данные, поэтому он может тайным в FileBlob или байты столбца FileControl.Data в файл с этим кодом:

using (SqlDataReader sdr = cmd.ExecuteReader()) 
      { 
       sdr.Read(); 
       bytes = (byte[])sdr["Data"]; 
       contentType = sdr["ContentType"].ToString(); 
       fileName = sdr["Name"].ToString(); 
      } 

у вас есть один и тот же код в DeleteFile но SQL оператор не будет возвращать никаких данных, при удалении записи в DeleteFile, и вы должны исправить этот код в DeleteFile с ExecuteNonQuery(), как @ErikPhilips заявил в комментарии

Смежные вопросы