Avatar billede tomjelen Nybegynder
12. marts 2004 - 12:29 Der er 1 kommentar og
1 løsning

DataSet.GetXml() og null værdier

Jeg har en metode der ser sådan her ud:

public string getCustomerInfo(int id)
{
    OleDbCommand cmd;
    DataSet ds = new DataSet("Customers");
    OleDbDataAdapter da = new OleDbDataAdapter();
    cmd = new OleDbCommand("xxx.getCustomerInfo ?", conn);
    cmd.Parameters.Add("@CID", OleDbType.Integer);
    cmd.Parameters["@CID"].Value=id;

    da.SelectCommand = cmd;
    da.Fill(ds,"Customer");
    return ds.GetXml();           
}

Den går ned i min database og henter noget information om en bruger ud og returnere det som en XML string der f.eks ser sådan her ud.

<Customers>
  <Customer>
    <CustomerFirstName>Tom</CustomerFirstName>
    <CustomerLastName>Jelen</CustomerLastName>
    <CustomerEmail1>tom@mail.dk</CustomerEmail1>
  </Customer>
</Customers>

Men nu hvis jeg nu ikke har nogen email adresse, og der derfor så står "NULL" i den celle i databasen, så bliver <CustomerEmail1> elementet bare fjernet fra XML strengen. Det giver mig lidt problemer senere hen når jeg henter f.eks emails ud af XML stringen med følgende og forventer at få to customers ud med min forespørgelse:

public void testGetCustomerInfo()
{
    resetDb();
    XmlDocument xd = new XmlDocument();
    xd.LoadXml(dbc.getCustomerInfo(1));
    XmlNodeList xnl = xd.GetElementsByTagName("CustomerEmail1");
    xe = (XmlElement)xnl.Item(0);
    Assert.Equals(customerEmail1, xe.InnerText);

    xe = (XmlElement)xnl.Item(1);
    Assert.Equals(customerEmail2, xe.InnerText);

}

GetElementsByTagName("CustomerEmail1") giver nu kun en xmlnode, og jeg kan ikke rigtigt se om det er den første eller den anden customer hvor <CustomerEmail1> tagget mangler.

Er der en måde at få dataSet.GetXML til at putte null ind hvor der en null værdi, eller er der en der kan sætte mig ind i en bedre måde at kigge XML strengen igennem hvor jeg kan se i hvilken customer elementet mangler?

Har overvejet bare at bruge tomme strings i stedet for NULL i databasen, men virker ikke særlig optimalt.
Avatar billede tomjelen Nybegynder
12. marts 2004 - 16:07 #1
Har nu ændrede mine stored procedure til noget lign dette

select *, BugDescReply = case when BugDescReply is Null Then '' Else BugDescReply End
from tblbugs

Men leder stadig efter en bedre løsning, vhis der er en
Avatar billede tomjelen Nybegynder
15. marts 2004 - 10:14 #2
hmm, det bliver vel min løsning så
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