SQLException - własne komunikaty

0

Witam,

Chciałem w aplikacji .NET w sposób bardziej czytelny dla user'a wykorzystać obsługę błędów. Niestety mam problem z pobraniem nazwy kolumny z zwracanego wyjątku. Mam taki kawałek kodu:

 }catch(SqlException ex){
...
switch(ex.Number)
{
 case: 515
MessageBox.Show(String.Format("własny komunikat"));
break;
default:
break;
}

...

Problem polega na tym, że w własnym komunikacie muszę uwzględnić nazwę kolumny, jednakże w żaden sposób nie potrafię jej pobrać z SqlException. Natomiast w standardowym komunikacie SQL'a dostępnym przez ex.Message normalnie ta wartość jest wstawiona, więc wydaje mi się, że powinna być możliwość jej pobrania w sposób bezpośredni.

Z góry dzięki i pozdrawiam

2

Musisz ręcznie parsować komunikat, bo ta informacja pochodzi z poziomu bazy danych (zwróć uwagę, że różne silniki dadzą troche inny komunikat). Z ciekawości rzucilem okiem jak to jest zrobione w naszym projekcie w części C#. Mamy dopasowany wzorzec komuniaktu zgodny z tym co zwraca Oracle i chlopaki to ręcznie wyciągają.

0
marcin.NET napisał(a):

Chciałem w aplikacji .NET w sposób bardziej czytelny dla user'a wykorzystać obsługę błędów. Niestety mam problem z pobraniem nazwy kolumny z zwracanego wyjątku. Mam taki kawałek kodu:

W jaki niby sposób nazwa kolumny ma być czytelna dla użytkownika? Użytkownika nie obchodzi baza danych, jemu ma działać aplikacja. Jeśli aplikacja nie działa, to support czyta logi i naprawia błąd.

0

W jaki niby sposób nazwa kolumny ma być czytelna dla użytkownika? Użytkownika nie obchodzi baza danych, jemu ma działać aplikacja. Jeśli aplikacja nie działa, to support czyta logi i naprawia błąd.

A takim sposobem, że nazwa kolumny jest tożsama z nazwą kolumny w datagridView ;p. I tu nie chodzi o błędy i ich wyłapywanie w trakcie działania aplikacji, bo do tego tak jak piszesz służą logi. Tutaj ma być obsługa wyjątku i musi być czytelna, aby użytkownik zrozumiał co zrobił źle, a nie dzwonił non stop na help desk ;p. Także w tym wypadku użytkownika jak najbardziej obchodzi co zwraca baza danych, tutaj też wchodzi obsługa wyjątków, które są zwracane przez Trigger'y. Tyle, że w przypadku trigger'ow nie ma problemu, bo mozna normalnie sobie komunikat napisać w zależności od trigger'a, tutaj natomiast mam nr błędu 515 czyli niemożliwość zapisania wartosci null w dowolnej kolumnie. Z jednej strony w tym wypadku chodzi tylko i wylacznie o jedną kolumnę więc mógłbym ten komunikat na sztywno wpisać, ale wolałbym napisać bardziej elastycznie.

Mamy dopasowany wzorzec komuniaktu zgodny z tym co zwraca Oracle i chlopaki to ręcznie wyciągają.

Tego się obawiałem, że trzeba będzie jakoś tak to robić. W sumie można by prawdopodobnie zmienić komunikat w sys.messages, ale nie chce ingerować aż tak w bazie danych.

Pozdrawiam

0
marcin.NET napisał(a):

Tutaj ma być obsługa wyjątku i musi być czytelna, aby użytkownik zrozumiał co zrobił źle, a nie dzwonił non stop na help desk ;p.

Nie tak się robi. Dane wprowadzone przez użytkownika powinny podlegać walidacji po stronie GUI i logiki biznesowej zanim się je w ogóle wyśle do bazy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1