首页 新闻 会员 周边

datatable转换为XML文件,然后XML文件转换为DataSet插入sql中。文件过大报错!!!!!

0
[已解决问题] 解决于 2014-10-24 10:01

我现在遇到的问题是,当表太大超过100多M的时候会报内存溢出错误,请问怎么处理啊。

这是我的XML文件转换为Dataset代码:

 

public static DataSet CXmlFileToDataSet(string xmlFilePath)
{
if (!string.IsNullOrEmpty(xmlFilePath))
{
//string path = Application.MapPath(xmlFilePath);
StringReader StrStream = null;
XmlTextReader Xmlrdr = null;
try
{
XmlDocument xmldoc = new XmlDocument();
//根据地址加载Xml文件
xmldoc.Load(xmlFilePath);

DataSet ds = new DataSet();
//读取文件中的字符流
StrStream = new StringReader(xmldoc.InnerXml);
//获取StrStream中的数据
Xmlrdr = new XmlTextReader(StrStream); //这行报错,文件超过100M 就报错
//ds获取Xmlrdr中的数据

ds.ReadXml(Xmlrdr);

return ds;
}
catch (Exception e)
{
throw e;
}
finally
{
//释放资源
if (Xmlrdr != null)
{
Xmlrdr.Close();
StrStream.Close();
StrStream.Dispose();
}
}
}
else
{
return null;
}
}

麻烦知道的帮忙看看谢谢啦!

ydpC#的主页 ydpC# | 初学一级 | 园豆:183
提问于:2014-10-23 16:06
< >
分享
最佳答案
0

问题 我自己解决了,感谢回答的朋友。我的解决办法就是将整个XML文档加载到dataset中,现在是没有问题了,但是不知道更大会不会出现问题,有待测试。

public static DataSet CXmlFileToDataSet(string xmlFilePath)
{
if (!string.IsNullOrEmpty(xmlFilePath))
{
try
{

DataSet ds = new DataSet(); 

ds.ReadXml(xmlFilePath);

return ds;
}
catch (Exception e)
{
throw e;
}
finally
{
//释放资源
}
}
else
{
return null;
}
}

ydpC# | 初学一级 |园豆:183 | 2014-10-24 10:00
其他回答(2)
0

那是,微软给你一个弹弓,就没有想到你会拿他去打嫦娥...

你换个方法实现需求吧。

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-10-23 16:13

哦,我也考虑过换一个方式,但是不知道换什么方式好,请问 你有啥好的建议吗?

支持(0) 反对(0) ydpC# | 园豆:183 (初学一级) | 2014-10-23 16:37

@菜鸟C#菜鸟: 

楼下是一种方式。

还有我不知道你的原始需求,怎么出招呢?

你为啥非得备份到XML里面去呢?

支持(0) 反对(0) 爱编程的大叔 | 园豆:30839 (高人七级) | 2014-10-23 18:03

@爱编程的大叔: 就是我要从a服务器上选择表,选择字段然后导出,再用个cs小程序导入到B服务器,A,B服务器之间网络不通。

支持(0) 反对(0) ydpC# | 园豆:183 (初学一级) | 2014-10-23 22:35

@菜鸟C#菜鸟: 每个技术都有一定的局限性。

老师通常不负责说这个,但你项目中碰到要懂得自己绕路。

可选的有

Access MDB (以前的记忆是超过140M容易出问题,但不一定会出)

SQLite (这个好像大点,几个G总有吧)

SQL Server Express (这个可以安装在你的笔记本上)

如果你用的是SQL Server,建议就采用最后一个了,结构都不用设计了,直接复制。

支持(1) 反对(0) 爱编程的大叔 | 园豆:30839 (高人七级) | 2014-10-24 07:05
0

如果文件内容太多的话,多生产几个xml文件,比如a_1.xml,a_2.xml.........

会长 | 园豆:12401 (专家六级) | 2014-10-23 16:46

这个 我也想过 但是 我不能控制导出文件的大小。要保证导出的XML文件大小在100M以能,导入才不会出问题,我想把它导出Excel表格的形式,但是应该还是会存在太大的问题吧!现在是导出没有问题,是导入时,XML文件转换为Dataset出问题

支持(0) 反对(0) ydpC# | 园豆:183 (初学一级) | 2014-10-23 22:39

@菜鸟C#菜鸟: 应该还有其他读取xml文件的方法(比如这样:http://www.cnblogs.com/a1656344531/archive/2012/11/28/2792863.html),别用ds.ReadXml(Xmlrdr)。写读到内容,然后再写for循环把内容添加到datatable。或者直接拼写insert sql吧。

支持(0) 反对(0) 会长 | 园豆:12401 (专家六级) | 2014-10-24 10:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册