Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用带字符串参数的SqlDependency_C#_Sql_Winforms_Parameters_Sqldependency - Fatal编程技术网

C# 如何使用带字符串参数的SqlDependency

C# 如何使用带字符串参数的SqlDependency,c#,sql,winforms,parameters,sqldependency,C#,Sql,Winforms,Parameters,Sqldependency,我正在尝试检测是否对正在使用的SQL表进行了任何更改。我只需要通过选择特定记录来指定搜索,因此我需要使用字符串参数。据我所知: 语句不能包含不能更改且不能返回结果的条件语句(例如,其中1=0) 在使用SqlDependency时,是否有任何方法包含字符串参数 如果它意味着什么,我会使用SQLServer2012和VS2010 这是到目前为止我的代码 代码输出:“上述通知查询无效。”: 它应该会起作用 问题可能是您没有为table n SQL查询指定两个部分名称 SELECT语句中的投影列必须明确

我正在尝试检测是否对正在使用的SQL表进行了任何更改。我只需要通过选择特定记录来指定搜索,因此我需要使用字符串参数。据我所知:

语句不能包含不能更改且不能返回结果的条件语句(例如,其中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();
        }
    }
}