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.
