Adityakumar2318 Ответов: 2

Как удалить изображение из папки приложения и удалить имя файла (имя изображения) из базы данных?


namespace CrudOperationOutside
{
    public partial class StudentRegistration : System.Web.UI.Page
    {
        static string CS = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
        SqlConnection con = new SqlConnection(CS);
        SqlCommand cmd;
        SqlDataAdapter da;
        DataSet ds;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                bindQualification();
                BindGender();
                bindHobbies();
                bindGrid();
                Clear();

            }
        }

        protected void btnSave_Click(object sender, EventArgs e)
        {
            string HOB = "";

            for (int i = 0; i < cblHobbies.Items.Count; i++)
            {
                if (cblHobbies.Items[i].Selected == true)
                {
                    HOB += cblHobbies.Items[i].Text + ",";
                }
            }
            HOB = HOB.TrimEnd(',');

            // Get file name from file upload control.
            string FN = Path.GetFileName(fuStudentImage.PostedFile.FileName);

            if (btnSave.Text == "Save")
            {
                // Save images to Application images folder
                fuStudentImage.SaveAs(Server.MapPath("StudentImages" + "\\" + FN));

                SqlCommand cmd = new SqlCommand("sp_Student_Insert", con);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@SName", txtName.Text);
                cmd.Parameters.AddWithValue("@SAge", txtAge.Text);
                cmd.Parameters.AddWithValue("@GID", rblGender.SelectedValue);
                cmd.Parameters.AddWithValue("@QID", ddlQualification.SelectedValue);
                cmd.Parameters.AddWithValue("@Hobbies", HOB);
                cmd.Parameters.AddWithValue("@SFileName", FN);
                con.Open();
                int Total = cmd.ExecuteNonQuery();
                if (Total > 0)
                {
                    lblMessage.Text = "Record is saved successfully";
                }
                con.Close();
                bindGrid();
                Clear();
            }
            else
            {
                con.Open();
                SqlCommand cmd = new SqlCommand("sp_Student_Update", con);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@SID",ViewState["SID"]);
                cmd.Parameters.AddWithValue("@SName", txtName.Text);
                cmd.Parameters.AddWithValue("@SAge", txtAge.Text);
                cmd.Parameters.AddWithValue("@GID", rblGender.SelectedValue);
                cmd.Parameters.AddWithValue("@QID", ddlQualification.SelectedValue);
                cmd.Parameters.AddWithValue("@Hobbies", HOB);
                if (FN != "")
                {
                    cmd.Parameters.AddWithValue("@SFileName", FN);
                    File.Delete(Server.MapPath("StudentImages" + "\\" + ViewState["FileName"]));
                    fuStudentImage.SaveAs(Server.MapPath("StudentImages" + "\\" + FN));
                    
                }
                else
                {
                    cmd.Parameters.AddWithValue("@SFileName", ViewState["FileName"]);
                }
                cmd.ExecuteNonQuery();
                con.Close();
            }
            bindGrid();
                                 
        }

        void bindGrid()
        {
            if (con.State == ConnectionState.Closed)
            {
                con.Open();
            }
            cmd = new SqlCommand("select student.SID, student.SName, student.SAge, Gender.GName,Qualification.QName, student.Hobbies, student.SFileName from student join Gender on student.GID = Gender.GId join Qualification on student.QID = Qualification.QId", con);
            da = new SqlDataAdapter(cmd);
            ds = new DataSet();
            da.Fill(ds);
            if (ds.Tables[0].Rows.Count > 0)
            {
                grdStudentDetails.DataSource = ds;
                grdStudentDetails.DataBind();
            }
            con.Close();
        }

        void BindGender()
        {
            con.Open();
            cmd = new SqlCommand("select * from Gender", con); ;
            da = new SqlDataAdapter(cmd);
            ds = new DataSet();
            da.Fill(ds);
            if (ds.Tables[0].Rows.Count > 0)
            {
                rblGender.DataSource = ds;
                rblGender.DataValueField = "GID";
                rblGender.DataTextField = "GName";
                rblGender.DataBind();
            }
            con.Close();
        }
        void bindQualification()
        {
            con.Open();
            cmd = new SqlCommand("select * from Qualification", con); ;
            da = new SqlDataAdapter(cmd);
            ds = new DataSet();
            da.Fill(ds);
            if (ds.Tables[0].Rows.Count > 0)
            {
                ddlQualification.DataSource = ds;
                ddlQualification.DataValueField = "QId";
                ddlQualification.DataTextField = "QName";
                ddlQualification.DataBind();
            }
            con.Close();
        }
        void Clear()
        {
            txtName.Text = "";
            txtAge.Text = "";
            btnSave.Text = "Save";
        }

        protected void grdStudentDetails_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "EDT")
            {
                con.Open();
                SqlCommand cmd = new SqlCommand("usp_Student_Edit", con);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@SID", e.CommandArgument);
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                da.Fill(ds);
                if (ds.Tables[0].Rows.Count > 0)
                {
                    txtName.Text = ds.Tables[0].Rows[0]["SName"].ToString();
                    txtAge.Text = ds.Tables[0].Rows[0]["SAge"].ToString();
                    rblGender.SelectedValue = ds.Tables[0].Rows[0]["GID"].ToString();
                    ddlQualification.SelectedValue = ds.Tables[0].Rows[0]["QID"].ToString();
                    string[] arr = ds.Tables[0].Rows[0]["Hobbies"].ToString().Split(',');
                    cblHobbies.ClearSelection();

                    for (int i = 0; i < cblHobbies.Items.Count; i++)
                    {
                        for (int j = 0; j < arr.Length; j++)
                        {
                            if (cblHobbies.Items[i].Text == arr[j])
                            {
                                cblHobbies.Items[i].Selected = true;
                                break;
                            }
                        }
                    }
                    ViewState["FileName"] = ds.Tables[0].Rows[0]["SFileName"].ToString();
                    ViewState["SID"] = e.CommandArgument.ToString();
                    btnSave.Text = "Update";

                }
                con.Close();
            }
            else if (e.CommandName == "DLT")
            {
                con.Open();
                SqlCommand cmd = new SqlCommand("usp_Registration_Delete", con);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@RID", e.CommandArgument);
                cmd.ExecuteNonQuery();
                con.Close();
                
            }
        }
    }
}

  
                        
                    
   
                        
                    
                    <asp:TemplateField HeaderText="Action">


