I am trying to determine if any changes have been made to the SQL table I'm working with. I need to specify a search by selecting only certain entries, and for this reason I need to use a string parameter. I understand that according to this MSDN document :
The statement must not contain conditional statements that cannot change and cannot return results (for example, WHERE 1=0)
Is it possible to enable the string parameter when using SqlDependency ?
If it means anything, I am using SQL Server 2012 and VS 2010
Here is my code.
Code Output: "The above notification query is not valid." :
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(); } } }
source share