Autor Beitrag
Yankyy02
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 138
Erhaltene Danke: 21

Win 11 x64
C# (VS 2022 - Rider)
BeitragVerfasst: Mo 16.12.13 01:16 
Hallo,

ich möchte gerne ca. 25 Clients über Veränderungen in einer Datenbanktabelle benachrichtigen. Ich habe mir dazu überlegt die SQLDependency Klasse zu verwenden.
Nun habe ich leider das Problem das wenn ich das Programm ausführe mir eine Exception geworfen wird die besagt daß ich mich nicht anmelden kann.
Konkret handelt es sich um einen SQL Server Express 2012 und der Service Broker für die Datenbank wurde aktiviert.

"Normale" Datenbank Operationen (SELECT - DELETE - UPDATE) kann ich ganz normal ausführen aber wenn ich den nachfolgenden zum testen geschriebenen Code ausführe bekomme ich die Meldung daß die Anmeldung fehlgeschlagen ist.

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using Settings = ConsoleApplication3.Properties.Settings;

namespace ConsoleApplication3
{
    class Program
    {
        public void StartWatching()
        {
            try
            {
                SqlConnectionStringBuilder sqlConBuilder = new SqlConnectionStringBuilder();
                sqlConBuilder.InitialCatalog = Settings.Default.Datenbank;
                sqlConBuilder.DataSource = Settings.Default.DBServer;
                sqlConBuilder.UserID = Settings.Default.Benutzer;
                sqlConBuilder.Password = Settings.Default.Passwort;
                sqlConBuilder.IntegratedSecurity = Settings.Default.Security;
                SqlConnection sqlConn = new SqlConnection(sqlConBuilder.ConnectionString);
                sqlConn.Open();
                SqlClientPermission perm = new SqlClientPermission(System.Security.Permissions.PermissionState.Unrestricted);
                perm.Demand();
                SqlDependency.Start(sqlConn.ConnectionString);
                SqlCommand cmd = new SqlCommand("SELECT Status FROM dbo.UserStates", sqlConn);
                SqlDependency dependency = new SqlDependency(cmd);
                dependency.OnChange += new OnChangeEventHandler(dependencyState_OnChange);
                cmd.ExecuteReader();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

        }

        void dependencyState_OnChange(object sender, SqlNotificationEventArgs e)
        {
            Console.WriteLine("Änderungen vorhanden!");
        }


        static void Main(string[] args)
        {
            Program prog = new Program();
            prog.StartWatching();
        }
    }
}


Die genau Fehlermeldung lautet: Fehler bei der Anmeldung für den Benutzer.

Ich glaube daß ich für den Benutzer besondere Rechte vergeben muss konnte aber im SQL Server nichts passendes finden!

Kann mir jemand weiterhelfen?


Vielen Dank schonmal für euere Bemühungen.

MfG
Yankyy02 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 138
Erhaltene Danke: 21

Win 11 x64
C# (VS 2022 - Rider)
BeitragVerfasst: Mo 16.12.13 23:02 
Hallo,

danke an diejenigen die sich meine Frage durchgelesen haben! Konnte mir diesmal die Frage selbst beantworten!

Es lag daran das für die Dependency.Start() - Methode nicht das gleiche Connection Objekt benutzt werden kann!
Jetzt funktionierts superio!

Danke