技术开发 频道

SQL Server XML查询工具


【IT168技术文档】

  SQL Server 提供了一个非常好用的客户端检索工具-查询分析器,但是美中不足的是查询分析器无法对XML查询给出很好的结果,用户无法完整查看XML结果集。上学期给 IBM电子商务班讲XML与WebService时,不得不自己写了一个程序执行XML检索。虽然程序实在有些简陋,但毕竟可以完成课堂演示的要求。

  程序主体是通过sqlCommand的ExecuteXmlReader方法完成的。我添加了一些对特殊字符的MIME编码(这一部分应当有现成代码,不过我没有找到,只好自己将就着写了),以及XML格式处理功能。先贴上一些代码,具体可以自己下载后看。希望多提宝贵意见。

  关键代码:
private void btnSearch_Click(object sender, System.EventArgs e) { string s = "<?xml version="1.0" encoding="utf-8"?><SearchResult>"; string endWith = ""; // 创建连接对象实例 SqlConnection myConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectString"]); SqlCommand myCommand = new SqlCommand(txtCondition.Text, myConnection); myCommand.CommandType = CommandType.Text; // 创建 XML Reader,并读取数据到 XML 字符串中 XmlTextReader xmlReader = null; try { // 打开数据库连接 myConnection.Open(); // 运行存储过程并初始化 XmlReader xmlReader = (XmlTextReader)myCommand.ExecuteXmlReader(); while(xmlReader.Read()) { if (xmlReader.NodeType == XmlNodeType.Element) { s += "<" + xmlReader.Name; if (xmlReader.IsEmptyElement) endWith ="/"; else endWith = ""; if (xmlReader.HasAttributes) { while(xmlReader.MoveToNextAttribute()) s += " " + xmlReader.Name + "="" + ToMIMEString(xmlReader.Value) + """; } s += endWith + ">"; } else if (xmlReader.NodeType == XmlNodeType.EndElement) { s += "</" + xmlReader.Name + ">"; } else if (xmlReader.NodeType == XmlNodeType.Text) { if (xmlReader.Value.Length != 0) { s += ToMIMEString(xmlReader.Value); } } } s+="</SearchResult>"; txtResult.Text = s; } catch (Exception) { txtResult.Text = "Got an error"; //不处理任何错误 } finally { // 关闭数据库连接并清理 reader 对象 myConnection.Close(); xmlReader = null; } XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(s); //============================================= //将结果写入 //============================================= try { MemoryStream ms = new MemoryStream(); XmlTextWriter xtw = new XmlTextWriter(ms, Encoding.UTF8); xtw.Formatting = Formatting.Indented; xmlDoc.Save(xtw); byte[] buf = ms.ToArray(); txtResult.Text = Encoding.UTF8.GetString(buf,0,buf.Length); xtw.Close(); } catch { txtResult.Text = "出现错误!"; } } private string ToMIMEString(string s) { StringBuilder sb = new StringBuilder(); char[] source = s.ToCharArray(); foreach(char c in source) { if(c=='<') sb.Append("&lt;"); else if(c=='&') sb.Append("&amp;"); else if(c=='>') sb.Append("&gt;"); else if(c=='"') sb.Append("&quot;"); else sb.Append(c); } return sb.ToString(); }
  数据库连接可以通过修改 XML_Search.exe.config 文件实现。程序对本地默认SQL实例的Northwind数据库执行XML查询。
0
相关文章