我想将多个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文件的格式是什么样的?它存储了表结构吗?
<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文件的格式是什么样的?它存储了表结构吗?
解决方案 »
- mysql_query的返回值一直都是1 ,不过语句是否正确
- 用int型记录日期时间为什么只用10位?
- 不显示删除回复显示所有回复显示星级回复显示得分回复 ==============如何写这样的Sql语句===================
- MySQL动态创建临时表后,每次查询得到的都是前一次的字段!
- 请教一个汇总问题。
- mysql数据库建模大家用什么工具?
- Mysql指定中SHOW 的用法請教
- mysql如何比较带回车的数据
- pg 提问 , 我想把 每条数据里 的 每个字段内容 全角,或者半角里的空格去掉,我该则么做?(急)
- mysql时间戳转换
- mysql-5.6.10-win32 安装后没有设置界面
- 菜鸟求助!-此计算机上已经安装了同名实例.若要继续执行SQLServer安装程序,请提供唯一的实例名称
另外,我这是要将多个数据库的多个表全部都备份到一个文件中,mysqldump恐怕不行