Looking at your function createXML, the return value xml is not being populated.
The createXML is returning a string so you do not need to use XDocument.
The while loop needs modifying to get the result only, you could do something like this:
string top = "";
string body = "";
string result = "";
while (reader.Read()){
top = reader.GetString(0);
body = reader.GetString(1);
result = result + top + "\r\n" + body + "\r\n";
}
xml = "<Start><properties><property name='Main' type='TEXT'><value>" + result + "</value></property></properties></Start>"
result = "<![CDATA[" + result + "]]>";
XDocument xDoc = new XDocument();
xDoc = XDocument.Parse(xml);
If you want to use the XDocument then use the same while loop above to get result and modify how the xml string is generated:
XElement xeRoot = new XElement("Start");
XElement xeSendTo = new XElement("properties");
XElement xeSendTo1 = new XElement("property");
xeSendTo1.Add(new XAttribute("name", "Main Content"));
xeSendTo1.Add(new XAttribute("type", "TEXT"));
xeSendTo1.SetElementValue("value", result);
xeSendTo.Add(xeSendTo1);
xeRoot.Add(xeSendTo);
XDocument xDoc = new XDocument(xeRoot);
xml = xDoc.ToString();
You should also consider changing the xml structure to add extra elements for title and content, something like this:
<Start>
<properties>
<property name="Main" type="TEXT">
<value>
<title>Title</title>
<content>content</content>
</value>
<value>
<title>Title</title>
<content>content</content>
</value>
</property>
</properties>
</Start>
Hope that helps out.
I have not tested and assume your general code to get the data is working.