Я хочу вставить произвольный XML в SQL Server.XML содержится в объекте XmlDocument
.
Столбец, в который я хочу вставить, - это либо столбец nvarchar
, ntext
, либо xml
(если это облегчит вашу жизнь, вы можете выбратькакой это тип. На самом деле это xml
столбец.)
Прототип
void SaveXmlToDatabase(DbConnection connection,
XmlDocument xmlToSave,
String tableName, String columnName);
{
}
Причина, по которой я спрашиваю, заключается в том, что я пытаюсь найти правильный способ поворота XmlDocument
во что-то, что может принять база данных - обязательно сохраняя правильное кодирование:
- Я должен убедиться, что кодировка, используемая во время вставки, совпадает с кодировкой базы данных
- Мне нужно синхронизировать
<?xml version="1.0" encoding="windows-1252"?>
элемент
Я знаю, ntext
, nvarchar
или xml
хранятся как UTF-16
внутри SQL Server.Поэтому я должен быть уверен, что данные SQL Server будут передаваться как UTF-16.Это не проблема для String
s в .NET, так как они являются Unicode UTF-16.
Вторая проблема, синхронизирующая атрибут кодирования, заключается в том, что взломать более сложный ключ,Я должен выяснить, как найти элемент объявления через объект XmlDocument
:
<?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();
В сторону: Microsoft, похоже, старается изо всех сил помешать вам получить XML какстрока - предположительно потому, что она приводит к ошибкам (но они не сообщают нам, какие ошибки, почему они являются ошибками, или правильный способ преобразования XmlDocument
в String
!)
См. Также