Как мне преобразовать XElement в строку в c #?

#c# #string #casting #linq-to-xml #xelement

#c# #строка #Кастинг #linq-to-xml #xelement

Вопрос:

Вот мой код:

 SqlConnection conn4 = new SqlConnection("Data Source=.\sqlexpress;Initial Catalog=test_BdbCSSQL01;Persist Security Info=False;Integrated Security=SSPI;");
conn4.Open();

string sql = "SELECT * FROM ERROROfSIDESStagingOUT";
SqlDataAdapter da = new SqlDataAdapter(sql, conn4);
DataTable dt = new DataTable();
da.Fill(dt);
DataRow dr;
dr = dt.NewRow();
dt.Rows.Add(dr);

XDocument doc = XDocument.Load("XmlString.xml");
XNamespace ns = "https://uidataexchange.org/schemas";

var node = doc.Descendants(ns   "EmployerTPASeparationResponse");
var node2 = node.ElementAt(i);

        foreach (var param in node2.Elements())
        {

            try
            {
                if (dr[param.Name.LocalName].ToString() == "PriorIncidentOccurrence")
                {
                    var PriorIncidentDescendants = param.Descendants(ns   "PriorIncidentOccurrence");
                    dr["PriorIncidentID"] = PriorIncidentDescendants.ElementAt(0).Value;                                        
                }

                if (dr.Table.Columns.Contains(param.Name.LocalName))
                {
                    dr[param.Name.LocalName] = param.Value;
                }
            }
            catch (Exception ee)
            {
                //TODO: SendMail
                string asdf = ee.ToString();
            }
        }
        SqlCommandBuilder sb = new SqlCommandBuilder(da);
        da.Update(dt);

if (conn4 != null)
{
    conn4.Close();
}
  

Я пытаюсь привести dr[param.Name.LocalName] в качестве типа string. Оба следующих способа не работают.

 (string)dr[param.Name.LocalName]
dr[param.Name.LocalName].ToString()
  

Комментарии:

1. Но что вам нужно? Вложенный текстовый узел в такой XElement или сериализовать XElement, чтобы получить XML-фрагмент?

2. @Matias: Я пытаюсь привести dr[param.Name . localName] для ввода строки.

3. Я повторяю тот же вопрос, потому что, похоже, вы не очень уверены в том, какой результат вы хотите от этого «приведения» ..?

4. Вы не можете «преобразовать» нестроковое значение в строку.

5. Вы не пытаетесь преобразовать XElement, вы пытаетесь преобразовать элемент потока данных, который является объектом. Что это дает вам на данный момент?

Ответ №1:

Я предполагаю, что вы вызываете, dr[param.Name.LocalName] прежде чем присвоите значение этому ключу в вашем первом if заявлении.

Вероятно, вам следует указать полученную ошибку. Я предполагаю, что это не имеет ничего общего с приведением…

Вы могли бы попробовать проверить значение param.Name.LocalName в отладчике (или распечатать его с помощью Debug.WriteLine ) и убедиться, что все значения являются допустимыми именами столбцов в вашем DataRow .