How to use SqlDependency with STRING parameter

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(); } } } 
+4
source share
1 answer

It should work.

The problem may be that you did not specify two part names for the SQL table query.

The projected columns in the SELECT statement must be explicitly specified,, and the table names must be specified with two-part names.

He only says that this does not work when there is a where clause that cannot return results in any scenario.

0
source

Source: https://habr.com/ru/post/1497678/


All Articles