Avatar billede tj_cuper Nybegynder
29. april 2008 - 16:05 Der er 12 kommentarer

Loop data i webservice

Hej nogen der kan sige mig hvorfor den kun tager den første række i databasen. Søgt rundt på nettet, men ikke rigtig fundet noget.

Prøvede med return objArticles.getAllArticles();
Men så kommer der bare alt muligt junk med :-)

Så håber en af jer kan hjælpe mig, så det kan clean ud :P

//webservice//

[WebMethod]
    public PropertyLayer.Articles getAllArticles()
    {
        DataRow[] allRows = objArticles.getAllArticles().Select();

        foreach (DataRow article in allRows)
        {
            proArticles.id = Convert.ToInt32(article["id"]);
            proArticles.hits = Convert.ToInt32(article["hits"]);
            proArticles.category = Convert.ToInt32(article["category"]);
            proArticles.published = Convert.ToInt32(article["accesslevel"]);
            proArticles.author = article["author"].ToString();
            proArticles.title = article["title"].ToString();
            proArticles.text = article["text"].ToString();
            proArticles.created = Convert.ToDateTime(article["created"]);
            proArticles.modified = Convert.ToDateTime(article["modified"]);
        }
        return proArticles;
    }


//PropertyLayer//

private int _id;
private int _hits;
private int _category;
private int _published;
private int _accesslevel;
private string _author;
private string _title;
private string _text;
private DateTime _created;
private DateTime _modified;
public int id
{
  get { return _id; }
  set { _id = value; }
}

public int hits
{
  get { return _hits; }
  set { _hits = value; }
}

osv. osv.
Avatar billede nielle Nybegynder
29. april 2008 - 17:48 #1
Du gør jo ikke noget for at returnere et array.

Din foreach-løkke overskriver den samme værdi af proArticles for hvert gennemløb. Dermed ender du med den allersidste rækker fra databasen. Det er den der returneres.
Avatar billede tj_cuper Nybegynder
29. april 2008 - 18:02 #2
Hmm fordi jeg ikke er interesseret i et array, men derimod en xml med dataerne.

Kan man vel godt uden et array...?
Avatar billede nielle Nybegynder
29. april 2008 - 21:11 #3
Det kan man godt ja.

Men hvor har du da noget kode som laver det xml?

Grunden til at du kun får en post ud (den sidste) er under alle omstændigheder fordi at du bare overskriver den sammen post, proArticles, hver gang foreach'en tager den næste post.
Avatar billede sovsekoder Nybegynder
29. april 2008 - 21:13 #4
kode:

        public PropertyLayer.Articles getAllArticles()
        {
            DataRow[] allRows = objArticles.getAllArticles().Select();

            PropertyLayer.Articles articles = null;
            if (allRows.Length > 0)
            {
                DataRow[] article = allRows[0];
                proArticles = new PropertyLayer.Articles();
                proArticles.id = Convert.ToInt32(article["id"]);
                proArticles.hits = Convert.ToInt32(article["hits"]);
                proArticles.category = Convert.ToInt32(article["category"]);
                proArticles.published = Convert.ToInt32(article["accesslevel"]);
                proArticles.author = article["author"].ToString();
                proArticles.title = article["title"].ToString();
                proArticles.text = article["text"].ToString();
                proArticles.created = Convert.ToDateTime(article["created"]);
                proArticles.modified = Convert.ToDateTime(article["modified"]);
            }           
            return proArticles;
        }
Avatar billede tj_cuper Nybegynder
29. april 2008 - 21:35 #5
hmm får en del i forbindelse med convert string to int.

Er der evt. en anden løsningen :)?
Avatar billede sovsekoder Nybegynder
29. april 2008 - 22:13 #6
hvad mener du med "for en del i forbindelse med convert..."
for du fejl?
exception?
uventet resultat, og hvordan ser det ud?
kører du koden jeg postede?
Avatar billede tj_cuper Nybegynder
29. april 2008 - 22:29 #7
Jeg copy pastede koden ind. Får fejl ved DataRow[] article = allRows[0];
Cannot implicitly convert type 'System.Data.DataRow' to 'System.Data.DataRow[]

Også kommer der fejl ved alle database felterne:
Cannot implicitly convert type 'string' to 'int'

Så ændrede jeg DataRow[] article = allRows[0];
til DataRow article = allRows[0];

Så køre alt igennem, men så har vi problemet med det kun er de sidste rækker i databasen, som der bliver vist.

Så tænkte på om du havde en anden løsning :)

På forhånd tak.
Avatar billede sovsekoder Nybegynder
29. april 2008 - 22:52 #8
arh ja, det skulle være DataRow som du skriver...

jeg ved godt at jeg kommer til at lyde som en oldkløver. men vi har kun hevet een række ud, så når du skriver "de sidste rækker", er der enten noget jeg ikke ved eller også er det en skrive fejl fra din side...

men hvis element 0 i dit row-array skal være "første række" må du ordne dit query med "order by <feltnavn> asc" eller afhængigt af hvad du opfatter som den "førse række: "order by <feltnavn> desc"
Avatar billede tj_cuper Nybegynder
29. april 2008 - 22:59 #9
Det var en taste fejl for min side.

Det jeg mente var, at den stadig kun viste 1 række fra min database og ikke alle 5 :(

Så kan ikke rigtig se, det kan være noget med min query at gøre. Der har jeg bare brugt en ganske enkelt "SELECT * FROM articles ORDER BY ID DESC".
Avatar billede sovsekoder Nybegynder
30. april 2008 - 06:27 #10
ok, jeg opfattede tråden som at du kun ville returnere een.

Hvis du vil returnere flere, vil jeg anbefale dig at returnere i et array, så din returtype bliver article[]. Så du itererer over alle Datarows:

...
Article[] a = new Article[allRows.Length];
for(int i=0; i<allRows.Length; i++)
{
  DataRow articleRow = allRows[i];
  a[i] = new Article[];
  a.id = Convert.ToInt32(articleRow["id"]);
  a.hits = Convert.ToInt32(articleRow["hits"]);
  ...
}

return a;
Avatar billede sovsekoder Nybegynder
30. april 2008 - 06:28 #11
jeg undres over hvorfor din returtype hedder Articles (med s) og ikke article.
Avatar billede tj_cuper Nybegynder
16. maj 2008 - 22:33 #12
Kan jeg ikke få den til, at return alt i xml nodes?

For vil gerne anvende XSLT senere i processen.
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