相关疑难解决方法(0)

将XML插入SQL Server时如何解决"无法切换编码"错误

我正在尝试插入XML列(SQL SERVER 2008 R2),但服务器抱怨:

System.Data.SqlClient.SqlException(0x80131904):
XML解析:第1行,第39个字符,无法切换编码

我发现XML列必须是UTF-16才能使插入成功.

我正在使用的代码是:

 XmlSerializer serializer = new XmlSerializer(typeof(MyMessage));
 StringWriter str = new StringWriter();
 serializer.Serialize(str, message);
 string messageToLog = str.ToString();
Run Code Online (Sandbox Code Playgroud)

如何将对象序列化为UTF-8字符串?

编辑:好的,抱歉混淆 - 字符串需要是UTF-8.你是对的 - 默认情况下它是UTF-16,如果我尝试以UTF-8插入它就会通过.所以问题是如何序列化为UTF-8.

这会在尝试插入SQL Server时导致错误:

    <?xml version="1.0" encoding="utf-16"?>
    <MyMessage>Teno</MyMessage>
Run Code Online (Sandbox Code Playgroud)

这不是:

    <?xml version="1.0" encoding="utf-8"?>
    <MyMessage>Teno</MyMessage>
Run Code Online (Sandbox Code Playgroud)

更新

我想出当SQL Server 2008的Xml列类型需要utf-8时,以及当encoding你尝试插入xml规范的属性中的utf-16时:

如果要添加utf-8,请将参数添加到SQL命令,如下所示:

 sqlcmd.Parameters.Add("ParamName", SqlDbType.VarChar).Value = xmlValueToAdd;
Run Code Online (Sandbox Code Playgroud)

如果您尝试encoding=utf-16在上一行中添加xmlValueToAdd,则会在插入中产生错误.此外,VarChar意味着国家字符不被识别(它们变成问号).

要将utf-16添加到db,请使用SqlDbType.NVarCharSqlDbType.Xml在前面的示例中,或者根本不指定type:

 sqlcmd.Parameters.Add(new SqlParameter("ParamName", xmlValueToAdd));
Run Code Online (Sandbox Code Playgroud)

.net xml sql-server utf-8 utf-16

43
推荐指数
6
解决办法
7万
查看次数

SQL Server 2008 - 将XML声明添加到XML输出

我一直在与这个争夺几天,我正在寻求使用以下语法自动化XML输出

 SELECT (
   SELECT CONVERT(VARCHAR(10),GETDATE(),103)
   FOR XML PATH('DataVersion'), 
     TYPE
   ),
   (  
   SELECT CoNum,
     CoName,
     CONVERT(VARCHAR(10),AccountToDate,103) 'DLA',
     LAFileNet
   FROM @XMLOutput  
   FOR XML PATH('Company'),
     TYPE  
   )
 FOR XML PATH(''),
   ROOT('Companies')
Run Code Online (Sandbox Code Playgroud)

这会创建以下输出

<Companies>
  <DataVersion>15/11/2010</DataVersion>
  <Company>
    <CoNum>111</CoNum>
    <CoName>ABCLmt</CoName>
    <DLA>12/12/2010</DLA>
    <LAFileNet>1234</LAFileNet>
  </Company>
  <Company>
    <CoNum>222</CoNum>
    <CoName>DEFLmt</CoName>
    <DLA>12/12/2007</DLA>
    <LAFileNet>5678</LAFileNet>
  </Company>
</Companies>
Run Code Online (Sandbox Code Playgroud)

我正在努力的是如何将XML声明添加<?xml version="1.0" encoding="ISO-8859-1" ?>到输出的顶部?

更新1:我认为我需要在SQL服务器中创建XML模式来定义xsl:output是否正确?然后将输出分配给该架构?

更新2:此后发现这些链接 http://forums.asp.net/t/1455808.aspx - 查看健康的评论.另外 http://www.devnewsgroups.net/group/microsoft.public.sqlserver.xml/topic60022.aspx

xml sql-server encoding

10
推荐指数
1
解决办法
3万
查看次数

实体框架存储XML数据类型; "无法切换编码"错误

