Thread View: alt.pl.comp.lang.csharp
7 messages
7 total messages
Started by mk
Tue, 08 Dec 2009 09:24
Enumeration w bazie danych
Author: mk
Date: Tue, 08 Dec 2009 09:24
Date: Tue, 08 Dec 2009 09:24
47 lines
1920 bytes
1920 bytes
Witam,
Korzystam z dostępu do danych w MSSQL za pomocą Linq. Mam tam tabelę
powiedzmy "województwa", która ma dwie kolumny Guid i Name i przechowuje
nazwy województw (16 rekordów).
Nsatępnie w kodzie, żeby rozróżnić które województwo zostało wybrane
robię coś takiego:
string strWojewodztwo = (tu jakies query);
switch(strWojewodztwo)
{
case "mazowieckie":
//rob cos
break;
case "malopolskie":
//rob cos
break;
case "dolnoslaskie":
//rob cos
break;
case "slaskie":
//rob cos
break;
.....
}
Wydaje mi się że nie jest to najlepszy pomysł żeby switch() orientował
się na podstawie wartości typu string. O wiele lepiej było by zrobić
public enum BinaryDataType
{
mazowieckie,
malopolskie,
doloslaskie,
slaskie,
....
}
Tylko jak dane z takiego enum'a sprząc z daymi w bazie?
Chodzi o to, że w jakiejs innej tabeli zamiast Guid wojewodztwa
musialbym przechowywac numer zgodny z tym w enumie.
P.S.
Wojewodztwa to tylko przyklad. W rzeczywistosci bede przetrzymywal inne
wartosci.
Re: Enumeration w bazie danych
Author: Karol
Date: Tue, 08 Dec 2009 21:09
Date: Tue, 08 Dec 2009 21:09
74 lines
3010 bytes
3010 bytes
Użytkownik "mk" <mk@nospam.com> napisał w wiadomości grup
dyskusyjnych:hfl659$raf$1@atlantis.news.neostrada.pl...
> Witam,
Witam
> Korzystam z dostępu do danych w MSSQL za pomocą Linq. Mam tam tabelę
> powiedzmy "województwa", która ma dwie kolumny Guid i Name i przechowuje
> nazwy województw (16 rekordów).
>
> Nsatępnie w kodzie, żeby rozróżnić które województwo zostało wybrane robię
> coś takiego:
>
> string strWojewodztwo = (tu jakies query);
>
> switch(strWojewodztwo)
> {
> case "mazowieckie":
> //rob cos
> break;
> case "malopolskie":
> //rob cos
> break;
> case "dolnoslaskie":
> //rob cos
> break;
> case "slaskie":
> //rob cos
> break;
> .....
> }
>
> Wydaje mi się że nie jest to najlepszy pomysł żeby switch() orientował się
> na podstawie wartości typu string. O wiele lepiej było by zrobić
Stringi w C# są przechowywane w "magazynie stringów", zmienna przechowuje
tylko id z "magazynu".
Więc porównywanie stringów nie jest kosztowne, faktycznie jest to porównanie
dwóch id. Ja bym zostawił na stringach tego switcha.
> public enum BinaryDataType
> {
> mazowieckie,
> malopolskie,
> doloslaskie,
> slaskie,
> ....
> }
>
> Tylko jak dane z takiego enum'a sprząc z daymi w bazie?
> Chodzi o to, że w jakiejs innej tabeli zamiast Guid wojewodztwa musialbym
> przechowywac numer zgodny z tym w enumie.
Problemy przy zmianie enuma lub bazy. Bym raczej unikał.
> P.S.
> Wojewodztwa to tylko przyklad. W rzeczywistosci bede przetrzymywal inne
> wartosci.
>
> __________ Informacja programu ESET Smart Security, wersja bazy sygnatur
> wirusow 4671 (20091208) __________
>
> Wiadomosc zostala sprawdzona przez program ESET Smart Security.
>
> http://www.eset.pl lub http://www.eset.com
>
>
__________ Informacja programu ESET Smart Security, wersja bazy sygnatur wirusow 4671 (20091208) __________
Wiadomosc zostala sprawdzona przez program ESET Smart Security.
http://www.eset.pl lub http://www.eset.com
Re: Enumeration w bazie danych
Author: toudidel
Date: Wed, 09 Dec 2009 09:17
Date: Wed, 09 Dec 2009 09:17
11 lines
1788 bytes
1788 bytes
Użytkownik "mk" <mk@nospam.com> napisał w wiadomości news:hfl659$raf$1@atlantis.news.neostrada.pl... > Wydaje mi się że nie jest to najlepszy pomysł żeby switch() orientował > się na podstawie wartości typu string. O wiele lepiej było by zrobić o wiele lepiej i bezpieczniej województwa przechowywać w formacie liczbowym (który też do czegoś poza identyfikacją może się przydać) i to najlepiej nie wymyslonym przez siebie tylko jakimś, który jest uznanym standardem, np. w tym przypadku TERYT: 02 dolnośląskie, 04 kujawsko-pomorskie, ... , 32 zachodniopomorskie. http://www.stat.gov.pl/broker/access/index.jspa http://pl.wikipedia.org/wiki/TERYT -- td
Re: Enumeration w bazie danych
Author: Wiktor S.
Date: Wed, 09 Dec 2009 12:08
Date: Wed, 09 Dec 2009 12:08
8 lines
1167 bytes
1167 bytes
> uznanym standardem, np. w tym przypadku TERYT: 02 dolnośląskie, 04 > kujawsko-pomorskie, ... , 32 zachodniopomorskie. A nieparzyste gdzie im wcięło? Reserved? -- Azarien
Re: Enumeration w bazie danych
Author: toudidel
Date: Wed, 09 Dec 2009 14:56
Date: Wed, 09 Dec 2009 14:56
7 lines
1346 bytes
1346 bytes
Użytkownik "Wiktor S." <wswiktor&poczta,fm@no.spam> napisał w wiadomości news:hfo408$s8j$1@news.onet.pl... > A nieparzyste gdzie im wcięło? Reserved? a to już pytanie do GUS albo ustawodawcy :) -- td
Re: Enumeration w bazie danych
Author: 3P
Date: Thu, 10 Dec 2009 21:00
Date: Thu, 10 Dec 2009 21:00
41 lines
2200 bytes
2200 bytes
>
> Stringi w C# są przechowywane w "magazynie stringów", zmienna
> przechowuje tylko id z "magazynu".
> Więc porównywanie stringów nie jest kosztowne, faktycznie jest to
> porównanie dwóch id. Ja bym zostawił na stringach tego switcha.
>
Nie chodzi o wydajność tylko poprawne programowanie, czytelność kodu,
możliwość uniknięcia błędów.
Przecież to nie będzie miało żadnego wpływu na wydajność aplikacji! Chyba,
że miliony razy w jakiejś
pętli by to porównywał. A wtedy akurat porównanie stringów nie byłoby
dobre.
Skoro porównuje się na podstawie "id", to dlaczego są różnice w czasach
porównania przy użyciu
==, equals, string.compare (z różnymi parametrami)?
>
>> public enum BinaryDataType
>> {
>> mazowieckie,
>> malopolskie,
>> doloslaskie,
>> slaskie,
>> ....
>> }
>>
>> Tylko jak dane z takiego enum'a sprząc z daymi w bazie?
>> Chodzi o to, że w jakiejs innej tabeli zamiast Guid wojewodztwa
>> musialbym przechowywac numer zgodny z tym w enumie.
>
> Problemy przy zmianie enuma lub bazy. Bym raczej unikał.
Jak są stringi to również masz problem jak zmienisz bazę danych.
Możesz trzymać stringi a potem zrobić tak.
string wojewodztwo = WyciagnijZBazy();
Wojewodztwo w = (Wojewodztwo)Enum.Parse(typeof(Wojewodztwo), wojewodztwo);
Re: Enumeration w bazie danych
Author: bodziec
Date: Fri, 11 Dec 2009 11:09
Date: Fri, 11 Dec 2009 11:09
47 lines
3173 bytes
3173 bytes
On 10 Gru, 22:00, 3P <nos...@serwer.pl> wrote:
> > Stringi w C# s przechowywane w "magazynie string w", zmienna
> > przechowuje tylko id z "magazynu".
> > Wi c por wnywanie string w nie jest kosztowne, faktycznie jest to
> > por wnanie dw ch id. Ja bym zostawi na stringach tego switcha.
>
> Nie chodzi o wydajno tylko poprawne programowanie, czytelno kodu,
> mo liwo unikni cia b d w.
> Przecie to nie b dzie mia o adnego wp ywu na wydajno aplikacji! Chyba,
> e miliony razy w jakiej
> p tli by to por wnywa . A wtedy akurat por wnanie string w nie by oby
> dobre.
>
> Skoro por wnuje si na podstawie "id", to dlaczego s r nice w czasach
> por wnania przy u yciu
> ==, equals, string.compare (z r nymi parametrami)?
>
>
>
> >> public enum BinaryDataType
> >> {
> >> mazowieckie,
> >> malopolskie,
> >> doloslaskie,
> >> slaskie,
> >> ....
> >> }
>
> >> Tylko jak dane z takiego enum'a sprz c z daymi w bazie?
> >> Chodzi o to, e w jakiejs innej tabeli zamiast Guid wojewodztwa
> >> musialbym przechowywac numer zgodny z tym w enumie.
>
> > Problemy przy zmianie enuma lub bazy. Bym raczej unika .
>
> Jak s stringi to r wnie masz problem jak zmienisz baz danych.
>
> Mo esz trzyma stringi a potem zrobi tak.
>
> string wojewodztwo = WyciagnijZBazy();
>
> Wojewodztwo w = (Wojewodztwo)Enum.Parse(typeof(Wojewodztwo), wojewodztwo);
Można zrobić tworzenie kodu enuma na podstawie tabeli w bazie danych.
Wtedy po przekompilowaniu będziesz miał dostęp do nazwy województwa a
po rzutowaniu na int jego id
Wadą jest to że trzeba się trzymać schematu że jeżeli coś dodam do tej
tabeli to musze odpalić zrzucanie do enum i przekompilować
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads