Search code examples
c#asp.netsessiongridviewsqlconnection

ASP.net C# The ConnectionString property has not been initialized


I have a gridview that has a Edit button. when user click on that button, the contents of the gridview (that shows tbl_userContents table) goes to some textboxes, then he can change the contents and click on save button. when he clicks the save button, the edited contents inserted to the tbl_contents table and the record of this content will be deleted from tbl_userContents.

the first part (inserting to the tbl_contents table) works... but the second part (deleting from tbl_userContents) doesn't work and ex.Message shows the this error: The ConnectionString property has not been initialized

would you please help me to solve this problem?!

this is my code:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data.SqlClient;
    using System.Configuration;
    using System.IO;

    public partial class manager_usercontents : System.Web.UI.Page
    {
    SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["PP"].ConnectionString);
protected void Page_Load(object sender, EventArgs e)
{

}
protected void gvUserContents_SelectedIndexChanged(object sender, EventArgs e)
{

}
    protected void btnEditUserContent_Click(object sender, EventArgs e)
 {
    int id = Int32.Parse(((Button)sender).CommandArgument.ToString());
    Session.Add("ucid", id);
    string sql = "select * from tbl_userContents where ucid=@id";
    try
    {
        SqlCommand cmd = new SqlCommand(sql, cn);
        cmd.Parameters.AddWithValue("@id", id);
        SqlDataReader dr;
        cn.Open();
        dr = cmd.ExecuteReader();
        dr.Read();
        txtEditUserContentTopic.Text = dr["topic"].ToString();
        hfUserContentEdit.Value = dr["contentUrl"].ToString();
        txtEditUserContentNote.Text = dr["contentNote"].ToString();
        cmd.Dispose();
    }
    finally
    {
        cn.Close();
        cn.Dispose();
    }
}
protected void btnsaveEditUserContent_Click(object sender, EventArgs e)
{        
    //first we shoud save the user content in contents table...
    string masir, strfilename, cont = string.Empty, sql;
    try
    {
        if (fuEditUserFileUpload.HasFile)
        {
            masir = HttpContext.Current.Server.MapPath("../contents");
            strfilename = fuEditUserFileUpload.FileName;
            fuEditUserFileUpload.SaveAs(masir + "\\" + strfilename);
            cont = "contents\\" + strfilename;
        }
        else cont = hfUserContentEdit.Value;


        sql = "insert into tbl_contents (topic,contentNote,contentUrl) values(@t,@contentN,@contentU)";
        SqlCommand cmd = new SqlCommand(sql, cn);
        cmd.Parameters.Add("@t", txtEditUserContentTopic.Text);
        cmd.Parameters.Add("@contentN", txtEditUserContentNote.Text);
        cmd.Parameters.Add("@contentU", cont);

        cn.Open();
        cmd.ExecuteNonQuery();
        cmd.Dispose();
    }
    catch (Exception ex)
    {
        lblEditUserContentError.Style.Add("color", "red");
        lblEditUserContentError.Text = "the record does not successfully inserted"   }

    cn.Close();
    cn.Dispose();
    lblEditUserContentError.Style.Add("color", "green");
    lblEditUserContentError.Text = "the record successfully inserted";
    gvUserContents.DataBind();


    //then we should delete the user content record from the tbl_userContents table
    int SessionID = Int32.Parse(Session["ucid"].ToString());
    sql = "delete from tbl_userContents where ucid=@id";
    try
    {
        SqlCommand cmd = new SqlCommand(sql, cn);
        cmd.Parameters.AddWithValue("@id", SessionID);
        cn.Open();
        cmd.ExecuteNonQuery();
    }
    catch (Exception ex)
    {
       // lblDeleteError.Style.Add("color", "red");
        //lblDeleteError.Text = "the record does not deleted successfully.";
       lblDeleteError.Text = ex.Message;

    }
    finally
    {
       // lblDeleteError.Style.Add("color", "green");
       // lblDeleteError.Text = "record deleted successfully";
        gvUserContents.DataBind();
        cn.Close();
    }
}

and this is my webConfig:

      <connectionStrings>
<add name="PipelineProtection" connectionString="Data Source=MAHSA-PC;Initial Catalog=PipelineProtection;Integrated Security=True" />
<add name="PP" connectionString="Data Source=MAHSA-PC;Initial Catalog=PipelineProtection;Integrated Security=True"
  providerName="System.Data.SqlClient" />


Solution

  • here is what's going in your program:

    Initially you defined cn as an object of SQL connection. cn was initialized. But in your button event (first function) it worked perfectly and then in your finally block because of cn.Close(), cn now has null value. So it is not working in other function.

    public partial class manager_usercontents : System.Web.UI.Page
    {
    string connectStr=ConfigurationManager.ConnectionStrings["PP"].ConnectionString;
    SqlConnection cn;
    

    then Everytime in your click event write the following line at the start:

       cn =new SQLConnection(connectStr);