利用OleDb对象,将数据库中全部表转换成XML文件

利用OleDb对象,将数据库中全部表转换成XML文件

作者:孟宪会 出自:【孟宪会之精彩世界】 发布日期:2003年4月16日 12点0分0秒


ASP.NET Dataset让你在页面中使用XML格式的文件提供了便利。如果您的数据全部都在一个数据库中,该如何进行转换呢?如果你的数据库与OleDb兼容的话,下面就看看如何把数据库中的所有表转换成XML文件。文件名字与数据库中的表的名字相同。本代码包含两个版本:C#版本和VB.NET版本。

C#版本:

1@ Page Language="C#" 
1@ import Namespace="System" 
1@ import Namespace="System.Data" 
1@ import Namespace="System.Data.OleDb" 
 1<script runat="server">   
 2void Page_Load(object sender, EventArgs e) {   
 3if (!IsPostBack) {   
 4TextBox1.Text = "PROVIDER=SQLOLEDB; Data Source=.; Initial Catalog=pubs;User ID=sa;Password=;";   
 5Label1.Text = "";   
 6}   
 7}   
 8void CreateXml(object sender, EventArgs e) {   
 9OleDbConnection dataConn = new OleDbConnection(TextBox1.Text);   
10Uri Path = Request.Url;   
11String ServerUrl = Path.ToString();   
12ServerUrl = ServerUrl.Substring(0,ServerUrl.LastIndexOf("/") +1 );   
13try {   
14Literal1.Text = "已经在你的相同目录下创建了一下文件:
15" ;   
16dataConn.Open();   
17DataTable schemaTable = dataConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,new object[] {null, null, null, "TABLE"});   
18for(int I = 0; I < schemaTable.Rows.Count; I++){   
19OleDbDataAdapter dbAdapter= new OleDbDataAdapter("select * from [" + schemaTable.Rows[I].ItemArray[2].ToString() + "]",dataConn);   
20DataSet tableData = new DataSet();   
21dbAdapter.Fill(tableData,schemaTable.Rows[I].ItemArray[2].ToString());   
22tableData.WriteXml(HttpContext.Current.Server.MapPath(schemaTable.Rows[I].ItemArray[2].ToString() + ".xml"));   
23Literal1.Text = Literal1.Text + "<a href='" + ServerUrl + schemaTable.Rows[I].ItemArray[2].ToString() + ".xml'>" + schemaTable.Rows[I].ItemArray[2].ToString() + ".xml</a>
24";   
25}   
26}   
27catch(Exception ex) {   
28Label1.Text = ex.Message.ToString();   
29}   
30finally {   
31dataConn.Close();   
32}   
33}   
34</script>
 1<html>
 2<head>
 3<title>leDb2XML:数据库转换成XML文件例子</title>
 4</head>
 5<body bgcolor="#FFFFFF">
 6<center>
 7<h2><font face="宋体">OleDb2XML:数据库转换成XML文件例子</font>
 8</h2>
 9</center>
10<form runat="server">
11<font face="宋体">
12<p align="center">请输入OleDb连接字符串,然后点“生成XML文件”按钮。</p>
13<p align="center">
14<asp:textbox id="TextBox1" runat="server" width="600"></asp:textbox>
15</p>
16<p align="center">
17<asp:button id="Button1" onclick="CreateXml" runat="server" text="生成XML文件"></asp:button>
18</p>
19<p align="center">
20<asp:label font-bold="True" forecolor="Red" id="Label1" runat="server"></asp:label>
21</p>
22<p align="center">
23<asp:literal id="Literal1" runat="server"></asp:literal>
24</p>
25</font>
26</form>
27</body>
28</html>

VB.NET版本:

1@ Page Language="VB" 
1@ import Namespace="System" 
1@ import Namespace="System.Data" 
1@ import Namespace="System.Data.OleDb" 
 1<script runat="server">   
 2  
 3Sub Page_Load(sender As Object, e As EventArgs)   
 4If Not IsPostBack Then   
 5TextBox1.Text = "Provider=SqlOLEDB; Data Source=.; Initial Catalog=pubs;User ID=sa;Password=;"   
 6Label1.Text = ""   
 7End If   
 8End Sub   
 9  
10Sub CreateXml(sender As Object, e As EventArgs)   
11Dim dataConn As New OleDbConnection(TextBox1.Text)   
12Dim Path As Uri = Request.Url   
13Dim ServerUrl As String = Path.ToString()   
14ServerUrl = ServerUrl.Substring(0,ServerUrl.LastIndexOf("/") + 1 )   
15Try   
16Literal1.Text = "已经在你的相同目录下创建了一下文件:
17"   
18dataConn.Open()   
19Dim schemaTable As DataTable = dataConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"})   
20Dim I As Integer   
21For I = 0 To schemaTable.Rows.Count - 1   
22Dim dbAdapter As New OleDbDataAdapter("select * from [" + schemaTable.Rows(I).ItemArray(2).ToString() + "]", dataConn)   
23Dim tableData As New DataSet()   
24dbAdapter.Fill(tableData, schemaTable.Rows(I).ItemArray(2).ToString())   
25tableData.WriteXml(HttpContext.Current.Server.MapPath((schemaTable.Rows(I).ItemArray(2).ToString() + ".xml")))   
26Literal1.Text = Literal1.Text + "<a href='" + ServerUrl + schemaTable.Rows(I).ItemArray(2).ToString() + ".xml'>" + schemaTable.Rows(I).ItemArray(2).ToString() + ".xml</a>
27"   
28Next I   
29Catch ex As Exception   
30Label1.Text = ex.Message.ToString()   
31Finally   
32dataConn.Close()   
33End Try   
34End Sub   
35  
36</script>
 1<html>
 2<head>
 3<title>leDb2XML:数据库转换成XML文件例子</title>
 4</head>
 5<body bgcolor="#FFFFFF">
 6<center>
 7<h2><font face="宋体">OleDb2XML:数据库转换成XML文件例子</font>
 8</h2>
 9</center>
10<form runat="server">
11<font face="宋体">
12<p align="center">请输入OleDb连接字符串,然后点“生成XML文件”按钮。</p>
13<p align="center">
14<asp:textbox id="TextBox1" runat="server" width="600"></asp:textbox>
15</p>
16<p align="center">
17<asp:button id="Button1" onclick="CreateXml" runat="server" text="生成XML文件"></asp:button>
18</p>
19<p align="center">
20<asp:label font-bold="True" forecolor="Red" id="Label1" runat="server"></asp:label>
21</p>
22<p align="center">
23<asp:literal id="Literal1" runat="server"></asp:literal>
24</p>
25</font>
26</form>
27</body>
28</html>

对于数据量大的数据库,处理可能会需要更多的时间,因此有可能需要更改machine.config文件中processModel的responseDeadlockInterval 属性,比如为5分钟,默认为3分钟。

1<processmodel 00:03:00="" clientconnectedcheck="0:00:05" comauthenticationlevel="Connect" comimpersonationlevel="Impersonate" cpumask="0xffffffff" default="" enable="true" idletimeout="Infinite" is="" loglevel="Errors" maxiothreads="25" maxworkerthreads="25" memorylimit="60" password="AutoGenerate" requestlimit="Infinite" requestqueuelimit="5000" responsedeadlockinterval="00:05:00" responserestartdeadlockinterval="00:09:00" restartqueuelimit="10" shutdowntimeout="0:00:05" timeout="Infinite" username="machine" webgarden="false"></processmodel>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus