急 ,sql非轮询 在线等 sql数据库c# 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 两个是指StartDependency函数在多线程中运行2次? #region feilunx /// <summary> /// /// </summary> public class SQLServiceBroker { private string connectionStr = new DAL.DBSQL().returnCONN(); // private string sqlStr = ""; public string sqlStr { get; set; } private SqlConnection connection = null; public delegate void UIDelegate1(); private UIDelegate1 uidel = null; public Form form = null; /// <summary> /// /// </summary> /// <param name="TableName"></param> /// <param name="ColumnNames"></param> public SQLServiceBroker(string TableName, List<string> ColumnNames) { string columns = ""; foreach (string str in ColumnNames) { if (columns != "") columns = columns + ","; columns = columns + "[" + str + "]"; } this.sqlStr = string.Format("select {0} From [dbo].[{1}]", columns, TableName); } /// <summary> /// /// </summary> /// <param name="constr"></param> /// <param name="TableName"></param> /// <param name="ColumnNames"></param> public SQLServiceBroker(string constr, string TableName, List<string> ColumnNames) : this(TableName, ColumnNames) { this.connectionStr = new DAL.DBSQL().returnCONN(); } /// <summary> /// /// </summary> ~SQLServiceBrokerBaoJTS() { StopDependency(); connection.Dispose(); } /// <summary> /// /// </summary> /// <returns></returns> public bool EnoughPermission() { SqlClientPermission perm = new SqlClientPermission(System.Security.Permissions.PermissionState.Unrestricted); try { perm.Demand(); return true; } catch (System.Exception) { return false; } } /// <summary> /// /// </summary> /// <param name="uidelegate"></param> public void InitDependency(UIDelegate1 uidelegate) { SqlDependency.Stop(connectionStr); SqlDependency.Start(connectionStr); if (connection == null) connection = new SqlConnection(connectionStr); if (!EnoughPermission()) throw new Exception("没有权限(SqlClientPermission)!"); if (uidelegate == null) throw new Exception("回调方法未指定(UIDelegate)!"); if (connection == null) throw new Exception("未初始化(InitDependency)!"); this.uidel = uidelegate; } /// <summary> /// 传入窗体对象,以防止委托有需要访问UI层控件是引发的“从不是创建控件的线程访问它” /// </summary> /// <param name="form1"></param> /// <param name="uidelegate"></param> public void InitDependency(Form form1, UIDelegate1 uidelegate) { InitDependency(uidelegate); this.form = form1; } /// <summary> /// 启动 /// </summary> public void StartDependency() { //这里很奇怪,每次都需要新的command对象 using (SqlCommand command = new SqlCommand(sqlStr, connection)) { command.Notification = null; SqlDependency dependency = new SqlDependency(command); dependency.OnChange += new OnChangeEventHandler(dependency_OnChange); if (connection.State != ConnectionState.Open) connection.Open(); command.ExecuteNonQuery(); command.Dispose(); } } /// <summary> /// /// </summary> public void StopDependency() { SqlDependency.Stop(connectionStr); if (connection != null) connection.Close(); } /// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void dependency_OnChange(object sender, SqlNotificationEventArgs e) { //注销监测事件 SqlDependency dependency = (SqlDependency)sender; dependency.OnChange -= dependency_OnChange; //放在移除事件之后又很大必要,防止ui层调用更新相同表时,进入循环出发调用 //uidel.Invoke(); //uidel(); //使用from.Invoke调用防止访问界面控件引发“从不是创建控件的线程访问它” if (form != null) form.Invoke(uidel); else uidel(); //再次启动监听 StartDependency(); } } #endregion这个监听的类 /// <summary> /// 启动监听 /// </summary> /// <param name="list"></param> /// <param name="tabname"></param> public void QiDongJTSJ(List<string> list, string tabname) { try { SQLServiceBrokerDaPshij broker = new SQLServiceBrokerDaPshij(tabname, list); //实例化毁掉函数 SQLServiceBrokerDaPshij.UIDelegate4 uidel = new SQLServiceBrokerDaPshij.UIDelegate4(writeCons); //初始化,及传入回调函数 broker.InitDependency(uidel); //初始化,传入窗体对象对于需要委托中访问ui控件的情况 broker.InitDependency(this, uidel); //启动监听 broker.StartDependency(); } catch (Exception) { }}调用启动··· List<string> listr = new List<string>(); listr.Add("no"); listr.Add("Reviewstatus"); QiDongJTSJ(listr, "T_Alarmandevent"); #region feilunx /// <summary> /// /// </summary> public class SQLServiceBroker { private string connectionStr = new DAL.DBSQL().returnCONN(); // private string sqlStr = ""; public string sqlStr { get; set; } private SqlConnection connection = null; public delegate void UIDelegate1(); private UIDelegate1 uidel = null; public Form form = null; /// <summary> /// /// </summary> /// <param name="TableName"></param> /// <param name="ColumnNames"></param> public SQLServiceBroker(string TableName, List<string> ColumnNames) { string columns = ""; foreach (string str in ColumnNames) { if (columns != "") columns = columns + ","; columns = columns + "[" + str + "]"; } this.sqlStr = string.Format("select {0} From [dbo].[{1}]", columns, TableName); } /// <summary> /// /// </summary> /// <param name="constr"></param> /// <param name="TableName"></param> /// <param name="ColumnNames"></param> public SQLServiceBroker(string constr, string TableName, List<string> ColumnNames) : this(TableName, ColumnNames) { this.connectionStr = new DAL.DBSQL().returnCONN(); } /// <summary> /// /// </summary> ~SQLServiceBrokerBaoJTS() { StopDependency(); connection.Dispose(); } /// <summary> /// /// </summary> /// <returns></returns> public bool EnoughPermission() { SqlClientPermission perm = new SqlClientPermission(System.Security.Permissions.PermissionState.Unrestricted); try { perm.Demand(); return true; } catch (System.Exception) { return false; } } /// <summary> /// /// </summary> /// <param name="uidelegate"></param> public void InitDependency(UIDelegate1 uidelegate) { SqlDependency.Stop(connectionStr); SqlDependency.Start(connectionStr); if (connection == null) connection = new SqlConnection(connectionStr); if (!EnoughPermission()) throw new Exception("没有权限(SqlClientPermission)!"); if (uidelegate == null) throw new Exception("回调方法未指定(UIDelegate)!"); if (connection == null) throw new Exception("未初始化(InitDependency)!"); this.uidel = uidelegate; } /// <summary> /// 传入窗体对象,以防止委托有需要访问UI层控件是引发的“从不是创建控件的线程访问它” /// </summary> /// <param name="form1"></param> /// <param name="uidelegate"></param> public void InitDependency(Form form1, UIDelegate1 uidelegate) { InitDependency(uidelegate); this.form = form1; } /// <summary> /// 启动 /// </summary> public void StartDependency() { //这里很奇怪,每次都需要新的command对象 using (SqlCommand command = new SqlCommand(sqlStr, connection)) { command.Notification = null; SqlDependency dependency = new SqlDependency(command); dependency.OnChange += new OnChangeEventHandler(dependency_OnChange); if (connection.State != ConnectionState.Open) connection.Open(); command.ExecuteNonQuery(); command.Dispose(); } } /// <summary> /// /// </summary> public void StopDependency() { SqlDependency.Stop(connectionStr); if (connection != null) connection.Close(); } /// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void dependency_OnChange(object sender, SqlNotificationEventArgs e) { //注销监测事件 SqlDependency dependency = (SqlDependency)sender; dependency.OnChange -= dependency_OnChange; //放在移除事件之后又很大必要,防止ui层调用更新相同表时,进入循环出发调用 //uidel.Invoke(); //uidel(); //使用from.Invoke调用防止访问界面控件引发“从不是创建控件的线程访问它” if (form != null) form.Invoke(uidel); else uidel(); //再次启动监听 StartDependency(); } } #endregion这个监听的类 /// <summary> /// 启动监听 /// </summary> /// <param name="list"></param> /// <param name="tabname"></param> public void QiDongJTSJ(List<string> list, string tabname) { try { SQLServiceBrokerDaPshij broker = new SQLServiceBrokerDaPshij(tabname, list); //实例化毁掉函数 SQLServiceBrokerDaPshij.UIDelegate4 uidel = new SQLServiceBrokerDaPshij.UIDelegate4(writeCons); //初始化,及传入回调函数 broker.InitDependency(uidel); //初始化,传入窗体对象对于需要委托中访问ui控件的情况 broker.InitDependency(this, uidel); //启动监听 broker.StartDependency(); } catch (Exception) { }}调用启动··· List<string> listr = new List<string>(); listr.Add("no"); listr.Add("Reviewstatus"); QiDongJTSJ(listr, "T_Alarmandevent");我怕出现问题,我每一个监听都查询写了一个类, 就类名不一样,其他差不多, 当一起调用启动时,第一个启动不能监听,第二个才能 List<string> listr = new List<string>(); listr.Add("no"); listr.Add("Reviewstatus"); QiDongJTSJ(listr, "T_Alarmandevent"); List<string> lst = new List<string>(); lst.Add("Reviewstatus"); QiDongJTSHB(lst, "T_Audittable"); 现在能监听的是 T_Audittable 表, T_Alarmandevent 表不能监听··· 请不要同一段代码贴2遍,看的别人眼花缭乱了。另外用代码格式贴,不然格式太乱了。SQLServiceBroker类和SQLServiceBrokerDaPshij类的关系是什么?不建议用析构函数,那个什么时候执行都不知道。监听的事为做过,如果要查错,我可以提供些建议,利用SQLSERVER自带的监视工具,查看实际执行的内容和产生的连接,有可能是两个监听共享了同一个连接导致的。 关于读文件操作 WCF Windows服务启动时暂停 ActiveX引用的问题 菜鸟问题 c# 网路流传输图片 如何传 关进程嵌入问题 高分200分求解:System.Threading.Timer问题,另100分再揭帖(在线等待) 有没有方法获取tftp server端的文件列表 如何将配置文件上传到一个URL上 webBrowser网页问题 求帮助 怎样用程序将照片保存在ACCESS数据库中,能给出具体的例子吗? 如何释放调用的com组件里面的类的实例? 请教一个读取.INI文件的问题,有正答案就结帖给分
///
/// </summary>
public class SQLServiceBroker
{ private string connectionStr = new DAL.DBSQL().returnCONN(); // private string sqlStr = "";
public string sqlStr { get; set; }
private SqlConnection connection = null; public delegate void UIDelegate1(); private UIDelegate1 uidel = null; public Form form = null; /// <summary>
///
/// </summary>
/// <param name="TableName"></param>
/// <param name="ColumnNames"></param>
public SQLServiceBroker(string TableName, List<string> ColumnNames)
{
string columns = "";
foreach (string str in ColumnNames)
{
if (columns != "")
columns = columns + ",";
columns = columns + "[" + str + "]";
}
this.sqlStr = string.Format("select {0} From [dbo].[{1}]", columns, TableName);
} /// <summary>
///
/// </summary>
/// <param name="constr"></param>
/// <param name="TableName"></param>
/// <param name="ColumnNames"></param>
public SQLServiceBroker(string constr, string TableName, List<string> ColumnNames)
: this(TableName, ColumnNames)
{
this.connectionStr = new DAL.DBSQL().returnCONN();
} /// <summary>
///
/// </summary>
~SQLServiceBrokerBaoJTS()
{
StopDependency();
connection.Dispose();
} /// <summary>
///
/// </summary>
/// <returns></returns>
public bool EnoughPermission()
{ SqlClientPermission perm = new SqlClientPermission(System.Security.Permissions.PermissionState.Unrestricted);
try
{
perm.Demand();
return true;
}
catch (System.Exception)
{
return false;
}
} /// <summary>
///
/// </summary>
/// <param name="uidelegate"></param>
public void InitDependency(UIDelegate1 uidelegate)
{ SqlDependency.Stop(connectionStr);
SqlDependency.Start(connectionStr);
if (connection == null)
connection = new SqlConnection(connectionStr); if (!EnoughPermission())
throw new Exception("没有权限(SqlClientPermission)!");
if (uidelegate == null)
throw new Exception("回调方法未指定(UIDelegate)!");
if (connection == null)
throw new Exception("未初始化(InitDependency)!");
this.uidel = uidelegate; } /// <summary>
/// 传入窗体对象,以防止委托有需要访问UI层控件是引发的“从不是创建控件的线程访问它”
/// </summary>
/// <param name="form1"></param>
/// <param name="uidelegate"></param>
public void InitDependency(Form form1, UIDelegate1 uidelegate)
{
InitDependency(uidelegate);
this.form = form1;
} /// <summary>
/// 启动
/// </summary>
public void StartDependency()
{
//这里很奇怪,每次都需要新的command对象
using (SqlCommand command = new SqlCommand(sqlStr, connection))
{
command.Notification = null;
SqlDependency dependency = new SqlDependency(command);
dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
if (connection.State != ConnectionState.Open)
connection.Open();
command.ExecuteNonQuery();
command.Dispose();
}
} /// <summary>
///
/// </summary>
public void StopDependency()
{
SqlDependency.Stop(connectionStr);
if (connection != null)
connection.Close();
} /// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void dependency_OnChange(object sender, SqlNotificationEventArgs e)
{
//注销监测事件
SqlDependency dependency = (SqlDependency)sender;
dependency.OnChange -= dependency_OnChange;
//放在移除事件之后又很大必要,防止ui层调用更新相同表时,进入循环出发调用
//uidel.Invoke();
//uidel();
//使用from.Invoke调用防止访问界面控件引发“从不是创建控件的线程访问它”
if (form != null)
form.Invoke(uidel);
else
uidel();
//再次启动监听
StartDependency();
}
}
#endregion这个监听的类 /// <summary>
/// 启动监听
/// </summary>
/// <param name="list"></param>
/// <param name="tabname"></param>
public void QiDongJTSJ(List<string> list, string tabname)
{
try
{
SQLServiceBrokerDaPshij broker = new SQLServiceBrokerDaPshij(tabname, list);
//实例化毁掉函数
SQLServiceBrokerDaPshij.UIDelegate4 uidel = new SQLServiceBrokerDaPshij.UIDelegate4(writeCons);
//初始化,及传入回调函数
broker.InitDependency(uidel);
//初始化,传入窗体对象对于需要委托中访问ui控件的情况
broker.InitDependency(this, uidel);
//启动监听
broker.StartDependency();
}
catch (Exception)
{
}
}
调用启动···
List<string> listr = new List<string>();
listr.Add("no");
listr.Add("Reviewstatus");
QiDongJTSJ(listr, "T_Alarmandevent");
///
/// </summary>
public class SQLServiceBroker
{ private string connectionStr = new DAL.DBSQL().returnCONN(); // private string sqlStr = "";
public string sqlStr { get; set; }
private SqlConnection connection = null; public delegate void UIDelegate1(); private UIDelegate1 uidel = null; public Form form = null; /// <summary>
///
/// </summary>
/// <param name="TableName"></param>
/// <param name="ColumnNames"></param>
public SQLServiceBroker(string TableName, List<string> ColumnNames)
{
string columns = "";
foreach (string str in ColumnNames)
{
if (columns != "")
columns = columns + ",";
columns = columns + "[" + str + "]";
}
this.sqlStr = string.Format("select {0} From [dbo].[{1}]", columns, TableName);
} /// <summary>
///
/// </summary>
/// <param name="constr"></param>
/// <param name="TableName"></param>
/// <param name="ColumnNames"></param>
public SQLServiceBroker(string constr, string TableName, List<string> ColumnNames)
: this(TableName, ColumnNames)
{
this.connectionStr = new DAL.DBSQL().returnCONN();
} /// <summary>
///
/// </summary>
~SQLServiceBrokerBaoJTS()
{
StopDependency();
connection.Dispose();
} /// <summary>
///
/// </summary>
/// <returns></returns>
public bool EnoughPermission()
{ SqlClientPermission perm = new SqlClientPermission(System.Security.Permissions.PermissionState.Unrestricted);
try
{
perm.Demand();
return true;
}
catch (System.Exception)
{
return false;
}
} /// <summary>
///
/// </summary>
/// <param name="uidelegate"></param>
public void InitDependency(UIDelegate1 uidelegate)
{ SqlDependency.Stop(connectionStr);
SqlDependency.Start(connectionStr);
if (connection == null)
connection = new SqlConnection(connectionStr); if (!EnoughPermission())
throw new Exception("没有权限(SqlClientPermission)!");
if (uidelegate == null)
throw new Exception("回调方法未指定(UIDelegate)!");
if (connection == null)
throw new Exception("未初始化(InitDependency)!");
this.uidel = uidelegate; } /// <summary>
/// 传入窗体对象,以防止委托有需要访问UI层控件是引发的“从不是创建控件的线程访问它”
/// </summary>
/// <param name="form1"></param>
/// <param name="uidelegate"></param>
public void InitDependency(Form form1, UIDelegate1 uidelegate)
{
InitDependency(uidelegate);
this.form = form1;
} /// <summary>
/// 启动
/// </summary>
public void StartDependency()
{
//这里很奇怪,每次都需要新的command对象
using (SqlCommand command = new SqlCommand(sqlStr, connection))
{
command.Notification = null;
SqlDependency dependency = new SqlDependency(command);
dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
if (connection.State != ConnectionState.Open)
connection.Open();
command.ExecuteNonQuery();
command.Dispose();
}
} /// <summary>
///
/// </summary>
public void StopDependency()
{
SqlDependency.Stop(connectionStr);
if (connection != null)
connection.Close();
} /// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void dependency_OnChange(object sender, SqlNotificationEventArgs e)
{
//注销监测事件
SqlDependency dependency = (SqlDependency)sender;
dependency.OnChange -= dependency_OnChange;
//放在移除事件之后又很大必要,防止ui层调用更新相同表时,进入循环出发调用
//uidel.Invoke();
//uidel();
//使用from.Invoke调用防止访问界面控件引发“从不是创建控件的线程访问它”
if (form != null)
form.Invoke(uidel);
else
uidel();
//再次启动监听
StartDependency();
}
}
#endregion这个监听的类 /// <summary>
/// 启动监听
/// </summary>
/// <param name="list"></param>
/// <param name="tabname"></param>
public void QiDongJTSJ(List<string> list, string tabname)
{
try
{
SQLServiceBrokerDaPshij broker = new SQLServiceBrokerDaPshij(tabname, list);
//实例化毁掉函数
SQLServiceBrokerDaPshij.UIDelegate4 uidel = new SQLServiceBrokerDaPshij.UIDelegate4(writeCons);
//初始化,及传入回调函数
broker.InitDependency(uidel);
//初始化,传入窗体对象对于需要委托中访问ui控件的情况
broker.InitDependency(this, uidel);
//启动监听
broker.StartDependency();
}
catch (Exception)
{
}
}
调用启动···
List<string> listr = new List<string>();
listr.Add("no");
listr.Add("Reviewstatus");
QiDongJTSJ(listr, "T_Alarmandevent");我怕出现问题,我每一个监听都查询写了一个类, 就类名不一样,其他差不多, 当一起调用启动时,第一个启动不能监听,第二个才能
List<string> listr = new List<string>();
listr.Add("no");
listr.Add("Reviewstatus");
QiDongJTSJ(listr, "T_Alarmandevent");
List<string> lst = new List<string>();
lst.Add("Reviewstatus");
QiDongJTSHB(lst, "T_Audittable");
现在能监听的是 T_Audittable 表, T_Alarmandevent 表不能监听···