public partial class lookmessage : System.Web.UI.Page
{
    kidduse kd = new kidduse();
    public static SqlCommand cmd1 = null;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            Session["id"] = 1;
            InitDependency();
            Label1.Text = kd.Cs;
        }
    }
    
    protected void Button1_Click(object sender, EventArgs e)
    {
        string sql = "insert into message(m_u_id) values(1)";
        kd.ExecuteSql(sql);
    }    public void InitDependency()
    {
        cmd1 = new SqlCommand("select m_id from dbo.message where m_u_id=1", kd.getConnection());
        cmd1.Notification = null;
        SqlDependency dependency = new SqlDependency(cmd1);
        dependency.OnChange += new OnChangeEventHandler(DependencyChanged);        SqlDataAdapter adapter = new SqlDataAdapter(cmd1);//为什么不打这3行就没效果
        DataSet ds = new DataSet();//
        adapter.Fill(ds);//
    }    void DependencyChanged(object caller, SqlNotificationEventArgs e)
    {
        SqlDependency dependency = (SqlDependency)caller;
        dependency.OnChange -= DependencyChanged;
        InitDependency();
        this.Label1.Text += "abc";
    }
   
}
<%@ Application Language="C#" %><script runat="server">
    kidduse kd = new kidduse();
    void Application_Start(object sender, EventArgs e) 
    {
        // 在应用程序启动时运行的代码
        if (kd.getvalue<int>("Select DATABASEpRoPERTYEX('hxoadb','IsBrokerEnabled') ", 0) == 0)
        {
            kd.ExecuteSql("ALTER DATABASE hxoadb SET ENABLE_BROKER");
        }
        System.Data.SqlClient.SqlDependency.Start(kd.getconnectString());
        kd.Cs = "000000";
    }
    
    void Application_End(object sender, EventArgs e) 
    {
        //  在应用程序关闭时运行的代码
        System.Data.SqlClient.SqlDependency.Stop(kd.getconnectString());
    }
        
    void Application_Error(object sender, EventArgs e) 
    { 
        // 在出现未处理的错误时运行的代码    }    void Session_Start(object sender, EventArgs e) 
    {
        // 在新会话启动时运行的代码    }    void Session_End(object sender, EventArgs e) 
    {
        // 在会话结束时运行的代码。 
        // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
        // InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer 
        // 或 SQLServer,则不会引发该事件。    }
       
</script>
目的,在插入的数据m_u_id等于1的时候,作出响应,把label1.Text += "abc"运行后.label1.Text显示是空,但是我已经在Global.asax里给kd.Cs赋值为00000了,是不是Application_Start没执行?
把上面的代码复制去winform是可以有效果的,但是取消注释的那3行代码的话,就没效果,想不明白这3行东西和缓存有什么必然的联系,我又没用到什么数据绑定.
目前这段代码在asp.net里,能插入数据,但是没有效果,没有作出响应,是哪里的问题?

解决方案 »

  1.   

    1.生命周期的问题Global.asax也是面向对象的
    public class Global : System.Web.HttpApplication
    {
       kidduse kd = new kidduse();//属于私有的
    }
    public partial class lookmessage : System.Web.UI.Page
    {
       kidduse kd = new kidduse(); //属于私有的
    }运行后.label1.Text显示是空的原因在于Label1.Text = kd.Cs;//此时的KD.CS应该为“”吧
    虽然你在在Global.asax里给kd.Cs赋值为00000,但这里的kd是NEW出来的winform的生命周期和ASP.NET的不一样,因为没有代码不好解释.if (!IsPostBack)
            {
    }在你Button1_Click后是不执行的,在asp.net里,能插入数据,但是没有效果,没有作出响应的原因在这里.(还是生命周期的问题)
    ------------------
    winform到ASP.NET很多地方是不一样的。
    建议不要用Global.asax,用BASEPAGE类 ,static 和Global.asax少同用在一个项目中.
      

  2.   

     kidduse kd = new kidduse();只是在Global中创建了一个实例,这个实例不是全局的,
    你在lookmessage 中kidduse kd = new kidduse();又创建了一个kidduse的实例,两个实例不是一样的,你这里应该使用单例,最起码也应该是全局的静态变量
      

  3.   

    我像知道的是为什么插入数据库记录,但是Label1.Text += "abc"并没有运行.
      

  4.   

    尝试把SqlDependency dependency = new SqlDependency(cmd1);
    定义为static试下?
      

  5.   

    借楼主的帖子发下我的问题,如有打扰见谅 http://topic.csdn.net/u/20090825/15/71d11f43-08a6-4f04-8152-a0737dddd2d4.html?seed=1079724398&r=59322234#r_59322234
      

  6.   


    每次有通知的时候都要重新加载一次dependency.OnChange ,如果定为静态,是否会有问题?
    PS:我试过设置为静态,但是好像一样没效果