Что я уже пробовал:

Когда я удаляю изображение из папки изображений, оно не удаляет имя файла из базы данных?

Спасибо.

ZurdoDev

Отладьте его. Что происходит?

Adityakumar2318

Я не понимаю, как удалить файл, когда я нажимаю (на кнопку Удалить)? А где писать код?

2 Ответов

Рейтинг:
4

David_Wimbley

Ваш код не совсем ясен. Вы опубликовали свой код нажатия кнопки, но похоже, что вы решаете, является ли это кнопка сохранения, а если нет, то кнопка обновления.

if (Btnsave.Text == "Save")
           {


Тогда у вас есть команда строки, которая я не знаю, что это такое, но это похоже на то, где находится ваша логика удаления, поскольку я вижу проверку EDT (предполагая, что Edit основан на сохраненном имени proc), в противном случае это команда delete

if (e.CommandName == "EDT")
            {


Итак, с учетом сказанного я отвечу на этот вопрос двумя вариантами.

1) внутри кода команды строки у вас есть вызов usp_Registration_Delete. Внутри этого оператора IF вы должны выполнить операцию удаления. Поскольку у меня нет доступа к вашему компьютеру/коду, мне приходится делать много предположений. Но в вашем блоке EDT if у вас есть эта строка

ViewState["Files"] = ds.Tables[0].Rows[0]["Files"].ToString();


Если это имя файла, которое вы хотите удалить. Внутри блока DLT if находится место, где вы удалили бы файл.

else if (e.CommandName == "DLT")
            {
var fileToDelete = ds.Tables[0].Rows[0]["Files"].ToString();
                con.Open();
                SqlCommand cmd = new SqlCommand("usp_Registration_Delete",con);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@RID",e.CommandArgument);
                cmd.ExecuteNonQuery();
                con.Close();

                // Delete The File Here
                File.Delete(fileToDelete);

                Fill_Grid();
            }


2) Если первый блок кода, который вы опубликовали, является единственным нажатием кнопки, то вам нужно добавить еще один оператор if, чтобы определить, является ли он delete vs save vs delete

В основном

if (Btnsave.Text == "Save")
{
}
else if (Btnsave.Text == "Update")
{

}
else if (Btnsave.Text == "Delete")
{

}


Если это то, что должно произойти, то вы просто берете код из Варианта 1) я опубликовал выше, поместите его внутри Btnsave.Text = = "Delete" if block, а затем удалите файл с помощью переменной FN, которую вы разместили выше (предполагая, что это файл для удаления).

FN = Path.GetFileName(fufile.PostedFile.FileName);
File.Delete(FN);


Если ничто из этого не направляет вас в правильном направлении, я бы посоветовал вам использовать ссылку улучшить вопрос в вашем первоначальном посте, чтобы добавить больше деталей и информации, чтобы получить помощь, которую вы ищете.


Adityakumar2318

Спасибо. Моя проблема решена.

Рейтинг:
15

Karthik_Mahalingam

Добавьте этот блок кода в Delete Command Event

string id = e.CommandArgument;
// get the file name from the database
string filename = YourFunctionToGetFileNameFromTable(id);
 File.Delete(Server.MapPath("Files") + "\\"  +  filename));


Adityakumar2318

Спасибо, мой вопрос решен.

Karthik_Mahalingam

добро пожаловать