复制XML的数据到sql2005中遇到的问题,请高手帮忙啊

major_cd 2007-09-01 09:24:39
我用如下方法复制XML的数据到sql2005中,



string xmlFilename;
xmlFilename = sXMLFile;
DataSet newDataSet = new DataSet();

foreach ( DataTable t in newDataSet.Tables)
{
t.BeginLoadData();
}
newDataSet.ReadXml(xmlFilename);
foreach (DataTable t in newDataSet.Tables)
{
t.EndLoadData();

}


现在遇到问题,就是 在数据中有怪字符,就会newDataSet.ReadXml(xmlFilename)的时候抱错,
“ ”(十六进制值 0x1C)是无效的字符。 行 31882,位置 112。

<scaddress><![CDATA[哈尔滨 ]]></scaddress>
哈尔后面的这个 就是那个怪字符

XML是如下方法生成的

set @bcp='bcp "select row from ##B2BXMLTemp order by id asc" queryout "'+@FilePath+'" -c -S'+@sqlserver+' -U'+@UserName +' -P'+@PassWord

exec master..xp_cmdshell @bcp



请问, 有什么方法可以解决这个问题?不论在导出XML数据的时候屏蔽怪字符,或导入的时候,只要解决这个问题就好,万分感谢


...全文
228 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
chuxue1342 2007-09-07
  • 打赏
  • 举报
回复
搞错了!你用dataset.ReadXML("导入XML文件","导入模式")
你把模式选下!!
chuxue1342 2007-09-07
  • 打赏
  • 举报
回复
搞错了吗??你要把XML导入到数据怎么用dataset.readxml这是读出吧!写入是dataset.writeXML("XML文件","写入模式")
major_cd 2007-09-07
  • 打赏
  • 举报
回复
楼上的,我云哦
major_cd 2007-09-07
  • 打赏
  • 举报
回复
和这个没关系
wuyi8808 2007-09-06
  • 打赏
  • 举报
回复
读入stream,然后如何去掉怪字符?用replace?我头疼的是如果怪字符不固定,不是很恼火?一会是个钥匙,一会是个其他的,

-----------------------------------------------

一个一个地找出怪字符,然后扔掉。

major_cd 2007-09-04
  • 打赏
  • 举报
回复
我把xml文件的开头格式改成 <?xml version="1.0" encoding="utf-8"?>

然后

System.Text.Encoding encoding = System.Text.Encoding.GetEncoding("utf-8");
System.IO.StreamReader reader = new System.IO.StreamReader(xmlFilename, encoding);
newDataSet.ReadXml(reader);

错误依旧,只是错误的列的位置变化了下,但行是一样的,到底该怎么做哦,


XML是如下方法生成的

set @bcp='bcp "select row from ##B2BXMLTemp order by id asc" queryout "'+@FilePath+'" -c -S'+@sqlserver+' -U'+@UserName +' -P'+@PassWord

exec master..xp_cmdshell @bcp

这是不是改做下改动?这句SQL是在SQL2000下执行的,


major_cd 2007-09-04
  • 打赏
  • 举报
回复
up
Jinglecat 2007-09-03
  • 打赏
  • 举报
回复
// ...
//string path = ...
//System.Text.Encoding encoding = System.Text.Encoding.GetEncoding("GB2312");
//System.Text.Encoding encoding = System.Text.Encoding.Unicode;
// ...
System.IO.StreamReader reader = new System.IO.StreamReader(path, encoding);
newDataSet.ReadXml(reader);
// ...
Jinglecat 2007-09-03
  • 打赏
  • 举报
回复
假如你直接使用 DataTable.ReadXml(string fileName)
确保你 文件编码为 utf-8
用 VS 打开 》文件 》另存为 》 小三角 》 ....

否则用其他重载方法,显示指定文件编码
Jinglecat 2007-09-03
  • 打赏
  • 举报
回复
因为编码不对头,导致乱码 ....
major_cd 2007-09-03
  • 打赏
  • 举报
回复
怎么整成UTF-8?
songle912 2007-09-03
  • 打赏
  • 举报
回复
你所谓的怪字符很大程度上就是指乱码吧...
songle912 2007-09-03
  • 打赏
  • 举报
回复
整成UTF-8就得了
falx2004 2007-09-03
  • 打赏
  • 举报
回复
DataSet.ReadXml(stream)
城市猎人0611 2007-09-03
  • 打赏
  • 举报
回复
up
major_cd 2007-09-03
  • 打赏
  • 举报
回复
Jinglecat:

我的xml文件 的开头是这格式 <?xml version="1.0" encoding="gb2312"?>
我在处理程序中修改如下:
System.Text.Encoding encoding = System.Text.Encoding.GetEncoding("gb2312");
System.IO.StreamReader reader = new System.IO.StreamReader(xmlFilename, encoding);
newDataSet.ReadXml(reader);
但在这步依然出错 “ ”(十六进制值 0x1C)是无效的字符。
换成
System.Text.Encoding encoding = System.Text.Encoding.GetEncoding("utf-8");
也是一样,
我哪理解错了吗?

major_cd 2007-09-02
  • 打赏
  • 举报
回复
回(风飞翔) ,不是空格,只是拷贝到这变成空格,其实是个钥匙样的字符,

回(wuyi8808)
读入stream,然后如何去掉怪字符?用replace?我头疼的是如果怪字符不固定,不是很恼火?一会是个钥匙,一会是个其他的,
wuyi8808 2007-09-01
  • 打赏
  • 举报
回复
建议先把XML文件读入Stream,去掉怪字符,然后使用:

DataSet.ReadXml(Stream)

这样就不用写回XML文件了。
wuyi8808 2007-09-01
  • 打赏
  • 举报
回复
在处理XML文件前先把怪字符去掉。

比如说,先按二进制方式读入这个XML文件,去掉怪字符,重新写回。然后再执行你的操作。
ekinchen3 2007-09-01
  • 打赏
  • 举报
回复
多了一个空格可是?
生成XML的时候不让空格产生,行吗?
加载更多回复(2)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