用Xml2OleDb将XML文件插入到数据库

- 中国WEB开发者网络 (http://www.webasp.net)
-- 技术教程 (http://www.webasp.net/article/)
--- 用Xml2OleDb将XML文件插入到数据库 (http://www.webasp.net/article/27/26716.htm)
-- 作者:未知
-- 发布日期: 2005-09-28

Xml2OleDb简介

XML是互联网共享数据的最好的方法,XML格式的数据可以很轻松的集成到不同的Web应用中去。但如果你想将XML文件插入到数据库,怎么办?Xml2OleDb将向您说明往OleDb数据库,比如SQL Server, Access, Excel, Visual FoxPro, FoxPro, and dBase等插入XML文件的数据是如何轻松。

首先,将XML文件装载进DataSet,并得到第一个表,这个表就是我们要加入到数据库的DataTable;接下来,去除XML文件的扩展名,文件名字去掉扩展名将是我们数据库中使用的表名。如果XML格式不准确,将会报告错误,源代码中有XML文件格式的例子。参见Authors.xml

// 装载我们提交的XML<a href="http://www.chinaitpower.com/Soft/Tools/File/index.html" target="_blank">文件</a>到DataSet dataSetXml.ReadXml(HttpContext.Current.Server.MapPath(textBoxXml.Text)); // 得到DataSet中的第一个表 dataTableXml = dataSetXml.Tables[0]; // 生成表名 tableName = textBoxXml.Text.Substring(0,textBoxXml.Text.Length -4);

一旦XML装载成功,首先检查数据表是否有数据(rows),接下来检查数据库是否存在表,如果不存在就创建一个;然后将数据从XML插入到数据库中。

// 检查是否有数据存在(rows) if(dataTableXml.Rows.Count > 0)

创建数据库表

创建数据库连接,得到我们要添加表的数据库架构信息。

// 创建<a href="http://www.chinaitpower.com/Dev/DataBase/index.html" target="_blank">数据库</a>连接,打开<a href="http://www.chinaitpower.com/Dev/DataBase/index.html" target="_blank">数据库</a>,得到<a href="http://www.chinaitpower.com/Dev/DataBase/index.html" target="_blank">数据库</a>表的架构信息 OleDbConnection oledbConn = new OleDbConnection(textBoxOleDb.Text); oledbConn.Open(); DataTable schemaTable = oledbConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] {null, null, tableName, "TABLE"}); // 检查表是否存在,如果存在在DataTable中将有一条记录 if(schemaTable.Rows.Count < 1) <a href="http://www.chinaitpower.com/Dev/DataBase/MsSql/index.html" target="_blank">sql</a>Cmd = "create table " + tableName + " ("; for(int i = 0;i < dataTableXml.Columns.Count;i++) { // 添加列text/string type 长度 100 <a href="http://www.chinaitpower.com/Dev/DataBase/MsSql/index.html" target="_blank">sql</a>Cmd = <a href="http://www.chinaitpower.com/Dev/DataBase/MsSql/index.html" target="_blank">sql</a>Cmd + dataTableXml.Columns[i].ColumnName.ToString() + " char(100),"; } <a href="http://www.chinaitpower.com/Dev/DataBase/MsSql/index.html" target="_blank">sql</a>Cmd = <a href="http://www.chinaitpower.com/Dev/DataBase/MsSql/index.html" target="_blank">sql</a>Cmd .Substring(0,<a href="http://www.chinaitpower.com/Dev/DataBase/MsSql/index.html" target="_blank">sql</a>Cmd.Length - 1) + ");"; OleDbCommand oledbCmd = new OleDbCommand(<a href="http://www.chinaitpower.com/Dev/DataBase/MsSql/index.html" target="_blank">sql</a>Cmd,oledbConn); oledbCmd.ExecuteNonQuery();

添加XML数据到数据库

// 遍历DataTable中的Rows foreach(DataRow dr in dataTableXml.Rows) { string <a href="http://www.chinaitpower.com/Dev/DataBase/MsSql/index.html" target="_blank">sql</a>Cmd = "insert into [" + tableName + "] ("; // 遍历Datatable的列 for(int i = 0;i < dataTableXml.Columns.Count;i++) { // 添加column name <a href="http://www.chinaitpower.com/Dev/DataBase/MsSql/index.html" target="_blank">sql</a>Cmd = <a href="http://www.chinaitpower.com/Dev/DataBase/MsSql/index.html" target="_blank">sql</a>Cmd + dataTableXml.Columns[i].ColumnName.ToString() + ","; } <a href="http://www.chinaitpower.com/Dev/DataBase/MsSql/index.html" target="_blank">sql</a>Cmd = <a href="http://www.chinaitpower.com/Dev/DataBase/MsSql/index.html" target="_blank">sql</a>Cmd.Substring(0,<a href="http://www.chinaitpower.com/Dev/DataBase/MsSql/index.html" target="_blank">sql</a>Cmd.Length - 1) + ") values ("; // 遍历 DataTable columns for(int x = 0;x < dataTableXml.Columns.Count;x++) { // 添加column value到row <a href="http://www.chinaitpower.com/Dev/DataBase/MsSql/index.html" target="_blank">sql</a>Cmd = <a href="http://www.chinaitpower.com/Dev/DataBase/MsSql/index.html" target="_blank">sql</a>Cmd + "'" + dr[x].ToString().Replace("'","''") + "',"; } <a href="http://www.chinaitpower.com/Dev/DataBase/MsSql/index.html" target="_blank">sql</a>Cmd = <a href="http://www.chinaitpower.com/Dev/DataBase/MsSql/index.html" target="_blank">sql</a>Cmd.Substring(0,<a href="http://www.chinaitpower.com/Dev/DataBase/MsSql/index.html" target="_blank">sql</a>Cmd.Length - 1) + ");"; OleDbCommand oledbCmd = new OleDbCommand(<a href="http://www.chinaitpower.com/Dev/DataBase/MsSql/index.html" target="_blank">sql</a>Cmd,oledbConn); oledbCmd.ExecuteNonQuery(); }

注意的问题:

测试时先下载源代码,创建一个空的数据库,设置可修改权限Database.mdb,Database.xls,对FoxPro/dBase 创建空目录

连接字符串例子:

Access: Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\data\database.mdb;
Excel: Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\data\database.xls;Extended Properties=Excel 8.0;
FoxPro/dBase: Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\data;Extended Properties=dBASE IV;
SQL Server: Provider=SQLOLEDB; Data Source=localhost; Initial Catalog=database;User ID=sa;Password=;

webasp.net