.NET: How to insert XML document into SQL Server

后端 未结 4 504
野性不改
野性不改 2021-01-04 18:27

I want to insert arbitrary XML into SQL Server. The XML is contained in an XmlDocument object.

The column I want to insert into is either nvarchar

4条回答
  •  醉话见心
    2021-01-04 18:35

    You have to use an SqlParameter. I would recommend doing it like that:

    command.Parameters.Add(
       new SqlParameter("@xml", SqlDbType.Xml) 
           {Value = new SqlXml(new XmlTextReader(xmlToSave.InnerXml
                           , XmlNodeType.Document, null)) })
    

    and the SQL should look like:

    String sql = "INSERT INTO "+tableName+" ("+columnName+") VALUES (@xml)";
    

    And since the first child is always the xml node, you can replace the encoding with the following statement.

    xmlToSave.FirstChild.InnerText = "version=\"1.0\" encoding=\"UTF-16\"";
    

    All in all it would look like that:

    void SaveXmlToDatabase(DbConnection connection,
          XmlDocument xmlToSave,
          String tableName, String columnName);
    {
       String sql = "INSERT INTO "+tableName+" ("+columnName+") VALUES (@xml)";
    
       using (DbCommand command = connection.CreateCommand())
       {
          xmlToSave.FirstChild.InnerText = "version=\"1.0\" encoding=\"UTF-16\"";             
          command.CommandText = sql;
          command.Parameters.Add(
            new SqlParameter("@xml", SqlDbType.Xml) 
               {Value = new SqlXml(new XmlTextReader(xmlToSave.InnerXml
                           , XmlNodeType.Document, null)) });
    
    
          DbTransaction trans = connection.BeginTransaction();
          try
          {
             command.ExecuteNonQuery();
             trans.Commit();
          }
          catch (Exception)
          {
             trans.Rollback();
             throw;
          }
       }
    }
    

提交回复
热议问题