#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
.