XML导入Access/MySql数据库 XML2OleDb Fred

摘要:
学校的XML课程分配了一个作业“XML导入访问和MySql”。我在网上找到了《孟子》E章中的Xml2OleDb。功能非常全面。唯一的缺陷是缺少对导入MySql的支持。改进后,我添加了此功能。导入MySql的代码与2OleDb的代码不同。想法是一样的。接下来,我发布了2MySql:viewplatecopytoclipboardprint的代码片段?Xml2OleDb将向您展示如何轻松地将XML文件中的数据插入OleDb数据库,如SQL Server、Access、MySql、Excel、VisualFoxPro、FoxPro和Base等。如果XML格式不准确,将报告错误。源代码中有XML文件格式的示例。

学校XML课程布置了一个作业“XML导入Access和MySql”,我在网上找到了孟子E章的Xml2OleDb,功能很全面,唯一的不足就是缺少了导入MySql的支持,经过我的完善,补充了该功能。
我的版本是为了交作业,所以去掉了连接字符串自输入,而是固定在web.config里啦。导入MySql的代码与2OleDb有所不同,思路是一样的,下面我贴出来2MySql的代码段:
 

        
  1. //MySql 检测MySql数据库里是否有该表       
  2. private void MySqlTableCheck(string tableName)       
  3. {       
  4. MySqlConnection mysqlConn = new MySqlConnection(StrConn2);       
  5. try      
  6. {       
  7. mysqlConn.Open();       
  8.       
  9. DataSet ds = new DataSet();       
  10. //创建查找当前数据库中有没有以xml文件名为名称的表命令       
  11. MySqlCommand cmd = new MySqlCommand("SHOW TABLES LIKE '" + tableName + "'", mysqlConn);       
  12. //执行查询命令       
  13. MySqlDataAdapter da = new MySqlDataAdapter(cmd);       
  14. //把查询的结果集填充至DataSet       
  15. da.Fill(ds);       
  16.       
  17. DataTable schemaTable = ds.Tables[0];       
  18.       
  19. //DataRow foundRow       
  20. //mysqlConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, tableName, "TABLE" });       
  21. String sqlCmd = "";       
  22.       
  23. if (schemaTable.Rows.Count< 1)       
  24. {       
  25. sqlCmd = "create table " + tableName + " (";       
  26. for (int i = 0; i < dataTableXml.Columns.Count; i++)       
  27. {       
  28.       
  29. sqlCmd = sqlCmd + dataTableXml.Columns[i].ColumnName.ToString() + " char(100),";       
  30. }       
  31.       
  32. sqlCmd = sqlCmd.Substring(0, sqlCmd.Length - 1) + ");";       
  33.       
  34. MySqlCommand mysqlCmd = new MySqlCommand(sqlCmd, mysqlConn);       
  35. mysqlCmd.ExecuteNonQuery();       
  36. }       
  37. }       
  38. catch      
  39. {       
  40.       
  41. Message.Text = "表无法创建或者数据库不存在!";       
  42. }       
  43. finally      
  44. {       
  45.       
  46. mysqlConn.Close();       
  47. }       
  48. }       
  49.   


Xml2OleDb(完善版)简介

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

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

        
  1. // 装载我们提交的XML文件到DataSet        
  2. dataSetXml.ReadXml(HttpContext.Current.Server.MapPath(textBoxXml.Text));       
  3. // 得到DataSet中的第一个表        
  4. dataTableXml = dataSetXml.Tables[0];        
  5. // 生成表名        
  6. tableName = textBoxXml.Text.Substring(0,textBoxXml.Text.Length -4);       
  7. //一旦XML装载成功,首先检查数据表是否有数据(rows),接下来检查数据库是否存在表,如果不存在就创建一个;然后将数据从XML插入到数据库中。       
  8. // 检查是否有数据存在(rows)       
  9. if(dataTableXml.Rows.Count > 0)   

