Mega Code Archive

 
Categories / Visual C++ .NET / ADO Database
 

Query Notifications

#include "stdafx.h" using namespace System; using namespace System::Data; using namespace System::Threading; using namespace System::Data::SqlClient; ref class MyNotification { public:     MyNotification(String^ connectionString, String^ sql)     {         ConnectionString = connectionString;         Sql = sql;         SqlDependency::Start(ConnectionString);         SyncHandle = gcnew AutoResetEvent(true);         ChargeNotification();     }     void OnChangedHandler(Object^ caller, SqlNotificationEventArgs^ e)     {         if ( e->Source == SqlNotificationSource::Data &&             e->Type == SqlNotificationType::Change &&             (e->Info == SqlNotificationInfo::Delete ||             e->Info == SqlNotificationInfo::Insert ||             e->Info == SqlNotificationInfo::Update) ){             Console::WriteLine(e->Info.ToString());             ChargeNotification();         }     }     void ChargeNotification()     {         SqlConnection^ connection = gcnew SqlConnection(ConnectionString);         connection->Open();         SqlCommand^ WatchCommand = gcnew SqlCommand(Sql, connection);         SqlDependency^ myDependency = gcnew SqlDependency(WatchCommand);         myDependency->OnChange += gcnew OnChangeEventHandler(this, &MyNotification::OnChangedHandler);         SqlDataReader^ myReader = WatchCommand->ExecuteReader();         myReader->Close();         SyncHandle->Set();     }     void Wait()     {         SyncHandle->Reset();         SyncHandle->WaitOne();     }     String^ ConnectionString;     String^ Sql;     AutoResetEvent^ SyncHandle; }; void main() {         SqlConnection^ myConnection = nullptr;         SqlConnectionStringBuilder^ connectionBuilder = gcnew SqlConnectionStringBuilder();                 connectionBuilder->DataSource = "localhost\\sqlexpress";         connectionBuilder->InitialCatalog = "myCatalog";         connectionBuilder->IntegratedSecurity = true;         myConnection = gcnew SqlConnection(connectionBuilder->ToString());         myConnection->Open();                  MyNotification^ commandNotification = gcnew MyNotification(myConnection->ConnectionString,"SELECT ID, Song FROM dbo.Music");         SqlCommand^ testCommand = gcnew SqlCommand("INSERT INTO Music(Song) VALUES('T')",myConnection);         testCommand->ExecuteNonQuery();         commandNotification->Wait();         testCommand->CommandText ="UPDATE Music SET Song='T' WHERE Song='T'";         testCommand->ExecuteNonQuery();         commandNotification->Wait();         testCommand->CommandText = "DELETE FROM Music WHERE Song='T'";         testCommand->ExecuteNonQuery();         commandNotification->Wait();         myConnection->Close(); }