回到HeroData.cs文件。为了方便,将连接字符串从getNoXML()方法中取出,赋予一个类级别的私有变量,如:
private String connString = "…";
自己手动填加List9中的代码,而非通过插件产生以下代码:
Listing 9: getWithXML Webmethod
| [WebMethod()] public virtual XmlDocument getWithXML(int heroID) { DB2Connection conn = new DB2Connection(); conn.ConnectionString = connString; conn.Open(); DB2Command cmd = conn.CreateCommand(); XmlDocument heroXml = new XmlDocument(); String sel = @"select XMLELEMENT (NAME ""HERODATA"", XMLELEMENT (NAME ""HeroName"", HERONAME), XMLELEMENT (NAME ""Notes"", NOTES)) from NULLID.HEROES_XML where HEROID = " + heroID.ToString() + ";"; cmd.CommandText = sel; XmlReader xr = cmd.ExecuteXmlReader(); try { heroXml.Load(xr); } catch (DB2Exception ex) { throw ex; } finally { conn.Close(); } return heroXml; } |
在代码声明段,增加如下:
using System.Xml;
一些关于该方法的注解:
- 就像我提到的,你有一些荒谬的方法来获取数据。你注意到这个特别的技术因为它更加的短。它不包含任何DB2DataAdapter值,而是直接将值独到XmlReader值中。这将更容易的使用XmlDocument.Load()方法来转换为XmlDocument。
- 这里,返回类型是XmlDocument而不是XmlDataDocument,结果是一样的,你将在后面看到它们可以被JavaScript通过responseXML访问。
- 注意被选择的语句,你将看到新的命令:XMLELEMENT。它和其它的XML相关的SQL命令帮助你从SQL语句中格式化你的结果为XML。这里,你创建了一个HERODATA节点,然后使用“HeroName”和XML栏“Notes”来导出。这样的方式使得你可以混合数据类型,快速放回一个持久的高可访问的结果集。




