当前位置: 首页 > 图文教程 > 网络编程 > ASP > 用Xml2OleDb将XML文件插入到数据库

ASP
ASP调用ORACLE存储过程并返回结果集
用ASP实现网页BBS
关于Global.asa文件的深入研究与session变量失效提示的具体方法
简易ASP+注册系统
防护手册:如何防止ASP木马在服务器上运行
用Visual Basic实现多画面播放功能之二
如何增强ASP程序性能(1)
如何增强ASP程序性能(2)
如何增强ASP程序性能(3)
ASP备份数据库
二十八条改善 ASP 性能和外观的技巧
在Form域中Post大于100K的数据
如何使用ASP制作模似动态生长的表单?
Microsoft IIS 真的如此「不安全」吗?(1)
Microsoft IIS 真的如此「不安全」吗?(2)
Microsoft IIS 真的如此「不安全」吗?(3)
Microsoft IIS 真的如此「不安全」吗?(4)
Microsoft IIS 真的如此「不安全」吗?(5)
关于页面和代码分离
ServerVariables 对路径的操作

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 213 ::
收藏到网摘: n/a

 

原文:http://aspalliance.com/articleViewer.aspx?aId=477&pId=-1
 
作者:Andrew Mooney 翻译:孟子E章  [下载源代码http://aspalliance.com/download/477/ASPAlliance477.zip]
 
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文件到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)

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


// 创建数据库连接,打开数据库,得到数据库表的架构信息
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)
     
      
sqlCmd = "create table " + tableName + " (";
for(int i = 0;i < dataTableXml.Columns.Count;i++)
{
    // 添加列text/string type 长度 100
    sqlCmd = sqlCmd + dataTableXml.Columns[i].ColumnName.ToString() + " char(100),";
}
sqlCmd  = sqlCmd .Substring(0,sqlCmd.Length - 1) + ");";
OleDbCommand oledbCmd = new OleDbCommand(sqlCmd,oledbConn);
oledbCmd.ExecuteNonQuery();

 
添加XML数据到数据库 

// 遍历DataTable中的Rows
foreach(DataRow dr in dataTableXml.Rows)
{
    string sqlCmd = "insert into [" + tableName + "] (";
    // 遍历Datatable的列
    for(int i = 0;i < dataTableXml.Columns.Count;i++)
    {
        // 添加column name
        sqlCmd = sqlCmd + dataTableXml.Columns[i].ColumnName.ToString() + ",";
    }
    sqlCmd  = sqlCmd.Substring(0,sqlCmd.Length - 1) + ") values (";
    // 遍历 DataTable columns
    for(int x = 0;x < dataTableXml.Columns.Count;x++)
    {
        // 添加column value到row
        sqlCmd = sqlCmd + "'" + dr[x].ToString().Replace("'","''") + "',";
    }
    sqlCmd = sqlCmd.Substring(0,sqlCmd.Length - 1) + ");";
    OleDbCommand oledbCmd = new OleDbCommand(sqlCmd,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=;