读取Sqlserver中返回的XML提示中文出错

zhao8848jun 2009-11-28 10:28:15
用存储过程 的for xml auto 返回的XMLReader ,在xmldocument 的load时出错,经查找是返回结果有的中文问题,有遇到过的朋友吗?谈一下解决方案
...全文
242 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhao8848jun 2009-12-06
  • 打赏
  • 举报
回复
自己已经解决,办法:
在SqlServer2005中
用 for xml auto,xtype
然后不用XMLReader而是用object 接收,这样可以转成string 类型,用的时候把编码加上来就行了
YnSky 2009-12-01
  • 打赏
  • 举报
回复
Up
手抓宝 2009-12-01
  • 打赏
  • 举报
回复
没遇到过..不会,围观
happy664618843 2009-11-30
  • 打赏
  • 举报
回复
没有遇到过 帮顶
孟子E章 2009-11-30
  • 打赏
  • 举报
回复
你是从Sqlserver2005中取的吗?
_see_you_again_ 2009-11-30
  • 打赏
  • 举报
回复
doc.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\" ?> " + Xr.ReadOuterXml());
zhao8848jun 2009-11-29
  • 打赏
  • 举报
回复
从sql2005读取数据库通过xslt送显
xslt样式:
1<?xml version="1.0" encoding="utf-8"?>
2
3<xsl:stylesheet version="1.0"
4 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
5 <xsl:output method="html" />
6 <xsl:param name="BackGroundColor" select="Blue" />
7<xsl:template match="/">
8 <HTML>
9 <HEAD>
10 <TITLE>xslt测试</TITLE>
11 </HEAD>
12 <BODY>
13 <table border="1" cellSpacing="1" cellPadding="1">
14 <center>
15 <xsl:for-each select="//music">
16 <xsl:element name="tr">
17 <xsl:attribute name="bgcolor">
18 <xsl:value-of select="$Color" />
19 </xsl:attribute>
20 <xsl:element name="td">
21 <xsl:value-of select="gs" />
22 </xsl:element>
23 <xsl:element name="td">
24 <xsl:value-of select="gname" />
25 </xsl:element>
26 <xsl:element name="td">
27 <xsl:attribute name="align">center</xsl:attribute>
28 <xsl:value-of select="url" />
29 </xsl:element>
30 </xsl:element>
31 </xsl:for-each>
32 </center>
33 </table>
34 </BODY>
35 </HTML>
36</xsl:template>
37</xsl:stylesheet>
页面文件中:
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.Xml" %>
<%@ Import Namespace="System.Xml.Xsl" %>
<%@ Import Namespace="System.Xml.XPath" %>
<%@ Import Namespace="System.Web.Configuration" %>

<script runat="server">
void Page_Load(object sender, System.EventArgs e)
{
string connString = WebConfigurationManager.ConnectionStrings["adventureWorks"].ConnectionString; //从WEB.CONFIG读数据库字符连接串
using (SqlConnection conn = new SqlConnection(connString))
{
conn.Open();
SqlCommand command = new SqlCommand("Select top 5 * from music for xml auto,elements", conn);
XmlReader reader = command.ExecuteXmlReader();
XPathDocument xpathDoc = new XPathDocument(reader); //读取数据并以XML形式返回
conn.Close();
string xslPath = Server.MapPath("xsl/music.xsl"); //给XML加样式
XslCompiledTransform transform = new XslCompiledTransform();
transform.Load(xslPath);
XsltArgumentList argsList = new XsltArgumentList();
string backGroundColor = "Tan";
argsList.AddParam("Color", "", backGroundColor); //给样式附值
transform.Transform(xpathDoc, argsList, Response.Output);

}
}
</script>
wuyq11 2009-11-29
  • 打赏
  • 举报
回复
使用sp_makewebtask
添加模板文件,加
<?xml version="1.0" encoding=”GB2312” ?>

zhao8848jun 2009-11-29
  • 打赏
  • 举报
回复
我用的是xmlReader ,SqlCommadn的方法ExecuteXmlReader返回的类型
zhao8848jun 2009-11-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lzsh0622 的回复:]
XML文件编码不明确,直接加上.
<?xml version="1.0" encoding="utf-8" ?>
[/Quote]

我的数据源来自SqlServer的存储过程 for xml auto
怎么加?
lzsh0622 2009-11-29
  • 打赏
  • 举报
回复
XML文件编码不明确,直接加上.
<?xml version="1.0" encoding="utf-8" ?>
zhao8848jun 2009-11-29
  • 打赏
  • 举报
回复
要代码?来了
XmlReader Xr = cooperlib.PageNation.getAllRecordForXML(pq);
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(Xr); //出错的地方,提示:出现意外的文件结尾,经查是中文 ServSgXML.TransformSource = "ServSg.xsl";
ServSgXML.Document = xmlDoc;
其中xr是从存储过程来的
XmlReader xdr;
xdr = cmd.ExecuteXmlReader();

数据是SqlServer 2005
在查询分析器里执行存储过程中生成的XML直接拷入文本文件存入XML文件,用浏览器打开也提示出错,在文件头部加入
<?xml version="1.0" encoding="gb2312" ?>
然后预览正常
PandaIT 2009-11-29
  • 打赏
  • 举报
回复
干嘛不丢点代码出来!!
zhao8848jun 2009-11-29
  • 打赏
  • 举报
回复
加分等待解决方案
zhao8848jun 2009-11-29
  • 打赏
  • 举报
回复
请知道解决方案的朋友进来指点一下
孟子E章 2009-11-28
  • 打赏
  • 举报
回复
一般是编码的问题。XmlTextReader 有一个 Encoding 属性,该属性返回在 XML 声明的 encoding 属性中找到的字符编码。
自己写的C#常用类库,使用时请先添加引用:UsrCustomFun.dll、DevComponents.DotNetBar2.dll,压缩包内的其他文件请与UsrCustomFun.dll放置同一目录,然后在程序引用命名空间:using UsrCustomFun;包括: 1.自定义MessageBox,消息内容与错误代码分开,使用了6个重载方式。调用方法例子: UserMessageBox.UsrShow("执行SQL查询出错!", "数据库错误", ec.Message.ToString()); 2.等待提示窗口,使用了3个重载方法。 打开:UserWaitBox.UsrShow("等待信息"); 关闭:UserWaitBox.UsrClose(); 3.打印DataGridView,使用了9个重载方式,可自定义标题与打印样式: DataGridViewPrint.PrintDgv(dataGridView); 4.DataTable导出为Excel,3个重载方式: DataTableToExcel.DtToExcel(DataTable); 5.DataTable生成Pdf文件,6个重载方式: UsrExport.ExPdf(dataTable); 6.XML文件操作,可根据XML文件节点、路径来读取、修改、写入XML: UserXml.ReadXml(string XML的路径); UserXml.ReadXmlElement(string XML的路径,节点名称); UserXml.WriteXmlElement(XML路径,节点名称,内容); 7.数据库操作,目前有Access、SqlServer、Oracel (7.1)先配置数据库连接字符串: UsrCustomFun.SqlConn.SqlParameters下根据数据库类型返回一个数据库连接字符串。 (7.2)再执行数据库操作: (7.2.1)UsrCustomFun.SqlConn.SqlConnAccess下为Access的数据库操作,可根据SQL返回int型、string型、DataTable、DataReader、DataSet及无返回操作。 (7.2.2)UsrCustomFun.SqlConn.SqlConnOracle,操作类型同7.2.1 (7.2.3)UsrCustomFun.SqlConn.SqlConnSqlServer,操作类型同7.2.1

62,040

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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