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里,能插入数据,但是没有效果,没有作出响应,是哪里的问题?
{
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里,能插入数据,但是没有效果,没有作出响应,是哪里的问题?
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少同用在一个项目中.
你在lookmessage 中kidduse kd = new kidduse();又创建了一个kidduse的实例,两个实例不是一样的,你这里应该使用单例,最起码也应该是全局的静态变量
定义为static试下?
每次有通知的时候都要重新加载一次dependency.OnChange ,如果定为静态,是否会有问题?
PS:我试过设置为静态,但是好像一样没效果