Autor Beitrag
MBaier
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Mo 26.03.12 17:58 
Hallo zusammen,
ich habe folgendes Problem und zwar habe ich das Event
ausblenden C#-Quelltext
1:
MySqlConnection.InfoMessage += new SqlInfoMessageEventHandler(conn_InfoMessage);					

registriert.

Dieses wird aufgerufen wenn der SQL Server eine Warn oder Infomeldung ausgibt.

Nun soll doch bitte wenn das folgende Event aufgerufen wird, anhand der State-Eigenschaft überprüft werden, ob der Eintrag ein Fehler, eine Warnmeldung oder Sonstiges ist.
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
void conn_InfoMessage(object sender, SqlInfoMessageEventArgs e)
{
    for (int i = 0; i < e.Errors.Count - 1; i++)
    {
       //Wenn Fehler..
       if (e.Errors[i].State > ??)
       { 
       }
    }
}

Bei Google finde ich keine Beispiele für die State-Eigenschaft, bzw welcher Wert für was steht? ..

Mfg Michael

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 26.03.12 18:57 
Wie du selbst sagst wird der Event geworfen wenn es sich um eine Warnung handelt (Severity < 10). Fehler kommen da also nie an. Für die bekommst du eine SqlException.
In SqlError.Class steht die Severity darüber könntest du irgendeine Aussage treffen. Nach meinen dafür halten sind das aber alles Warnungen und es gibt keine genauere Unterscheidung als das das alles Warnungen sind. Sehe also da keinen Grund für eine weitere Untersuchung der SqlErrors.

Für diesen Beitrag haben gedankt: MBaier
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 26.03.12 18:57 
Hallo Michael,

du suchst wohl die SqlError.Class-Eigenschaft - Werte bis 10 sind Infos, und bis 16 scheinen es Warnungen zu sein, alles darüber sind wohl Fehler.

Und die eigentliche Info/Warn/Fehlermeldung steht in der SqlError.Message-Eigenschaft.

Edit: Ralf hat (wie fast immer ;-)) Recht, ich habe nochmals bei SqlConnection.InfoMessage nachgelesen. Nur Infos mit Schweregrad <= 10 werden darüber verschickt.
MBaier Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Mo 26.03.12 19:05 
Ahhh vielen Dank!


Sehe ich das richtig, dass wenn ich die Eigenschaft
ausblenden C#-Quelltext
1:
MySqlConnection.FireInfoMessageEventOnUserErrors = true;					

auf true setze, in dem Event auch neben Warnungen Fehler behandelt werden?#


Edit:
..Oder gibt es ein anderes Event,das aufgerufen wird, wenn ein SqlError bei der Verarbeitung auftritt?

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 26.03.12 19:38 
Hallo,

ich verstehe diese Eigenschaft so, daß dann zwar alle Fehler als InfoMessage ausgegeben werden, jedoch nur bei User-Fehlern (d.h. bis Schweregrad <= 16) wird dann keine Exception zusätzlich geworfen.
Bei echten Fehlern (>= 17) wird aber immer eine Exception geworfen, welche man dann sinnvollerweise behandeln sollte.

Für diesen Beitrag haben gedankt: MBaier
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 26.03.12 20:09 
Zitat:
Edit:
..Oder gibt es ein anderes Event,das aufgerufen wird, wenn ein SqlError bei der Verarbeitung auftritt?


Warum willst du das? Fehler -> Exception. So verhält sich so ziemlich jedes System und man kann da mit den üblichen Fehlerbehandlungsstrategien dran. Warum hier was anderes?
MBaier Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Mi 28.03.12 09:19 
Vielen Dank für eure Antworten.

Ich führe einen DBCC DBCHECK aus.
Da keine Datensätze, sondern nur InfoMessages und eventl. Fehler zurückgeliefert werden, Möchte ich diese Auflisten.
Wenn eine Fehler auftritt, soll nochmal ein DBCHECK mit Reparatur ausgeführen werden.

Dazu muss ich aber erstmal durch DBCHECK prüfen ob die Datenbank OK ist.
Das heißt wenn ein Fehler auftritt, dann war der Check sowieso nicht erfolgreich und die Rep. wird ausgeführt.