C# 无法切换编码
我正在从我的C应用程序生成一个xml,然后将其发送到SQL Server存储过程。当存储过程解析xml时,就会抛出错误 XML解析:第1行,字符39,无法切换编码 这就是我生成XML的方式。该函数是一个扩展函数C# 无法切换编码,c#,sql-server,xml,C#,Sql Server,Xml,我正在从我的C应用程序生成一个xml,然后将其发送到SQL Server存储过程。当存储过程解析xml时,就会抛出错误 XML解析:第1行,字符39,无法切换编码 这就是我生成XML的方式。该函数是一个扩展函数 public static string ToXml<T>(this T obj, string rootName) { XmlSerializer serializer = new XmlSerializer(typeof(T), new XmlRootAttrib
public static string ToXml<T>(this T obj, string rootName)
{
XmlSerializer serializer = new XmlSerializer(typeof(T), new XmlRootAttribute(rootName));
var xmlNs = new XmlSerializerNamespaces();
xmlNs.Add(string.Empty, string.Empty);
using (StringWriter sw = new StringWriter())
{
serializer.Serialize(sw, obj, xmlNs);
return sw.ToString();
}
}
存储过程如下所示:
/*
SET @Data = '<?xml version="1.0" encoding="utf-16"?>
<Students>
<Student>
<ID>2</ID>
<FirstName>Soument</FirstName>
<LastName>Sen</LastName>
<IsActive>true</IsActive>
<StateID>2</StateID>
<StateName>Bihar</StateName>
<CityID>4</CityID>
<CityName>DharBganga</CityName>
</Student>
</Students>'
*/
CREATE PROCEDURE [dbo].USP_SaveStudent
(
@Data xml,
@PageNbr INT = 1,
@PageSize INT = 10,
@SortColumn NVARCHAR(20) = 'ID',
@SortOrder NVARCHAR(4)= 'ASC'
)
AS
BEGIN TRY
MERGE INTO Student as Trg
USING (SELECT
d.x.value('id[1]', 'varchar(MAX)') as ID,
d.x.value('FirstName[1]', 'varchar(MAX)') as FirstName ,
d.x.value('LastName[1]', 'varchar(MAX)') as LastName,
d.x.value('StateID[1]','int') as StateID,
d.x.value('CityID[1]','int') as CityID,
d.x.value('IsActive[1]','bit') as IsActive
FROM
@Data.nodes('/Students/Student') as d(x)) AS Src ON Trg.ID = Src.ID
WHEN MATCHED THEN
UPDATE
SET Trg.FirstName = Src.FirstName,
Trg.LastName = Src.LastName,
Trg.StateID = Src.StateID,
Trg.CityID = Src.CityID,
Trg.IsActive = Src.IsActive
WHEN NOT MATCHED BY TARGET THEN
INSERT (FirstName, LastName, StateID, CityID, IsActive)
VALUES(Src.FirstName, Src.LastName, Src.StateID, Src.CityID, Src.IsActive);
END TRY
BEGIN CATCH
-- Insert Error into table
--INSERT INTO #error_log(message)
--VALUES (ERROR_MESSAGE());
END CATCH
EXEC USP_GetStudentData @PageNbr, @PageSize, @SortColumn, @SortOrder
寻找指导,比如如何修复它。谢谢XML头中的encoding=utf-16让您感到非常痛苦。如果XML头是必需的,您可以去掉编码吗
MSDN的完整法律术语为:;关键是XML文档中的编码必须与包含XML文档的字符串的编码相匹配。XML头中的encoding=utf-16会让您丧命。如果XML头是必需的,您可以去掉编码吗
MSDN的完整法律术语为:;关键是XML文档中的编码必须与包含XML文档的字符串的编码相匹配。我可以指定编码,因为我没有使用XmlTextWriterI,我建议您只需省略声明。重复项的答案表明了这一点。或者,您可以执行以下操作。省略您正在谈论的声明?XML声明。我提到的答案是。很抱歉请求……你能发布一些代码吗。我只是不明白在我的代码中应该省略什么。谢谢在这里我可以指定编码,因为我没有使用XmlTextWriterI,我建议您只需省略声明,重复的答案表明了这一点。或者,您可以执行以下操作。省略您正在谈论的声明?XML声明。我提到的答案是。很抱歉请求……你能发布一些代码吗。我只是不明白在我的代码中应该省略什么。谢谢,我只是想知道我需要在我的C代码中更改哪一行才能将utf-16更改为utf-8?请参阅我的代码,如果可能的话,请提供已更正的版本。请参阅此帖子:。我只想知道我需要更改C代码中的哪一行才能将utf-16更改为utf-8?请参阅我的代码,如果可能,请附带已更正的版本。请参阅此帖子:。