Search code examples
c#sqlsql-serverxmlsqlxml

XML parsing: line 1, character 7, semicolon expected


An error occurs when running this XML SQL in C#. What is missing? It works fine in SQL Server management studio but not in the c#.

protected DataTable ServiceCodes(string orderColumn = default(string), bool orderAscending = true)
{
    string sql = @" SELECT DISTINCT(Split.a.value('.', 'VARCHAR(100)')) AS Data  
                             FROM  
                             (
                                 SELECT CAST('<M>' + REPLACE(Text09, ',', '</M><M>') + '</M>' AS XML) AS Data  
                                 FROM  Assets
                                 WHERE Category = 'Service'
                             ) AS A CROSS APPLY Data.nodes ('/M') AS Split(a) ORDER BY Data";

    return DatabaseConnection.ExecuteDataTable(sql, 120000);
}

Solution

  • I think there's some special character in you Text09 column. Try this:

    SELECT DISTINCT(Split.a.value('.', 'VARCHAR(100)')) AS Data  
    FROM  
    (
     SELECT CAST('<M>' + replace((select Text09 + '' for xml path('')), ',', '</M><M>') + '</M>' AS XML) AS Data  
     FROM  Assets
     WHERE Category = 'Service'
    ) AS A CROSS APPLY Data.nodes ('/M') AS Split(a) ORDER BY Data
    

    see sql fiddle demo