Avatar billede thjakobsen Nybegynder
25. oktober 2007 - 16:34 Der er 16 kommentarer og
1 løsning

Mest optimale måde at hente/redigere data på til større projekter

Hej eksperter.

Hvis vi antager jeg skal lave en applikation i ASP.NET 2.0 C# op mod en MS SQL 2003 database, hvor der i gennemsnit er ca. 20 online brugere. Hver SELECT-forespørgsel op mod databasen vil returnere ca. 5000 rækker (i nogle tilfælde selvfølgelig kun en række).

Mit spørgsmål er så hvilken metode det er bedst at bruge når jeg skal hente disse dataer? Vil det være mest optimalt med et DataSet eller vil det være mest optimalt kun at bruge data readeren og på den måde ikke cache alt dataen (som datasettet gør). Det er ret vigtigt at det bliver den løsning der kræver mindst ressourcer. Både fra serverens side, men også brugerens (så de ikke skal vente så længe).

Dataen bliver gjort tilgængeligt for brugeren i et gridview, hvor de har mulighed for at sortere på kolonnerne, paging, og at redigere og slette rækkerne.

Jeg har ikke prøvet at lave projekter af denne størrelse før, så derfor vil jeg meget gerne have nogle inputs om hvordan man gør det på den bedst mulige måde. Kender I evt. til nogle artikler der omhandler emnet?

På forhånd tak!
Avatar billede neoman Novice
25. oktober 2007 - 16:54 #1
Lidt snak om emnet: http://www.eksperten.dk/spm/796377 (derinde er der et link til en artikel).
Avatar billede neoman Novice
25. oktober 2007 - 17:01 #2
Og det jeg lærte af artiklen samt arne_v's bemærkninger i den tråd er, at man nok skal kigge på hele konfigurationen og også teste, fordi ren teori kan komme og bide en i ¤%&#//# :)
Avatar billede arne_v Ekspert
26. oktober 2007 - 03:00 #3
Med meget store data mængder har du ikke noget valg.

Med normale data mængder et valget mellem (typed) data set og collections af egne klasser
(domain object model hvis det skal være fint) mere et valg mellem software arkitektur
stil end om performance.
Avatar billede thjakobsen Nybegynder
26. oktober 2007 - 07:59 #4
Tak for jeres kommentarer. Jeg har nu læst lidt om tingene ("domain object model" hjalp mig meget), og jeg har tænkt mig at forsøge med collections af egne klasser som arne_v skriver. Kender I nogle gode artikler om hvordan man bedst bygger disse op osv.?
Avatar billede arne_v Ekspert
27. oktober 2007 - 03:01 #5
Du kan finde 100 links til collections af egne klasser versus (typed) data sets.

Men der er ikke meget om opbygning af en objekt model.

Artikler som:
  http://www.codeproject.com/dotnet/GenericCustomClass.asp
  http://www.alachisoft.com/articles/m-n_relationships.html
er meget fragmentariske.

Men et par relevante bøger:

Applying UML and Patterns / Craig Larman
Patterns of Enterprise Application Architecture / Martin Fowler
Avatar billede thjakobsen Nybegynder
29. oktober 2007 - 21:45 #6
Tak for svaret.

Jeg er ikke rigtig kommet videre. Det ville være rart hvis I kendte en artikel der gennemgik det at lave et Data Access Layer som bruger datareaderen fremfor et dataset?
Avatar billede arne_v Ekspert
30. oktober 2007 - 03:04 #7
Det er som sagt svært at finde noget.

Efter at have vredet Google kom jeg op med:

http://forums.asp.net/t/1028073.aspx
http://leedale.wordpress.com/data-access-layer/
Avatar billede arne_v Ekspert
30. oktober 2007 - 03:09 #8
Jeg lavede engang dette her eksempel til et andet spørgsmål:

using System;
using System.IO;
using System.Xml;
using System.Data.OleDb;

