FAQ |
Kalender |
2010-04-19, 13:00 | #1 | |||
|
||||
Mycket flitig postare
|
Finns det något enkelt sätt att lagra en rad från en databas i en hashtable i c#.
Eg. jag har en tabell med kolumnerna namn, adress, telefonnr etc... Och vill kunna komma åt dom i c# som name= datarad["namn"]; adress = datarad["adress"]; etc. |
|||
Svara med citat |
2010-04-19, 13:26 | #2 | ||
|
|||
Bara ett inlägg till!
|
Jag är lite osäker på vad du menar när du nämner hashtable men din syntax indikerar att du använder/vill använda variabler.
Hur som helst: Hashtable ht = new Hashtable(); ht.Add("namn", datarad["namn"]); ht.Add("adress", datarad["adress"]); |
||
Svara med citat |
2010-04-19, 13:39 | #3 | |||
|
||||
Mycket flitig postare
|
Jag har data i en sql tabell med fälten "namn", "adress" etc. och vill komma åt det i c# genom att skriva tex. namn=datarad["namn"]; istället för namn=sqlreader.getString(0);
Jag vet att det går att lösa genom att loopa igenom alla rader och lägga in dom i en hashtable, men det borde finnas någon smidig inbyggd lösningen. Senast redigerad av vco-systems den 2010-04-19 klockan 13:42 |
|||
Svara med citat |
2010-04-19, 13:52 | #4 | |||
|
||||
Bara ett inlägg till!
|
Du menar sqlreader["namn"]?
Enda problemet är att det är otypat |
|||
Svara med citat |
2010-04-19, 16:11 | #5 | ||
|
|||
Bara ett inlägg till!
|
Kod:
sql.CommandText = "SELECT name FROM users"; read = sql.ExecuteReader(); while (read.Read()) { Response.Write(read["name"].ToString()); } |
||
Svara med citat |
2010-04-20, 05:14 | #6 | ||
|
|||
Klarade millennium-buggen
|
Exempel skrivet i C#
Kod:
//C# File: Module1.cs static class Module1 { //Struktur public struct PersonC { public string namn; public string adress; } public static void Main() { testPersonA(); testPersonB(); testPersonC(); } public static void testPersonA() { PersonA Adam1 = new PersonA(); PersonA Adam2 = new PersonA(); PersonA Adam3 = new PersonA(); PersonA Adam4 = new PersonA(); PersonA Adam5 = new PersonA(); List<PersonA> AdamLista = new List<PersonA>(); //En enstaka förekomst Adam1.namn = "Adam 1"; Adam1.adress = "Adamsvägen 1"; Debug.Print(Adam1.toString); Adam2.namn = "Adam 2"; Adam2.adress = "Adamsvägen 2"; Adam3.namn = "Adam 3"; Adam3.adress = "Adamsvägen 3"; Adam4.namn = "Adam 4"; Adam4.adress = "Adamsvägen 4"; Adam5.namn = "Adam 5"; Adam5.adress = "Adamsvägen 5"; //En lista av förekomster AdamLista.Add(Adam1); AdamLista.Add(Adam2); AdamLista.Add(Adam3); AdamLista.Add(Adam4); AdamLista.Add(Adam5); PersonA adamA = default(PersonA); foreach (var adamA in AdamLista) { Debug.Print(adamA.toString); } } public static void testPersonB() { PersonB Bertil1 = new PersonB(); PersonB Bertil2 = new PersonB(); PersonB Bertil3 = new PersonB(); PersonB Bertil4 = new PersonB(); PersonB Bertil5 = new PersonB(); List<PersonB> BertilLista = new List<PersonB>(); //En enstaka förekomst Bertil1.namn = "Bertil 1"; Bertil1.adress = "Bertilsvägen 1"; Debug.Print(Bertil1.toString); Bertil2.namn = "Bertil 2"; Bertil2.adress = "Bertilsvägen 2"; Bertil3.namn = "Bertil 3"; Bertil3.adress = "Bertilsvägen 3"; Bertil4.namn = "Bertil 4"; Bertil4.adress = "Bertilsvägen 4"; Bertil5.namn = "Bertil 5"; Bertil5.adress = "Bertilsvägen 5"; //En lista av förekomster BertilLista.Add(Bertil1); BertilLista.Add(Bertil2); BertilLista.Add(Bertil3); BertilLista.Add(Bertil4); BertilLista.Add(Bertil5); PersonB BertilB = default(PersonB); foreach (var BertilB in BertilLista) { Debug.Print(BertilB.toString); } } public static void testPersonC() { PersonC Caesar1 = new PersonC(); PersonC Caesar2 = new PersonC(); PersonC Caesar3 = new PersonC(); PersonC Caesar4 = new PersonC(); PersonC Caesar5 = new PersonC(); List<PersonC> CaesarLista = new List<PersonC>(); //En enstaka förekomst Caesar1.namn = "Caesar 1"; Caesar1.adress = "Caesarsvägen 1"; Debug.Print(Caesar1.ToString); Caesar2.namn = "Caesar 2"; Caesar2.adress = "Caesarsvägen 2"; Caesar3.namn = "Caesar 3"; Caesar3.adress = "Caesarsvägen 3"; Caesar4.namn = "Caesar 4"; Caesar4.adress = "Caesarsvägen 4"; Caesar5.namn = "Caesar 5"; Caesar5.adress = "Caesarsvägen 5"; //En lista av förekomster CaesarLista.Add(Caesar1); CaesarLista.Add(Caesar2); CaesarLista.Add(Caesar3); CaesarLista.Add(Caesar4); CaesarLista.Add(Caesar5); PersonC CaesarC = default(PersonC); foreach (var CaesarC in CaesarLista) { Debug.Print(CaesarC.ToString); } } } Kod:
//C# Class File: PersonA.cs //Denna klass använder properties public class PersonA { private string _namn; public string namn { get { return _namn; } set { _namn = value; } } private string _adress; public string adress { get { return _adress; } set { _adress = value; } } // Default constructor public void PersonA() { } //Constructor med två parametrar public void PersonA(string pNamn, string pAdress) { namn = pNamn; adress = pAdress; } public override string toString() { return namn + ", " + adress; } } Kod:
//C# Class File: PersonB.cs //Denna klass använder publika instansvaruiabler public class PersonB { public string namn = ""; public string adress = ""; public override string toString() { return namn + ", " + adress; } } Exempel skrivet i Visual Basic .NET: Kod:
'Visual Basic Module File: Module1.bas Module Module1 'Struktur Structure PersonC Public namn As String Public adress As String End Structure Sub Main() testPersonA() testPersonB() testPersonC() End Sub Sub testPersonA() Dim Adam1 As New PersonA() Dim Adam2 As New PersonA() Dim Adam3 As New PersonA() Dim Adam4 As New PersonA() Dim Adam5 As New PersonA() Dim AdamLista As New List(Of PersonA) 'En enstaka förekomst Adam1.namn = "Adam 1" Adam1.adress = "Adamsvägen 1" Debug.Print(Adam1.toString) Adam2.namn = "Adam 2" Adam2.adress = "Adamsvägen 2" Adam3.namn = "Adam 3" Adam3.adress = "Adamsvägen 3" Adam4.namn = "Adam 4" Adam4.adress = "Adamsvägen 4" Adam5.namn = "Adam 5" Adam5.adress = "Adamsvägen 5" 'En lista av förekomster AdamLista.Add(Adam1) AdamLista.Add(Adam2) AdamLista.Add(Adam3) AdamLista.Add(Adam4) AdamLista.Add(Adam5) Dim adamA As PersonA For Each adamA In AdamLista Debug.Print(adamA.toString) Next End Sub Sub testPersonB() Dim Bertil1 As New PersonB() Dim Bertil2 As New PersonB() Dim Bertil3 As New PersonB() Dim Bertil4 As New PersonB() Dim Bertil5 As New PersonB() Dim BertilLista As New List(Of PersonB) 'En enstaka förekomst Bertil1.namn = "Bertil 1" Bertil1.adress = "Bertilsvägen 1" Debug.Print(Bertil1.toString) Bertil2.namn = "Bertil 2" Bertil2.adress = "Bertilsvägen 2" Bertil3.namn = "Bertil 3" Bertil3.adress = "Bertilsvägen 3" Bertil4.namn = "Bertil 4" Bertil4.adress = "Bertilsvägen 4" Bertil5.namn = "Bertil 5" Bertil5.adress = "Bertilsvägen 5" 'En lista av förekomster BertilLista.Add(Bertil1) BertilLista.Add(Bertil2) BertilLista.Add(Bertil3) BertilLista.Add(Bertil4) BertilLista.Add(Bertil5) Dim BertilB As PersonB For Each BertilB In BertilLista Debug.Print(BertilB.toString) Next End Sub Sub testPersonC() Dim Caesar1 As New PersonC() Dim Caesar2 As New PersonC() Dim Caesar3 As New PersonC() Dim Caesar4 As New PersonC() Dim Caesar5 As New PersonC() Dim CaesarLista As New List(Of PersonC) 'En enstaka förekomst Caesar1.namn = "Caesar 1" Caesar1.adress = "Caesarsvägen 1" Debug.Print(Caesar1.ToString) Caesar2.namn = "Caesar 2" Caesar2.adress = "Caesarsvägen 2" Caesar3.namn = "Caesar 3" Caesar3.adress = "Caesarsvägen 3" Caesar4.namn = "Caesar 4" Caesar4.adress = "Caesarsvägen 4" Caesar5.namn = "Caesar 5" Caesar5.adress = "Caesarsvägen 5" 'En lista av förekomster CaesarLista.Add(Caesar1) CaesarLista.Add(Caesar2) CaesarLista.Add(Caesar3) CaesarLista.Add(Caesar4) CaesarLista.Add(Caesar5) Dim CaesarC As PersonC For Each CaesarC In CaesarLista Debug.Print(CaesarC.ToString) Next End Sub End Module Kod:
'Visual Basic Class File: PersonA.cls 'Denna klass använder properties Public Class PersonA Private _namn As String Public Property namn() As String Get Return _namn End Get Set(ByVal value As String) _namn = value End Set End Property Private _adress As String Public Property adress() As String Get Return _adress End Get Set(ByVal value As String) _adress = value End Set End Property ' Default constructor Public Sub New() End Sub 'Constructor med två parametrar public Sub New(ByVal pNamn As String, ByVal pAdress As String) namn = pNamn adress = pAdress End Sub Public Overrides Function toString() As String Return namn + ", " + adress End Function End Class Kod:
'Visual Basic Class File: PersonB.cls 'Denna klass använder publika instansvaruiabler Public Class PersonB Public namn As String = "" Public adress As String = "" Public Overrides Function toString() As String Return namn + ", " + adress End Function End Class Senast redigerad av Conny Westh den 2010-04-20 klockan 13:45 |
||
Svara med citat |
2010-04-20, 05:23 | #7 | ||
|
|||
Klarade millennium-buggen
|
(Fick ej plats i nom 10k gränsen för ett inlägg så jag får skapa ett nytt ...)
Ovan visar jag på tre olika sätt att göra ett transient objekt som kan bära en komplex blandning av datatyper (dom i en rad i en databas). Alla tre olika metoderna har sina egna fördelar och nackdelar. Hashtable är inte bra sätt att jobba i ett objektorienterat språk för att lagra sammanhängande data. Det är att göra våld på objektorienteringens grundprinciper. Den mest objektoerienterade och kraftffulla metoden nedan är klassen PersonA som använder det mycket kraftfulla begreppet Properties i C#/VB.NET. PersonB använder en gammaldags och lite enklare variant som använder publika instansvariabler för att lagra data i ett objekt. Den tredje och mest primitiva metoden är att använda Strukturer (som den som jobbat med C/C++ känner igen) som jag gör i PersonC Ovan. Här har du i vart fall några olika infallsvinklar som leder dig in på ett mer objektoerienterat synsätt. Senast redigerad av Conny Westh den 2010-04-20 klockan 05:25 |
||
Svara med citat |
2010-04-20, 08:30 | #8 | ||
|
|||
Klarade millennium-buggen
|
Fick inte plats med det i inlägget men om man lägger denna metod som en egen metod i Module1.bas i Visual Basic så ser man hur enkelt det blir när man jobbar Objektoerienterat:
Kod:
'I VB.NET ser metoden ut så här... Sub testPersonAnew() Dim AdamLista As New List(Of PersonA) 'En lista av förekomster AdamLista.Add(New PersonA("Adam1", "Adamsvägen 1")) AdamLista.Add(New PersonA("Adam2", "Adamsvägen 2")) AdamLista.Add(New PersonA("Adam3", "Adamsvägen 3")) AdamLista.Add(New PersonA("Adam4", "Adamsvägen 4")) AdamLista.Add(New PersonA("Adam5", "Adamsvägen 5")) Dim adamA As PersonA For Each adamA In AdamLista Debug.Print(adamA.toString) Next End Sub Kod:
//I C# ser metoden ut så här... public void testPersonAnew() { List<PersonA> AdamLista = new List<PersonA>(); //En lista av förekomster AdamLista.Add(new PersonA("Adam1", "Adamsvägen 1")); AdamLista.Add(new PersonA("Adam2", "Adamsvägen 2")); AdamLista.Add(new PersonA("Adam3", "Adamsvägen 3")); AdamLista.Add(new PersonA("Adam4", "Adamsvägen 4")); AdamLista.Add(new PersonA("Adam5", "Adamsvägen 5")); PersonA adamA = default(PersonA); foreach (var adamA in AdamLista) { Debug.Print(adamA.toString); } } Senast redigerad av Conny Westh den 2010-04-20 klockan 08:46 |
||
Svara med citat |
2010-04-20, 15:04 | #9 | |||
|
||||
Mycket flitig postare
|
Citat:
Det har ingen betydelse att det är otypat, det är mer för att enkelt kunna fixa inläsningen från databas även om man lägger till något fält i databasen. |
|||
Svara med citat |
2010-04-20, 15:11 | #10 | |||
|
||||
Mycket flitig postare
|
Citat:
Eg. varje data för varje PersonA finns lagrat i en databas |
|||
Svara med citat |
Svara |
|
|