zxg588 发表于 2015-7-3 12:50:16

SQL Server XML查询工具(附源码)

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

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

关键代码:



private void btnSearch_Click(object sender, System.EventArgs e)
{

string s = "";
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 += "";
      
      }
      else if (xmlReader.NodeType == XmlNodeType.EndElement)
      {
      s += "";
      }
      else if (xmlReader.NodeType == XmlNodeType.Text)
      {
      if (xmlReader.Value.Length != 0)
      {
          s += ToMIMEString(xmlReader.Value);
      }
      }
    }

    s+="";
    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(">");
    else if(c=='"')
      sb.Append(""");
    else
      sb.Append(c);
}
return sb.ToString();
}

数据库连接可以通过修改 XML_Search.exe.config 文件实现。程序对本地默认SQL实例的Northwind数据库执行XML查询。代码下载请点这里。
页: [1]
查看完整版本: SQL Server XML查询工具(附源码)