| FAQ |
| Kalender |
|
|
|
|
#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
|
|
|
#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
|
|
|
#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 14:42 |
|||
|
|
Svara med citat
|
|
|
#4 | |||
|
||||
|
Bara ett inlägg till!
|
Du menar sqlreader["namn"]?
Enda problemet är att det är otypat |
|||
|
|
Svara med citat
|
|
|
#5 | |||
|
||||
|
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
|
|
|
#6 | ||
|
|||
|
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
|
|
|
#7 | ||
|
|||
|
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 14:45 |
||
|
|
Svara med citat
|
|
|
#8 | ||
|
|||
|
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 06:25 |
||
|
|
Svara med citat
|
|
|
#9 | |||
|
||||
|
Mycket flitig postare
|
Citat:
Eg. varje data för varje PersonA finns lagrat i en databas |
|||
|
|
Svara med citat
|
|
|
#10 | ||
|
|||
|
Klarade millennium-buggen
|
Finns det någon specifik anledning till att du använder hashtables just i detta fall? För mig var det inte ett självklart val!
|
||
|
|
Svara med citat
|
| Svara |
|
|