创建数据库表

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

        
  1. // 创建数据库连接,打开数据库,得到数据库表的架构信息        
  2. OleDbConnection oledbConn = new OleDbConnection(textBoxOleDb.Text);        
  3. oledbConn.Open();        
  4. DataTable schemaTable = oledbConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] {nullnull, tableName, "TABLE"});        
  5. // 检查表是否存在,如果存在在DataTable中将有一条记录        
  6. if(schemaTable.Rows.Count < 1)        
  7. sqlCmd = "create table " + tableName + " ("for(int i = 0;i < dataTableXml.Columns.Count;i++)       
  8. {        
  9. // 添加列text/string type 长度 100        
  10. sqlCmd = sqlCmd + dataTableXml.Columns[i].ColumnName.ToString() + " char(100),";        
  11. }        
  12. sqlCmd = sqlCmd .Substring(0,sqlCmd.Length - 1) + ");";        
  13. OleDbCommand oledbCmd = new OleDbCommand(sqlCmd,oledbConn);        
  14. oledbCmd.ExecuteNonQuery();   

添加XML数据到数据库

        
  1. // 遍历DataTable中的Rows        
  2. foreach(DataRow dr in dataTableXml.Rows)        
  3. {        
  4. string sqlCmd = "insert into [" + tableName + "] (";        
  5. // 遍历Datatable的列for(int i = 0;i < dataTableXml.Columns.Count;i++)        
  6. // 添加column name        
  7. sqlCmd = sqlCmd + dataTableXml.Columns[i].ColumnName.ToString() + ",";        
  8. }        
  9. sqlCmd = sqlCmd.Substring(0,sqlCmd.Length - 1) + ") values (";        
  10. // 遍历 DataTable columns       
  11. for(int x = 0;x < dataTableXml.Columns.Count;x++)        
  12. // 添加column value到row        
  13. sqlCmd = sqlCmd + "'" + dr[x].ToString().Replace("'","''") + "',"; }        
  14. sqlCmd = sqlCmd.Substring(0,sqlCmd.Length - 1) + ");";        
  15. OleDbCommand oledbCmd = new OleDbCommand(sqlCmd,oledbConn);        
  16. oledbCmd.ExecuteNonQuery();        
  17. }   

注意的问题:

测试时先下载源代码,创建一个空的数据库,设置可修改权限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=;
MySql: <add name="MySqlConnectionString" connectionString="Server=localhost;userid=root;password=root;Database=mysqltest"/>

Tags - xml导入数据库 , xml导入mysql , xml2oledb , 表是否存在 , mysql

免责声明:文章转载自《XML导入Access/MySql数据库 XML2OleDb Fred》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇oracle 条件语句的写法C++ 系列:虚函数下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

自动生成代码工具

1.Code Smith 国外最著名的商业代码生成器官方网站:http://www.codesmithtools.com/CodeSmithProfessional-41.rar CodeSmith.Professional.v4.1.2.Keygen.rar 2.MyGeneratoe国外最著名的免费代码生成器官方网站:http://www.mygene...

使用 Sonar 检测代码质量

经历了一段时间的加班赶项目进度之后,今天终于闲下来了。忽然不知道干啥。于是,想着做点什么吧。突然想起了码云上面有个代码分析的功能,用的是 Sonar 于是想来玩玩这个。 一、下载Sonar,和初始化,启动 打开浏览器,搜索sonarqube,进入官网,找到download按钮,下载安装包。浏览器下载慢的话, 可以复制下载链接 到迅雷里边下载。 下载之后,解...

[NewLife.XCode]百亿级性能

NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netcore,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。 整个系列教程会大量结合示例代码和运行日志来进行深入分析,蕴含多年开发经验于其中,代表作有百亿级大数据实时计算项目。 开源地址:https://github.com/NewLifeX/X(求s...

c#使用access数据库时 模糊查询 like 通配符的写法

access通配符为*和? sqlserver通配符为%和_ 在access中使用sql查询语句,进行模糊查询要用:select * from table where name like '*海*' 而在c#中调用该语句却得不到结果,解决办法是c#中使用下面语句:select * from table where name like '%%海%%'...

mysql 根据where条件,分组,联表等统计数据条数

使用count可以统计数据量,遇到一个新的需求是有两张表,user 和 photo,一对多关系。要统计photo表里属于该用户的照片的数量,where条件是p.status=1,u.is_delete=0, p.is_delete=0。使用yii方法没有实现,最终是用原生的SQL语句实现的。在此记录一下。 $sql = "SELECT count(*)...

logstash 读取MySQL数据到elasticsearch 相差8小时解决办法

logstash和elasticsearch是按照UTC时间的,kibana却是按照正常你所在的时区显示的,是因为kibana中可以配置时区信息。 具体看这个: logstash 的配置文件添加 filter { ruby { code => "event.set('timestamp', event.get('@times...