Avatar billede askhoej Praktikant
23. januar 2005 - 18:02 Der er 21 kommentarer

Feedback på lille værktøj

Hej

Jeg har siddet og leget lidt med at lave et lille værktøj til nemt at lave klasser til redigering af databasetabeller og er nu kommet frem til noget man kan kalde et første forsøg :-)

Jeg kunne rigtig godt tænke mig at få lidt feedback om hvad i synes om ideen og udførslen af den.

Skriv enten jeres kommentar her eller kontakt mig gerne på msn: askhoej@hotmai.com

Url:

www.askhoej.dk
u/p: exp/exp


mvh
/askhoej
Avatar billede burningice Nybegynder
23. januar 2005 - 18:56 #1
ikke dårligt.. slet ikke dårligt. Ikke noget jeg umiddelbart selv ville bruge, men tror det vil være godt for nogle til hurtigt at komme i gang med.

Studsede dog lidt over at du har brugt ? istede for @ til dine parametre. Ved ikke om der findes en uskreven regel omkring det, men tror du er den første jeg har set der ikke bruger @ ;)

Der er også lidt type-finurligheder i dine properties. F.eks.

        public int Id
        {
            get {return Convert.ToInt32(id);}
            set {id = value.ToString();}
        }

Hvorfor gemmer du ikke id som int i field'et?

Nu er jeg ikke super meget inde i paremetre, men vil det ikke give fejl når koden prøver at indsætte en string i et felt i databasen som er af typen int?
Avatar billede askhoej Praktikant
23. januar 2005 - 19:20 #2
cyberfessor> tak fordi du gad kigge på det :-)

Ved sgu ikke helt hvorfor jeg bruger ? i stedet for @ i OleDbParameter, det er nok noget historisk - men hvis det andet er mere brugt, så vil jeg da ændre det :-)

Grunden til at jeg bruger strings til at gemme int's i min klasse, er at jeg gerne vil kunne indsætte null værdier i int kolonner i databasen. Og int er som standard ikke nullable (man kan dog bruge "int?"). Hvis jeg benytter string så vil parameterne selv indsætte null hvis strengen er lig "", da den selv sørger for en konverteringen. Men måske er den en bedre/pænere løsning på dette?
Avatar billede burningice Nybegynder
23. januar 2005 - 21:27 #3
En anden ting... når du har indsat en record, så laver du det klassiske trick med

SQL = "SELECT TOP 1 per_id FROM person ORDER BY per_id DESC";

Det kan godt gøres bedre med f.eks. SELECT @@Identity, eller en-funktion-jeg-ikke-kan-huske-navnet-på() i mysql
Avatar billede burningice Nybegynder
23. januar 2005 - 21:30 #4
Select()-metoden burde måske også gøre statisk, det ville jeg mene ville være mest logisk.
Avatar billede askhoej Praktikant
23. januar 2005 - 22:33 #5
@@Identity er vist såvidt jeg husker noget rod hvis man benytter sig af Triggers, jeg kender ikke metoden til MySQL men vil da lige spørge google engang.

Indrømmer gerne at jeg ikke er så stærk i static, men vil er det ikke være et problem at gøre metoden static når den benytter sig af _ConnectionString fra klassen?
Avatar billede arne_v Ekspert
23. januar 2005 - 22:40 #6
Access    : @@IDENTITY
SQLServer : @@IDENTITY eller bedre SCOPE_IDENTITY()
MySQL    : LAST_INSERT_ID()
Avatar billede arne_v Ekspert
23. januar 2005 - 22:41 #7
Det er SCOPE_IDENTITY() som håndterer triggers bedre
Avatar billede askhoej Praktikant
23. januar 2005 - 23:02 #8
tak for det Arne dem vil jeg kigge lidt nærmere på, det ser ud til at @IDENTITY på Access og LAST_INSERT_ID() kører i forhold til hver forbindelse til databasen så det er perfekt. Så må jeg lige finde ud af hvordan SCOPE_IDENTITY() virker :-)
Avatar billede arne_v Ekspert
23. januar 2005 - 23:03 #9
Jeg gik ind og kiggede.

Med hensyn til data typer:

database decimal/numeric -> C# decimal

databse image/blob/ole -> C# byte[]
Avatar billede arne_v Ekspert
23. januar 2005 - 23:03 #10
Alle sammen er "per connection" (eller ville de være ubrugelige).
Avatar billede askhoej Praktikant
23. januar 2005 - 23:11 #11
perfekt -tak for det :-)
Avatar billede arne_v Ekspert
23. januar 2005 - 23:12 #12
Jeg er naturligvis engig med cf i at fields ikke bør være string men den rigtige
data type.

Jeg mener at du bør merge constructor og Insert. Opretter man et objekt så opretter
man det.

Du kan også overveje at hold styr på om objektet er ændret eller ej.
Avatar billede askhoej Praktikant
23. januar 2005 - 23:28 #13
- jeg må vist kigge lidt på mine fields ;-)

- det kunne man også gøre, måske lidt pænere - men samme funktionalitet

- ja det jo den klassiske udfordring i flerebruger systemer, er der nogen løsning der er speciel god til dette?
Avatar billede arne_v Ekspert
23. januar 2005 - 23:32 #14
Det er jo ret nemt at lade property set metoder også sætte et dirty flag.
Avatar billede askhoej Praktikant
23. januar 2005 - 23:36 #15
hmm dirty flag - den er jeg vist ikke helt med på?
Avatar billede arne_v Ekspert
23. januar 2005 - 23:39 #16
dirty = ændret
Avatar billede arne_v Ekspert
23. januar 2005 - 23:41 #17
Det giver en masse muligheder:

- automatisk update ved dispose hvis dirty

- update kald ignoreres hvis ikke dirty

- mulighed for at checke om dirty og derfor skal updates
Avatar billede askhoej Praktikant
23. januar 2005 - 23:45 #18
Det er en god ide, den er blevet skrevet på listen :-)
Avatar billede askhoej Praktikant
24. januar 2005 - 08:57 #19
Et lille spørgsmål til de to herrer, med hensyn til at lave fields til int så støder jeg hele tiden ind i problemet med at int's ikke kan være null. Jeg kan se at der kommer nullable types i C# 2.0.

Er der nogen bedre måde end at lade int.MinValue være lig null?
Avatar billede arne_v Ekspert
24. januar 2005 - 10:08 #20
Det er et problem som skal løses. Men du ville jo få problemet alligevel
med property.

Løsningen må afhænge konteksten. Men OK din generator kender ikke
konteksten.

int.MinValue

0
Avatar billede askhoej Praktikant
24. januar 2005 - 10:38 #21
Hmm...hvorfor skal det være så besværligt... ;-)

Jeg tror jeg vil arbejde videre med int.MinValue, decimal.MinValue etc. og så vente på C# 2.0.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester