First we try, then we trust
博客园
::
首页
::
新随笔
::
联系
::
订阅
::
管理
::
183 随笔 :: 111 文章 :: 2983 评论 :: 339 引用
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
=
"
<?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(
"
<
"
);
else
if
(c
==
'
&
'
)
sb.Append(
"
&
"
);
else
if
(c
==
'
>
'
)
sb.Append(
"
>
"
);
else
if
(c
==
'
"
'
)
sb.Append(
"
"
"
);
else
sb.Append(c);
}
return
sb.ToString();
}
数据库连接可以通过修改
XML_Search.exe.config
文件实现。程序对本地默认SQL实例的Northwind数据库执行XML查询。代码下载请点
这里
。
posted on 2004-09-12 21:06
吕震宇
阅读(2914)
评论(1)
编辑
收藏
所属分类:
数据库技术
新用户注册
刷新评论列表
标题
姓名
主页
Email
(博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
网站首页
新闻频道
社区
小组
博问
网摘
闪存
找找看
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
该文被作者在 2004-09-12 21:15 编辑过
相关文章:
[翻译]在Visual Studio 2005中调试SQL Server 2005的存储过程
[翻译]在Visual Studio 2005中调试SQL Server 2005的存储过程
写有效率的SQL查询(V)
写有效率的SQL查询(IV)
SQL Server 2008 的新标志
Microsoft SQL Server 2008 正式发布
SQL Server insert 和update锁级别
请教SQL Server登录失败的问题
深入浅出--SQL Server 2005开发、管理与应用实例
Microsoft SQL Server 2005 技术内幕
相关链接:
所属分类的其他文章:
数据库并发一致性案例分析
用VFP调用.NET编写的WebService
SQL Server XML查询工具(附源码)
也论代码自动生成
从Visual FoxPro中的记录号与逻辑删除谈起...
聚簇索引与非聚簇索引的区别以及SQL Server查询优化技术
小议数据库主键选取策略(原创)
最新IT新闻:
Google股价跌破329美元 61%员工期权价值归零
十年祭:昔日明星软件今何在?
六大可能出售IT企业名单:SUN领头或被猎走
Linux内核2.6.27正式到来
《星际争霸2》一分为三 各种族依次登场
<
2008年10月
>
日
一
二
三
四
五
六
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
公告
与我联系
发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
(305)
给我留言
查看留言
我参加的小组
Design & Pattern
我参与的团队
Design & Pattern团队(0/869)
.NET新手training活动(0/473)
CLR基础研究团队(0/412)
随笔档案
2007年4月 (1)
2007年3月 (8)
2007年2月 (4)
2007年1月 (1)
2006年4月 (2)
2006年2月 (8)
2005年11月 (1)
2005年10月 (1)
2005年9月 (5)
2005年8月 (11)
2005年7月 (4)
2005年6月 (2)
2005年3月 (3)
2005年2月 (20)
2005年1月 (8)
2004年12月 (10)
2004年11月 (9)
2004年10月 (9)
2004年9月 (21)
2004年8月 (26)
2004年7月 (24)
2004年6月 (5)
文章分类
ICTCLAS(12)
(rss)
Web Form 编程(1)
(rss)
Windows Form 编程(3)
(rss)
安全与加密技术(2)
(rss)
笔迹鉴别(5)
(rss)
分析模式(2)
(rss)
华容道与数据结构(17)
(rss)
面向对象技术(14)
(rss)
其它(5)
(rss)
设计模式(22)
(rss)
设计模式随笔系列(9)
(rss)
数据库技术(7)
(rss)
数据库应用基础(13)
(rss)
文章档案
2007年4月 (1)
2007年3月 (9)
2007年2月 (6)
2007年1月 (1)
2006年4月 (2)
2006年2月 (6)
2005年9月 (5)
2005年8月 (11)
2005年7月 (2)
2005年3月 (1)
2005年2月 (14)
2005年1月 (5)
2004年12月 (11)
2004年11月 (4)
2004年10月 (4)
2004年9月 (11)
2004年8月 (10)
2004年7月 (6)
2004年6月 (2)
相册
3D作品
小时候的我
游四方
最新评论
1. re: 真实的谎言
我也是北大青鸟出来的(虽然一般都不告诉他人),说实话,我感谢它给我一个机会去改变自己的生活。至于那里好不好,我不敢说,作为一个商业性的培训机构,学费确实是有点高了,不过有有些老师确实是不错的。
--Eric FOo
2. re: C#设计模式(13)-Proxy Pattern
請問您有出關於此類設計模塊的書籍嗎? 如果有,麻煩告知ㄧ下書籍編號(ISPN). 期待您的大作,多謝. 设计模式(22)-Strategy Pattern 设计模式(21)-Template Met...
--Kyle Feng
3. re: 痛苦的选择:不再只专注于技术
lz发起的文章很能触动大家的心灵,让人思考,让人去职业规划,狂顶!
--kikop
4. re: 用VFP调用.NET编写的WebService
如何让JUSTTEXT列直接显示字符而不是MEMO
--刘永浩
5. re: 设计模式(21)-Template Method Pattern
唯一的一点缺陷,UML图有一个小小的错误,抽象类名应该是斜体
--huangzheng
阅读排行榜
1. Visual FoxPro 9.0 Beta 可以下载了!(22505)
2. 让GHOST后的电脑自动修正计算机名与IP地址(20989)
3. 痛苦的选择:不再只专注于技术(19283)
4. 推荐一本ASP.NET 2.0的电子书(15048)
5. SharpICTCLAS(测试版)发布了(14844)
评论排行榜
1. 痛苦的选择:不再只专注于技术(176)
2. 真实的谎言(90)
3. 让GHOST后的电脑自动修正计算机名与IP地址(71)
4. SharpICTCLAS 1.0 发布!(66)
5. Visual FoxPro 9.0 Beta 可以下载了!(53)
Powered by:
博客园
Copyright © 吕震宇