Kom ihåg mig?
Home Menu

Menu


c# databas & hashtable

 
Ämnesverktyg Visningsalternativ
Oläst 2010-04-19, 13:00 #1
vco-systemss avatar
vco-systems vco-systems är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Dec 2004
Inlägg: 774
vco-systems vco-systems är inte uppkopplad
Mycket flitig postare
vco-systemss avatar
 
Reg.datum: Dec 2004
Inlägg: 774
Standard c# databas & hashtable

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.
vco-systems är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-04-19, 13:26 #2
eliasson eliasson är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Dec 2005
Inlägg: 1 863
eliasson eliasson är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Dec 2005
Inlägg: 1 863
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"]);
eliasson är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-04-19, 13:39 #3
vco-systemss avatar
vco-systems vco-systems är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Dec 2004
Inlägg: 774
vco-systems vco-systems är inte uppkopplad
Mycket flitig postare
vco-systemss avatar
 
Reg.datum: Dec 2004
Inlägg: 774
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
vco-systems är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-04-19, 13:52 #4
StefanBergfeldts avatar
StefanBergfeldt StefanBergfeldt är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Sep 2004
Inlägg: 1 535
StefanBergfeldt StefanBergfeldt är inte uppkopplad
Bara ett inlägg till!
StefanBergfeldts avatar
 
Reg.datum: Sep 2004
Inlägg: 1 535
Du menar sqlreader["namn"]?
Enda problemet är att det är otypat
StefanBergfeldt är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-04-19, 16:11 #5
eliasson eliasson är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Dec 2005
Inlägg: 1 863
eliasson eliasson är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Dec 2005
Inlägg: 1 863
Kod:
sql.CommandText = "SELECT name FROM users";
read = sql.ExecuteReader();
while (read.Read())
{
   Response.Write(read["name"].ToString());
}
eliasson är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-04-20, 05:14 #6
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
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
Conny Westh är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-04-20, 05:23 #7
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
(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
Conny Westh är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-04-20, 08:30 #8
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
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
Conny Westh är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-04-20, 15:04 #9
vco-systemss avatar
vco-systems vco-systems är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Dec 2004
Inlägg: 774
vco-systems vco-systems är inte uppkopplad
Mycket flitig postare
vco-systemss avatar
 
Reg.datum: Dec 2004
Inlägg: 774
Citat:
Ursprungligen postat av StefanBergfeldt Visa inlägg
Du menar sqlreader["namn"]?
Enda problemet är att det är otypat
Tack, hade missat att det funkade direkt i sqlreader. Alla exempel jag hittade på nätet använde bara [0], [1] etc.
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.
vco-systems är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-04-20, 15:11 #10
vco-systemss avatar
vco-systems vco-systems är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Dec 2004
Inlägg: 774
vco-systems vco-systems är inte uppkopplad
Mycket flitig postare
vco-systemss avatar
 
Reg.datum: Dec 2004
Inlägg: 774
Citat:
Ursprungligen postat av ConnyWesth Visa inlägg
(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.
Jag har inget problem med objektorienteringen, syftet var mer att underlätta inläsningen från databas av de data som varje instans av klassen ska ha.
Eg. varje data för varje PersonA finns lagrat i en databas
vco-systems är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 22:29.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017