我一向都用mssql
可是最近傻了
用access数据库的时候在Session_end事件里如果对数据库进行操作会出现异常导致事件推出
在事件里我是这么写的
if (Session["uid"] != null)
        {
            OleDbConnection sql = new OleDbConnection("provider=Microsoft.jet.OLEDB.4.0;data Source=" + Server.MapPath("~/App_Data/mydb.mdb"));
            sql.Open();
            string uid = Session["uid"].ToString();
            OleDbCommand cmd=new OleDbCommand("delete from shop_online where uid='" + uid + "'", sql);
            cmd.ExecuteNonQuery();
        }
这样写看不出哪里有错啊!
命名空间已经导入了
问一下有经验的朋友知道怎么回事不

解决方案 »

  1.   

    public void Session_OnEnd()
      {
        
        string sql = "delete From shop_online Where SessionID = '" + Session.SessionID
                      + "' Or DateDiff('n',CreateDate,Now()) > " + Session.Timeout;
        string cnStr = "provider=Microsoft.jet.OLEDB.4.0;data Source=" + Server.MapPath("~/App_Data/mydb.mdb");
        OleDbConnection cn = new OleDbConnection(cnStr);
        cn.Open();
        OleDbCommand cmd = new OleDbCommand(sql, cn);
        cmd.ExecuteNonQuery();
        cn.Close();
      }
    你存的时候应该存入Session.SessionID
      

  2.   

    逻辑有错....Session都丢了你存Session里面的项值...
      

  3.   

    不会啊
    我以前用sql这样做没有错啊
    我先用2楼的方法看看先
      

  4.   

    如果session真如3楼所说那样丢了的话
    那么代码也不必执行了呀
    我加了判断的
    由于2楼说的我要改部分代码就没有试
    不过在里面这样写就没有错
    if (Session["uid"] != null)
            {
                string uid = Session["uid"].ToString();
            }
    不过这样写就有错
    if (Session["uid"] != null)
            {
                OleDbConnection sql = new OleDbConnection("provider=Microsoft.jet.OLEDB.4.0;data Source=" + Server.MapPath("~/App_Data/mydb.mdb"));
                sql.Open();
            }
    找不到这个数据库吗?
    可是我在其他地方这样连接数据库是可以用的啊
      

  5.   

    需要看你如何让Session 结束。不然你需要等待一段时间才可以。。才会引起Session_End的事件。
      

  6.   

    你可以试试
    string cnStr = "Provider=Microsoft.Jet.OLEDB.4.0;"
        + @"Data Source=|DataDirectory|\mydb.mdb;";
      

  7.   

    我想知道,这样在Session_OnEnd执行删除操作,或更新online标志,能准确统计在线人数,或其它有什么好方法统计在线人数?
    谢谢。
      

  8.   

    Session_OnEnd中不能使用Server.MapPath(),你用绝对路径就行了