2013-05-08 3 views
0

Я пытаюсь изменить connectionString в RDL-файле, который состоит из узлов xml динамически. но я могу только восстановить корневой каталог с помощью /. Я не могу найти другие узлы, например, когда я пытаюсь получить connectString, оно появляется как null.Как динамически изменять строку подключения в файле RDl?

XmlDocument xml = new XmlDocument(); 
xml.Load(selectedFiles[0].ToString()); 
var connectionString = xml.SelectSingleNode("/"); 

XML-файла RDL:

<?xml version="1.0" encoding="utf-8"?> 
<Report xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner" xmlns:cl="http://schemas.microsoft.com/sqlserver/reporting/2010/01/componentdefinition" xmlns="http://schemas.microsoft.com/sqlserver/reporting/2010/01/reportdefinition"> 
    <AutoRefresh>0</AutoRefresh> 
    <DataSources> 
    <DataSource Name="DataSource1"> 
     <ConnectionProperties> 
     <DataProvider>SQL</DataProvider> 
     <ConnectString>Data Source=gbr-t-sql-001;Initial Catalog=Neptune2Dev</ConnectString> 
     <IntegratedSecurity>true</IntegratedSecurity> 
     </ConnectionProperties> 
     <rd:SecurityType>Integrated</rd:SecurityType> 
     <rd:DataSourceID>70fcaa8f-d76a-4919-a53c-ba313ca99926</rd:DataSourceID> 
    </DataSource> 
    </DataSources> 
    <DataSets> 
    <DataSet Name="DataSet1"> 
     <Query> 
     <DataSourceName>DataSource1</DataSourceName> 
     <QueryParameters> 
      <QueryParameter Name="@profileID"> 
      <Value>=Parameters!profileID.Value</Value> 
      </QueryParameter> 
     </QueryParameters> 
     <CommandType>StoredProcedure</CommandType> 
     <CommandText>Report_BylineSummary</CommandText> 

ответ

0

Вам нужно выполнить запрос Xpath, чтобы получить строку подключения. Это должно быть что-то вроде этого:

/отчет/DataSources [@ Name = "DataSource1"]/ConnectionProperties/ConnectString

Но заботиться о правильной обработки пространств имен.

Смотрите эту статью:

http://www.codeproject.com/Articles/9494/Manipulate-XML-data-with-XPath-and-XmlDocument-C

+0

Он придумывает утративший уага ConnectionString = xml.SelectSingleNode ("/ отчет/DataSources [@name = \" DataSource1 \ "]/ConnectionProperties/ConnectString"); – Xerxes

+0

Как я уже сказал, вы должны корректно обрабатывать пространства имен для этого. http://support.microsoft.com/kb/316913 – Oscar

Смежные вопросы