2017-07-10 3 views
1

Ich möchte SqlDependency auschecken, bekam aber Probleme beim Start. Ich benutze den folgenden Code (der von https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/detecting-changes-with-sqldependency stammt).C# SqlDependency - Ungültiger Objektname

Fehler "System.Data.SqlClient.SqlException: 'ungültiger Objektname' [core]. [IntServiceClient_Queue] '.'" Wird beim Ausführen einer Methode SqlDependency.Start (connString, queue) ausgelöst.

Ich verbinde mich mit SSPI auf Sql Server Admin-Konto. Ich bin mir sicher, dass dieses Objekt eine Service Broker-Warteschlange ist und existiert.

void Initialization() 
{ 
    // Create a dependency connection. 
    SqlDependency.Start(connectionString, queueName); 
} 

void SomeMethod() 
{ 
    // Assume connection is an open SqlConnection. 

    // Create a new SqlCommand object. 
    using (SqlCommand command=new SqlCommand( 
     "SELECT ShipperID, CompanyName, Phone FROM dbo.Shippers", 
     connection)) 
    { 

     // Create a dependency and associate it with the SqlCommand. 
     SqlDependency dependency=new SqlDependency(command); 
     // Maintain the refence in a class member. 

     // Subscribe to the SqlDependency event. 
     dependency.OnChange+=new 
      OnChangeEventHandler(OnDependencyChange); 

     // Execute the command. 
     using (SqlDataReader reader = command.ExecuteReader()) 
     { 
      // Process the DataReader. 
     } 
    } 
} 

// Handler method 
void OnDependencyChange(object sender, 
    SqlNotificationEventArgs e) 
{ 
    // Handle the event (for example, invalidate this cache entry). 
} 

void Termination() 
{ 
    // Release the dependency. 
    SqlDependency.Stop(connectionString, queueName); 
} 
+0

Datenbank überprüfen, um zu sehen, ob das Objekt (Tabelle, gespeicherte Prozedur, sieht etc ..) mit dem Namen [ Kern]. [intServiceClient_Queue] existiert. –

Antwort

1

Dies ist ein Fehler/Mängel in SqlDependency: es unterstützt Namen Schema nicht. [core].[intServiceClient_Queue] wird als der Name eines Objekts und maskiert, wodurch ein ungültiger Objektname erzeugt wird. Verschieben Sie die Warteschlange in das Standardschema Ihres Benutzers (höchstwahrscheinlich dbo), oder legen Sie das Standardschema auf core fest, und qualifizieren Sie alles andere Schema.

Siehe

+0

Sie haben Recht. Aber das ist seltsam. Bevor ich eine Frage gepostet habe, habe ich ein Synonym im dbo Schema erstellt und es hat auch nicht funktioniert. –

+0

@ michałkudanowski: Schließen Sie einen Profiler an und sehen Sie die im Hintergrund erzeugten Abfragen. Sie werden bestimmt etwas finden, das nicht korrekt mit einem Synonym funktioniert (im Gegensatz zum Basisobjektnamen). –

Verwandte Themen