29 juli 2007

Fra Sql til C# object - del 2


Så er ferien ved at være ovre - og jeg har fået lagt sidste hånd på første version af min kodegenerator, som automatisk kan wrappe en .Net klasse rundt om en Sql-tabel.

Jeg har i mangel af bedre navn kaldt den CodeMagic - Sql 2 Object.

Under arbejdet vælger man en database og herefter en tabel. Tabellens felter kan man så vælge at omdøbe i klasse, ændre typer på, ændre skrivebeskyttelse og "null-barhed". Herefter generes cs kode og lidt sql-proc/view.

Undervejs bruges nogle lister over konvertering mellem sql-typer og .net typer. Desuden omdøbes sql-feltnavne automatisk, hvis de f.eks. hedder [Tabel].[Sælger nr.] - som f.eks. Navision synes at det er rart at kalde et sql-felt.

Jeg mangler dog en måde at kunne gemme undervejs i dette forløb og starte igen senere. Jeg leger lidt med tanken om bare at serialisere det objekt, som håndterer arbejdet i en xml-fil, så kan hentes senere. Det skulle vel kunne lade sig gøre...

Etiketter: ,

11 juli 2007

Fra Sql til C# object


Noget jeg ofte føler som drøjsomt arbejde er at lave en klasse som wrapper en sql-tabel (f.eks. Customers i Northwind), så klassen kan loade og save samt har de rette properties i forhold til tabellens kolonner.

Jeg har ikke haft held med at finde noget, som kan gøre det for mig, hvilket jeg synes er mærkeligt, da det da må være et gængs behov.

Men derfor er jeg så småt begyndt at brygge på en funktion som man kan pege ind på en tabel i en sql-database - og hvor den så returnerer en klasse, som wrapper tabellen.

Etiketter: ,

07 juli 2007

Fra DBNulls til almindelige nulls

Jeg har længe døjet med slidsom kodning, når jeg hev data fra en database til et .Net objekt:
Hvis feltet er null, så returneres værdien System.DBNull.Value - og den kan ikke castes til f.eks. en streng.

Dvs.
IDataReader dr;
(...)
string s = (string)dr["Felt_Streng"];

vil fejle hvis værdien i "Felt_Streng" er null i databasen.

Derfor har jeg lavet denne lille konverter:

static T ConvertDBNull<t>(object o)
{
if (o == System.DBNull.Value)
return default(T);
return (T)o;
}


Nu kan jeg skrive

IDataReader dr;
(...)
string s = ConvertDBNull<string>(dr["Felt_Streng"]);

Og eftersom der returneres default-værdien, så virker det også på objekter, som ikke kan være null (f.eks. int).

Etiketter: ,

Programmering i 41000 fod

Hvis du interesserer dig for programmering (primært .Net), så skulle du kigge lidt på denne blog af min gode ven, Poul. Han er ubetinget den dygtigste programmør, jeg kender - desværre er han lidt doven med sine blog indlæg :-)

Men det er nok fordi han har travlt med arbejde - hvis du mangler en dygtig programmør (og har en million eller to), så kan du måske lokke et par måneder ud af ham...

Poul Foged Nielsens blog

Etiketter:

Billigt, men godt teleobjektiv?

Jeg har købt et nyt objektiv fra Sigma til mit Canon EOS 350D. Det er et telobjektiv (70-300mm) og til trods for en pris på under 1.000 kr. ekskl. moms, så er det faktisk ret godt.

Billedet til højre er et lille udsnit (skaleret ned i 50%) af et portræt foto taget på 3 meters afstand.

I Emmas øje kan den kyndige se, at jeg benytter en ekstern flash fra Sigma (DG500 super med E-TTLII). Det er i øvrigt også kram... :-)

Etiketter:

2008 på fiber

Jeg husker stadig, hvor lang tid det tog at hente 1 mb over mit 36k modem. Det er egentligt ikke længe siden.

Nu har TDC endelig fået gang i fiberen - og så kan man altså hente 1.76GB på ca. 13 minutter. (Træls at linien er forbrugsafregnet...)



Det er i øvrigt Windows Server 2008 Beta der er på vej ned. Jeg har bemærket, at 64-bit nu er standard. Det må vel også betyde, at man har indset at en grænse på 4 gb ram er urimelig?

Jeg tester den og skriver nok lidt om, hvordan det går.

Etiketter: ,