C# 如何使用带字符串参数的SqlDependency
我正在尝试检测是否对正在使用的SQL表进行了任何更改。我只需要通过选择特定记录来指定搜索,因此我需要使用字符串参数。据我所知:C# 如何使用带字符串参数的SqlDependency,c#,sql,winforms,parameters,sqldependency,C#,Sql,Winforms,Parameters,Sqldependency,我正在尝试检测是否对正在使用的SQL表进行了任何更改。我只需要通过选择特定记录来指定搜索,因此我需要使用字符串参数。据我所知: 语句不能包含不能更改且不能返回结果的条件语句(例如,其中1=0) 在使用SqlDependency时,是否有任何方法包含字符串参数 如果它意味着什么,我会使用SQLServer2012和VS2010 这是到目前为止我的代码 代码输出:“上述通知查询无效。”: 它应该会起作用 问题可能是您没有为table n SQL查询指定两个部分名称 SELECT语句中的投影列必须明确
语句不能包含不能更改且不能返回结果的条件语句(例如,其中1=0)
在使用SqlDependency
时,是否有任何方法包含字符串参数
如果它意味着什么,我会使用SQLServer2012
和VS2010
这是到目前为止我的代码
代码输出:“上述通知查询无效。”
:
它应该会起作用
问题可能是您没有为table n SQL查询指定两个部分名称
SELECT语句中的投影列必须明确说明,并且表名必须由两部分组成。
它只是说,当where子句在任何情况下都无法返回结果时,它不起作用。使用它们的人不多。。。。。上次我尝试将SqlDependencies与SQLServer2008R2结合使用时,它开始使用100%的CPU,即使使用简单的语句。
using System.Data;
using System.Data.SqlClient;
namespace AutoRegSession
{
public partial class RoomActiveSession : Form
{
public Timer timer = new Timer(); //Timer to measure update times
public string SessionID; //String to hold selected sessionID
string ConnStr = "Data Source=DUZY;Initial Catalog=AutoRegSQL;Integrated Security=True";
SqlDependency dependency;
public RoomActiveSession()
{
SqlDependency.Start(ConnStr);
InitializeComponent();
}
private void btn_Exit_Click(object sender, EventArgs e)
{
SqlDependency.Stop(ConnStr);
timer.Enabled = false; //Disable timer
timer.Stop(); //Stop timer
Application.Exit(); //Close application
}
//Check for table updates every 3 seconds
private void timer_Tick(object sender, EventArgs e)
{
refreshDGV();
}
//SQL query that returns current/updated attendance result list for the given SessionID
public void refreshDGV()
{
DataTable queryResult = new DataTable();
SqlConnection MyConn = new SqlConnection(ConnStr); //Use connection string
string query = @"SELECT TagID, SessionID, ScanningTime" +
" FROM Attendance " +
" WHERE SessionID = @SessionID ";
SqlCommand command = new SqlCommand(query, MyConn);
command.Parameters.Add("SessionID", SqlDbType.Char).Value = SessionID;
//Create a dependency and associate it with the SqlCommand
SqlDependency dependency = new SqlDependency(command);
//Subscribe to the SqlDependency event
dependency.OnChange += new OnChangeEventHandler(OnDependencyChange);
SqlDataAdapter adapter = new SqlDataAdapter(command);
adapter.Fill(queryResult);
DGVSetDataSouce(queryResult);
}
//Handler method for SQL Dependecy
private void OnDependencyChange(object sender, SqlNotificationEventArgs eventArgs)
{
if (eventArgs.Info == SqlNotificationInfo.Invalid)
{
MessageBox.Show("The above notification query is not valid.");
}
else
{
MessageBox.Show("Notification Info: " + eventArgs.Info);
MessageBox.Show("Notification source: " + eventArgs.Source);
MessageBox.Show("Notification type: " + eventArgs.Type);
}
}
//Create and start the timer
public void SetTimer()
{
timer.Interval = 3000;
timer.Tick += new EventHandler(timer_Tick);
timer.Enabled = true;
timer.Start();
}
}
}