namespace DAL
{
    public class AccountData
    {
        private string name;
        private decimal amount;
        public AccountData() : this("", 0.00m)
        {
        }
        public AccountData(string name, decimal amount)
        {
            this.name = name;
            this.amount = amount;
        }
        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value;
            }
        }
        public decimal Amount
        {
            get
            {
                return amount;
            }
            set
            {
                amount = value;
            }
        }
    }
    public interface AccountManager
    {
        AccountData Load(string name);
        void Save(AccountData ac);
    }
    public class AccountManagerFactory
    {
        public static AccountManager Create(string amtyp)
        {
            if(amtyp == "DB")
            {
                return new DatabaseAccountManager();
            }
            if(amtyp == "XML")
            {
                return new XmlAccountManager();
            }
            else
            {
                return null;
            }
        }
    }
    internal class DatabaseAccountManager : AccountManager
    {
        public AccountData Load(string name)
        {
            AccountData res;
            OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Databases\\MSAccess\\Test.mdb");
            con.Open();
            OleDbCommand sel = new OleDbCommand("SELECT amount FROM accounts WHERE name='" + name + "'", con);
            OleDbDataReader rdr = sel.ExecuteReader();
            if(rdr.Read())
            {
                decimal amount = (decimal)rdr[0];
                res = new AccountData(name, amount);
            }
            else
            {
                res = null;
            }
            con.Close();
            return res;
        }
        public void Save(AccountData ac)
        {
            OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Databases\\MSAccess\\Test.mdb");
            con.Open();
            OleDbCommand upd = new OleDbCommand("UPDATE accounts SET amount = " + ac.Amount + " WHERE name='" + ac.Name + "'", con);
            upd.ExecuteNonQuery();
        }
    }
    internal class XmlAccountManager : AccountManager
    {
        private const string XML_FILE = @"C:\accounts.xml";
        private XmlDocument doc;
        public XmlAccountManager()
        {
            doc = new XmlDocument();
            doc.Load(XML_FILE);
        }
        public AccountData Load(string name)
        {
            XmlNode n = doc.SelectSingleNode("//accounts/account[@name='" + name +"']");
            if(n != null)
            {
                decimal amount = decimal.Parse(n.Attributes["amount"].Value);
                return new AccountData(name, amount);
            }
            else
            {
                return null;
            }
        }
        public void Save(AccountData ac)
        {
            XmlNode n = doc.SelectSingleNode("//accounts/account[@name='" + ac.Name +"']");
            n.Attributes["amount"].Value = ac.Amount.ToString();
            StreamWriter sw = new StreamWriter(XML_FILE);
            doc.Save(sw);
            sw.Close();
        }
    }
}
Avatar billede tjakobsen Nybegynder
13. november 2007 - 17:59 #9
Jeg har fået løst mit problem.
I kan smide et svar, så skal jeg give points.
Avatar billede arne_v Ekspert
13. november 2007 - 18:09 #10
ok
Avatar billede neoman Novice
13. november 2007 - 18:24 #11
jeg har ikke bidraget med noget nævneværdigt, så det er arne_v's
Avatar billede tjakobsen Nybegynder
15. november 2007 - 10:20 #12
Hvorfor kan jeg ikke acceptere dit svar? Hmm..
Avatar billede arne_v Ekspert
15. november 2007 - 15:05 #13
marker navn ude i combo box saa det bliver blaat inden du klikker accepter

(E speciality)
Avatar billede tjakobsen Nybegynder
15. november 2007 - 18:35 #14
Det er underligt for jeg kan hverken se den combo box eller accepter.
Har ført accepteret svar på Eksperten.
Avatar billede arne_v Ekspert
15. november 2007 - 19:18 #15
hmmm ....

flere brugernavne ?

t versus th !
Avatar billede thjakobsen Nybegynder
15. november 2007 - 19:35 #16
Se det forklarede jo en del :-)
Tak for det.

Som en sidste ting - ved du så om det er muligt at få sin bruger slettet?
Avatar billede arne_v Ekspert
15. november 2007 - 19:41 #17
Jeg mener at man selv kan deaktivere sin konto.

Ellers kontakt snowball, saa kan han goere det.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester