我想将多个mysql数据库备份成到一个xml文件中(网上说的都是一个表备份一个xml文件),另外如果多个数据库的信息拼成一个xml文件也比较麻烦。我目前做的是通过sql语句,一个个的连接数据库,连接了一个后,遍历里面的表,将表的信息存到datatable中,再按一定的xml格式(便于还原)导入到xml中,这样倒是实现了备份。xml文件格式如下:
<BACKUP>
   <DataBase dbName="wydb">
     <Table tableName="new_table">
       <Data id="1" name="2" age="4" sex="boy" />
       <Data id="12" name="3" age="1" sex="girl" />
     </Table>
     <Table tableName="table1">
       <Data id="1" name="jack" age="0" />
       <Data id="11" name="6" age="7" />
     </Table>
   </DataBase>
<DataBase dbName="wydb1">
     <Table tableName="user1">
       <Data id="1" name="2" grade="3" age="4" />
       <Data id="12" name="3" grade="321as" age="1" />
     </Table>
     <Table tableName="user2">
       <Data id="1" name="jack" age="0" />
       <Data id="11" name="6" age="7" />
     </Table>
   </DataBase>
  </BACKUP>
数据库还原我是采用sql语句,一条条的插入到表中的,xml中都只是数据,没有字段类型,我是采用“insert into 表名 values(获取的数据进行拼接)”,这样就遇到一个问题,如果一个int型的数据,表中的是null,则我备份下来的是个空字符串,那么使用insert的sql语句就会有错,不能将空字符串给int型,还有datetime类型的,bool类型的... 有的传数值,有的传字符串,有的不能传空字符串...
例如:当你从new_table中获取到id 为"12"的age字段为空,这时C#执行以下sql语句就会报错:
commandText = "insert into new_table values(" + idStr + ageStr + ")";
因为ageStr是个空字符串。
我之前想到的方法是C#中执行sql语句("describe TABLENAME")先获取表的字段类型,然后从xml中获取的字符串如果是空的,就判断它所在的字段类型是否是int型,如果是,就将null拼接进去..但数据有很多类型,这样判断难免有漏洞,所有想请教下有没有好的方法进行备份还原的?网上说的都是直接一个表备份成一个xml,但这个xml文件的格式是什么样的?它存储了表结构吗?