sql >> Databasteknik >  >> RDS >> Sqlserver

.NET:Hur man infogar XML-dokument i SQL Server

Du måste använda en SqlParameter. Jag skulle rekommendera att du gör det så här:

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

och SQL bör se ut så här:

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

Och eftersom det första barnet alltid är xml-noden kan du ersätta kodningen med följande sats.

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

Sammantaget skulle det se ut så här:

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;
      }
   }
}


  1. Unik tilldelning av närmaste punkter mellan två tabeller

  2. PostgresSQL 9.5-installationen misslyckades:"databasklusterinitiering misslyckades" MAC OS (big sur 11.4)

  3. Upprepningsbart jobb för Laravel json api

  4. Hitta rader med uppskjutande datumintervall och ackumulera deras varaktighet