2012-04-09 1 views
0

Я написал код для вставки данных в SQL LITE базы данных следующим образомПочему сеанс становится нулевым при вставке данных и получения данных из SQL LITE

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     count = 0; 
     Session["x"] = "session value"; 

    } 
} 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    string path = Server.MapPath("bin/sampldb.db"); 
    SQLiteConnection conn = new SQLiteConnection("Data Source=" + path + ""); 
    try 
    { 
     conn.Open(); 
     SQLiteCommand cmd = new SQLiteCommand(); 
     cmd.Connection = conn; 
     string txt="insert into stu values("+TextBox1.Text +",'"+TextBox2.Text+"')"; 
     cmd.CommandType = CommandType.Text; 
     cmd.CommandText = txt; 
     cmd.ExecuteNonQuery(); 
     conn.Close(); 
    } 
    catch (Exception ex) 
    { 
     Label1.Visible = true; 
     Label1.Text = "Error:" + ex.Message; 
    } 

} 

После вставки при получении данных Session получают null I не знаю, почему

protected void Button2_Click(object sender, EventArgs e) 
{ 
    if (Session["x"] != null) // Getting Null here 
    { 
     Label1.Visible = true; 
     Label1.Text = Session["x"].ToString(); 
     DataSet m_oDataSet = new DataSet(); 
     string path = Server.MapPath("bin/sampldb.db"); 
     SQLiteConnection conn = new SQLiteConnection("Data Source=" + path + ""); 
     try 
     { 
      conn.Open(); 
      SQLiteCommand cmd = new SQLiteCommand(); 
      cmd.Connection = conn; 
      cmd.CommandType = CommandType.Text; 
      string txt = "select * from stu"; 
      cmd.CommandText = txt; 

      SQLiteDataAdapter adp = new SQLiteDataAdapter(); 
      adp.SelectCommand = cmd; 
      adp.Fill(m_oDataSet); 
      GridView1.DataSource = m_oDataSet.Tables[0]; 
      GridView1.DataBind(); 

     } 
     catch (Exception ex) 
     { 
      Label1.Visible = true; 
      Label1.Text = "Error:" + ex.Message; 
     } 
     finally 
     { 
      conn.Close(); 
     } 

    } 
} 

Тот же самый код при тестировании в Sql server 2008 работает отлично

protected void BtnSqlInsert_Click(object sender, EventArgs e) 
{ 
    SqlConnection con = new SqlConnection(cnstr); 
    con.Open(); 
    SqlCommand cmd = new SqlCommand("Insert into [User] values ('" + TextBox1.Text + "','" + TextBox2.Text + "')", con); 
    cmd.ExecuteNonQuery(); 
    con.Close(); 
} 
protected void BtnSqlGet_Click(object sender, EventArgs e) 
{ 
    if (Session["x"] != null) //Able to get session here 
    { 
     Label1.Visible = true; 
     Label1.Text = Session["x"].ToString(); 
    } 
} 

sql lite Мой путь из Bin папки, как показано на рисунке

enter image description here

+0

Что вы имеете в виду под «получает null». Является ли Session равным null или Session ["x"] равно null? – Patrick

+0

Средство 'Session [x]' 'равно нулю – Dotnet

+0

Это странно, что произойдет, если вы установите его и на PostBack. Я знаю, что это не должно иметь значения, но ваш код выглядит правильно. Вы устанавливаете значение null где-то еще? .. – Patrick

ответ

1

приложение пишет в БД (который находится в папке BIN). Это приводит к потере сеанса приложения restart => in-proc. Вы не должны разрешать последствия (используя режим StateServer), вы должны исправить исходную причину - переместить файл db в другую папку, вдали от папки BIN.

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