Har skapat en liten metod for att gora mina oandligt manga lasningar fran DB lite renare och snyggare: Jag hade nog övervägt att använda en O/R-mapper, ex: Har du verkligen ett scenario med 10 milj läsningar i din app där någon blir berörd av tidsåtgången? Jag tror att du kan använda GetObject() i stället för GetOrdinal(). Då får du ett boxat värde som har rätt typ.Generics fraga
private T PopulateField<T>(SqlDataReader Reader, String Name)
{
if (!Reader.IsDBNull(Reader.GetOrdinal(Name)))
{
return (T)Reader[Name];
}
return default(T);
}
For att anvanda denna metod skriver jag foljande:
string name = PopulateField<string>(results, "Name");
DateTime birthday = PopulateField<DateTime>(results, "Birthday");
Enkelt och rent.. (results ar min datareader och strangen jag skickar in ar namnet pa kolumnen)
Problemet kom nar jag ville ladda en variabel av typ char. Da kastas exceptions for den implicita omvandlingen inte ar tillaten, sa jag satsade pa att losa det pa foljande satt:
private T PopulateField<T>(SqlDataReader Reader, String Name)
{
if (!Reader.IsDBNull(Reader.GetOrdinal(Name)))
{
if (typeof(T) == typeof(char))
return (T)(object)char.Parse(Reader[Name].ToString());
return (T)Reader[Name];
}
return default(T);
}
Detta ar givetvis langsammare, har gjort lite tester och man tappar en del tid. Inga enorma mangder dock, man marker mest av det vid 10 miljoner+ iterationer.
Ar jag helt ute och cyklar? Finns det snyggare och battre satt att losa detta pa?
mvh
Sv: Generics fraga
NHibernate (Open Source)
http://en.wikipedia.org/wiki/NHibernate
Entity Framework (MS motsvarighet, finns med i .Net 3.5 sp1)
http://msdn.microsoft.com/en-us/library/aa697427(VS.80).aspxSv: Generics fraga
Eller är det ett konstruerat problem?Sv: Generics fraga
Jag har gjort något liknande och det funkar för alla datatyper utom Nullable<enum>. (Se http://andersivner.blogspot.com/2008/05/nullable-enums.html)
/Anders