我在使用.NET Framework 4.5的C#项目中使用Entity Framework 6.0.0版.我有一个Filing具有SQL Server列的类,该列XmlContentxml数据类型.我有数据库优先实体框架我主要用于保存Filing表中(我目前不读回那些行,如果这有所不同)

我已经阅读了这些关于使用Entity Framework保存到XML列的"字符串"支持属性的帖子,如此此处所述

我的XML声明看起来像这样

<?xml version="1.0" encoding="UTF-8"?>
....
Run Code Online (Sandbox Code Playgroud)

我的实体框架自动生成(数据库优先)如下所示:

public partial class Filing
{
    // ...
    public string XmlContent { get; set; }
    // ...
}
Run Code Online (Sandbox Code Playgroud)

使用我的自定义分部类(保存到字符串属性...):

public partial class Filing
{
    [NotMapped]
    public XmlDocument XmlDocument
    {
        get
        {
            var xmlDocument = new XmlDocument();
            xmlDocument.LoadXml(this.XmlContent);
            return xmlDocument;

        }
        set
        {
            this.XmlContent = value.OuterXml;
        }
    }
    // ...
} …
Run Code Online (Sandbox Code Playgroud)

c# xml entity-framework

6
推荐指数
0
解决办法
1643
查看次数

使用SQL Server"FOR XML":将结果数据类型转换为Text/varchar/string是什么?

我现在已经挣扎了将近一周,仍然没有找到任何解决方案 - .-

我的目标是通过查询"FOR XML"语句从SQL Server接收XML,将此XML作为字符串/流转发到XSLT Transformer并将结果显示为HTML.

关于它的糟糕之处是我应该使用的Web服务器环境:IBM Domino 8.5.2,它通常使用Lotus Script和Lotus Notes数据库来生成网站.

但是现在Notes数据库的性能已经走到了死胡同,在谈论大型数据库时,比如我们的网站点击统计数据,这些数据库将数百万次点击存储为数据集.因此,我们决定迁移到mssql2008服务器,该服务器可以更快地提供自定义筛选结果.

我确实设法建立与SQL Server的连接,提交查询并将结果作为xml.但现在?:)似乎SQL Server提供了他的"for xml" - 结果作为一种自己奇怪的二进制编码字符数据类型,在打印它们或保存到文件时没有任何意义.Lotus Script(几乎是VBScript)似乎没有办法处理这个xml数据类型.

我尝试了各种方法,我可以找到结果 - Lotus构建在ODBC类,LCConnection通过OleDB,ADO连接通过OleDB ......但每次尝试都以一堆不可读的数据结束.

我可以想象多米诺骨牌和SQL Server之间的网络服务,将数据准备为我的多米诺骨牌脚本的字符串,但这是我想避免的不必要的开销.

你能在sql语句中告诉你想要生成的xml是什么数据类型吗?就像对于字段的cast()/ convert()而言,对于整个xml结果?这样我就可以将结果作为text/varchar字段读取?

谢谢,克里斯

xml sql-server lotus-domino

4
推荐指数
1
解决办法
2万
查看次数

SQL Server:使用 FOR XML PATH 嵌套元素

努力编写可以在 XML 中生成嵌套元素的查询。谁能帮忙

输入:

SELECT EmpName AS [Name],
       EmpDOB       AS [Birthdate],
       EmpSalary        AS [WageAmount],
    Add1    AS [Address1],
    Add2    AS [Address2],
    Mobile  AS [Mobile]
FROM   Employee
FOR XML PATH 
Run Code Online (Sandbox Code Playgroud)

输出:(这有附加信息作为嵌套元素)

<Employee>
<Name>Conrad</Name>
<Birthdate>14-oct-76</BirthDate>
<WageAmount>10000</WageAmount>
<AdditionalInfo>
    <Address1>Washington DC</Address1>
    <Address2>DC</Address2>
    <Mobile>989898989</Mobile>
</AdditionalInfo>
</Employee>
Run Code Online (Sandbox Code Playgroud)

xml sql sql-server

2
推荐指数
1
解决办法
1059
查看次数

标签 统计

xml ×5

sql-server ×4

.net ×1

c# ×1

encoding ×1

entity-framework ×1

lotus-domino ×1

sql ×1

utf-16 ×1

utf-8 ×1