zoukankan      html  css  js  c++  java
  • XML导入Access/MySql数据库 XML2OleDb Fred

    学校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
  • 相关阅读:
    subprocess 子进程模块
    3.5 魔法方法
    ThinkPHP中,display和assign用法详解
    linux常用指令
    退出当前Mysql使用的db_name 的方式
    PHP中GD库是做什么用的? PHP GD库介绍11111111
    include跟include_once 以及跟require的区别
    全局变量跟局部变量
    关于define
    创建、删除索引---高级部分
  • 原文地址:https://www.cnblogs.com/Fred_Xu/p/1446759.html
Copyright © 2011-2022 走看看