я должен разобрать документ XML, как это:Анализировать динамически созданный XML-документ в C#
<?xml version="1.0" encoding="utf-8" ?>
<DialsList>
<Dial>
<Id>123</Id>
<Source>SQL</Source>
<Server>myServer</Server>
<Database>myDB</Database>
<UserName>myUserName</UserName>
<Password>myPassword</Password>
<TableName>myTable</TableName>
<Query>GetAvgForUser</Query>
<Parameters>
<Param1>
<Name>@DialId</Name>
<Type>Int</Type>
</Param1>
<Param2>
<Name>@UserId</Name>
<Type>String</Type>
</Param2>
</Parameters>
</Dial>
<Dial>
<Id>789</Id>
<Source>SQL</Source>
<Server>someServer</Server>
<Database>someDB</Database>
<UserName>someUser</UserName>
<Password>somePwd</Password>
<TableName>someTbl</TableName>
<Query>someQry</Query>
<Parameters>
<Param1>
<Name>@myParam</Name>
<Type>Int</Type>
</Param1>
<Param2>
<Name>@anotherParam</Name>
<Type>String</Type>
</Param2>
</Parameters>
</Dial>
</DialsList>
Мое приложение, чтобы прочитать это XML-документ и сформировать строку подключения, а также выполнить запрос/StoredProcedure, указанный в узел <Query>
. У меня нет проблем с формированием соединительной строки. Поскольку это может быть любая хранимая процедура, и она может иметь любое число parameters
, я не могу понять способ разобрать этот XML. XML будет динамическим - параметры, имена параметров, тип параметра и т. Д. и это не под моим контролем. У меня есть этот код до сих пор, который работает, если есть (я предполагаю, что это будет «ИНТ») только один параметр:
XDocument doc = XDocument.Load(xmlFileName);
string dialID = Convert.ToString(DialId);
XElement DialsDoc = (from xml2 in doc.Descendants("Dial") where xml2.Element("Id").Value == dialID select xml2).FirstOrDefault();
dialDataSrc.Source = DialsDoc.Element("Source").Value.ToString();
if (dialDataSrc.Source.ToString() == "SQL")
{
DataSource dialDataSrc = new DataSource();
dialDataSrc.MethodNameIndividual = string.Empty;
dialDataSrc.MethodNameGroup = string.Empty;
dialDataSrc.Server = DialsDoc.Element("Server").Value.ToString();
dialDataSrc.Database = DialsDoc.Element("Database").Value.ToString();
dialDataSrc.Username = DialsDoc.Element("UserName").Value.ToString();
dialDataSrc.Password = DialsDoc.Element("Password").Value.ToString();
dialDataSrc.TableName = DialsDoc.Element("TableName").Value.ToString();
dialDataSrc.Query = DialsDoc.Element("Query").Value.ToString();
dialDataSrc.Parameters = DialsDoc.Element("Parameters").Value.ToString();
}
Я тогда сформировать строку подключения и выполнить хранимую процедуру. Как я могу справиться с этим, когда он динамичен?
Спасибо, Я добавил вспомогательный метод. Однако теперь я получаю сообщение об ошибке: «System.Data.SqlClient.SqlParameter не содержит определения для« ToList »и никакого метода расширения« ToList », принимающего первый аргумент типа ... ... "в .ToList()" – user1550951
Вы проверяли элемент и элементы? Аргумент ToList должен быть IEnumerable. –
По-видимому, в «Select» отсутствует символ «)» в конце. – user1550951