SQL Server XML查询工具
创始人
2024-07-26 01:51:17
0

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

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

关键代码:

  1.  
  2. private void btnSearch_Click(object sender, System.EventArgs e)  
  3. {  
  4.  
  5.   string s = "";  
  6.   string endWith = "";  
  7.  
  8.   // 创建连接对象实例  
  9.   SqlConnection myConnection =   
  10.       new SqlConnection(ConfigurationSettings.AppSettings["ConnectString"]);  
  11.   SqlCommand myCommand = new SqlCommand(txtCondition.Text, myConnection);  
  12.   myCommand.CommandType = CommandType.Text;  
  13.  
  14.   // 创建 XML Reader,并读取数据到 XML 字符串中  
  15.   XmlTextReader xmlReader = null;  
  16.  
  17.   try  
  18.   {  
  19.     // 打开数据库连接  
  20.     myConnection.Open();  
  21.  
  22.     // 运行存储过程并初始化 XmlReader  
  23.     xmlReader = (XmlTextReader)myCommand.ExecuteXmlReader();  
  24.  
  25.     while(xmlReader.Read())  
  26.     {  
  27.       if (xmlReader.NodeType == XmlNodeType.Element)   
  28.       {  
  29.         s += "<" + xmlReader.Name;  
  30.           
  31.         if (xmlReader.IsEmptyElement)   
  32.           endWith ="/";  
  33.         else  
  34.           endWith = "";  
  35.           
  36.         if (xmlReader.HasAttributes)   
  37.         {  
  38.           while(xmlReader.MoveToNextAttribute())  
  39.             s += " " + xmlReader.Name + "="" + ToMIMEString(xmlReader.Value) + """;  
  40.         }  
  41.  
  42.         s += endWith + ">";  
  43.           
  44.       }  
  45.       else if (xmlReader.NodeType == XmlNodeType.EndElement)  
  46.       {  
  47.         s += "";  
  48.       }   
  49.       else if (xmlReader.NodeType == XmlNodeType.Text)   
  50.       {  
  51.         if (xmlReader.Value.Length != 0)   
  52.         {  
  53.           s += ToMIMEString(xmlReader.Value);  
  54.         }  
  55.       }  
  56.     }  
  57.  
  58.     s+="";  
  59.     txtResult.Text = s;          
  60.   }  
  61.   catch (Exception)  
  62.   {  
  63.     txtResult.Text = "Got an error";  
  64.     //不处理任何错误  
  65.   }  
  66.   finally  
  67.   {  
  68.     // 关闭数据库连接并清理 reader 对象  
  69.     myConnection.Close();  
  70.     xmlReader = null;  
  71.   }  
  72.  
  73.   XmlDocument xmlDoc = new XmlDocument();  
  74.   xmlDoc.LoadXml(s);  
  75.   //=============================================  
  76.   //将结果写入  
  77.   //=============================================  
  78.   try  
  79.   {  
  80.     MemoryStream ms = new MemoryStream();  
  81.     XmlTextWriter xtw = new XmlTextWriter(ms, Encoding.UTF8);  
  82.     xtw.Formatting = Formatting.Indented;  
  83.     xmlDoc.Save(xtw);  
  84.     byte[] buf = ms.ToArray();  
  85.     txtResult.Text = Encoding.UTF8.GetString(buf,0,buf.Length);  
  86.     xtw.Close();  
  87.   }  
  88.   catch  
  89.   {  
  90.     txtResult.Text = "出现错误!";  
  91.   }  
  92.  
  93. }  
  94.     
  95. private string ToMIMEString(string s)  
  96. {  
  97.   StringBuilder sb = new StringBuilder();  
  98.  
  99.   char[] ssource = s.ToCharArray();  
  100.   foreach(char c in source)  
  101.   {  
  102.     if(c=='<')  
  103.       sb.Append("<");  
  104.     else if(c=='&')  
  105.       sb.Append("&");  
  106.     else if(c=='>')  
  107.       sb.Append(">");  
  108.     else if(c=='"')  
  109.       sb.Append(""");  
  110.     else  
  111.       sb.Append(c);  
  112.   }  
  113.   return sb.ToString();  

数据库连接可以通过修改 XML_Search.exe.config 文件实现。程序对本地默认SQL实例的Northwind数据库执行XML查询。

【编辑推荐】

  1. SQL Server XML 入门的18句话
  2. SQL Server管理工具的升级
  3. 深入讨论SQL Server 表的主键问题
  4. SQL Server数据库中对图片进行保存和输出

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...