我想将任意 XML 插入 SQL Server。 XML 包含在XmlDocument
object.
我想要插入的列是nvarchar
, ntext
, or xml
列(如果它让您的生活更轻松,那么您可以选择它的类型。实际上,这是一个xml
柱子。)
原型
void SaveXmlToDatabase(DbConnection connection,
XmlDocument xmlToSave,
String tableName, String columnName);
{
}
我问的原因是因为我正在尝试找到正确的方法来转动XmlDocument
数据库可以接受的内容 - 确保保持编码正确:
- 我必须确保插入期间使用的编码与数据库采用的编码相匹配
- 我必须同步
<?xml version="1.0" encoding="windows-1252"?>
element
I know ntext
, nvarchar
, or xml
存储为UTF-16
SQL Server 内部。所以我必须确保将数据作为 UTF-16 提供给 SQL Server。这对于String
.NET 中的 s,因为它们are统一码 UTF-16。
第二个问题是同步编码属性,这是一个更难解决的问题。我必须弄清楚如何通过XmlDocument
object:
<?xml version="1.0" encoding="windows-1252"?> (or whatever the encoding may be)
并调整为UTF-16
<?xml version="1.0" encoding="UTF-16"?>
我天真的尝试(失败了)
忽略 XML 声明中的编码,只考虑如何将任何内容保存到 SQL Server 中:
void SaveXmlToDatabase(DbConnection connection,
XmlDocument xmlToSave,
String tableName, String columnName);
{
String sql = "INSERT INTO "+tableName+" ("+columnName+")
VALUES ('"+xmlToSave.ToString()+"')";
using (DbCommand command = connection.CreateCommand())
{
command.CommandText = sql;
DbTransaction trans = connection.BeginTransaction();
try
{
command.ExecuteNonQuery();
trans.Commit();
}
catch (Exception)
{
trans.Rollback();
throw;
}
}
}
这会失败,因为sql
我尝试运行的是:
INSERT INTO LiveData (RawXML)
VALUES ('System.Xml.XmlDocument')
这是因为XmlDocument.ToString()
返回“System.Xml.XmlDocument
”。查看实现,可以看到它实际上正在调用:
this.GetType().ToString();
Aside:微软似乎竭尽全力阻止你
将 Xml 作为字符串获取 -
大概是因为它会导致错误
(但他们没有告诉我们有什么错误,为什么
它们是错误,或者right通向
转换一个XmlDocument
变成一个String
!)
See also
- C#/SQL - 过程中的 SqlDbType.Xml 有什么问题?
- 如何将 SqlXml 数据类型的 XmlDocument 转换为 XmlReader。