代码改变世界

XML导入Access/MySql数据库 XML2OleDb

2008-12-06 09:43  Fred-Xu  阅读(1206)  评论(2编辑  收藏  举报

学校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