Есть ли способ жестко закодировать строку подключения к RDLC?

Мне нужно сделать средство просмотра отчетов, которое будет обрабатывать отчеты локально. Я получил файлы RDL с запросами. Есть ли способ вставить строку подключения в XML-код отчета, чтобы отчет мог напрямую получать данные из базы данных? отчеты будут отображаться в MS reportViewer.

<?xml version="1.0" encoding="utf-8"?>
<Report xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner" xmlns="http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition">
  <DataSources>
    <DataSource Name="BIA">
      <DataSourceReference>BIA</DataSourceReference>
      <rd:DataSourceID>98fa74a9-d829-4196-be9d-49697ded5201</rd:DataSourceID>
    </DataSource>
  </DataSources>
  <DataSets>
    <DataSet Name="RelItems">
      <Fields>
        <Field Name="RelItemID">
          <DataField>RelItemID</DataField>
          <rd:TypeName>System.Int32</rd:TypeName>
        </Field>
        <Field Name="SSISPackageName">
          <DataField>SSISPackageName</DataField>
          <rd:TypeName>System.String</rd:TypeName>
        </Field>
      </Fields>
      <Query>
        <DataSourceName>BIA</DataSourceName>
        <CommandText>select b.ID as RelItemID, SSISPName --+ '  ('+s.Name + ' -&gt; ' + d.Name + ')' 
as SSISPackageName
    from dbo.RelTypes_ProvTypes a
    inner join dbo.RelItems b on a.RelTypeID = b.RelTypeID
    inner join dbo.ObjItems s on b.ObjItemIDSource = s.ID and a.ObjTypeIDSource = s.ObjTypeID
    inner join dbo.ObjItems d on b.ObjItemIDDest = d.ID and a.ObjTypeIDDest = d.ObjTypeID
where SSISPName is not null
order by 2</CommandText>
        <rd:UseGenericDesigner>true</rd:UseGenericDesigner>
      </Query>
    </DataSet>

... and so on

У меня это РДЛ. Любые другие советы или помощь приветствуются, просто нужно заставить это работать :)


person Tom    schedule 11.08.2011    source источник


Ответы (1)


Файлы RDL содержат информацию о запросе, которая не хранится в файлах RDLC при использовании элемента управления ReportViewer. Если вы хотите использовать свой RDL-файл вне SSRS в ReportViewer, вы можете установить свойство источника данных из кода при запуске отчета в локальном режиме. Таким образом, вы устанавливаете строку подключения на все, что хотите, когда создаете источник данных.

ReportViewer1.Reset()
ReportViewer1.LocalReport.DataSources.Clear()
ReportViewer1.LocalReport.ReportPath = <yourfilepath>
ReportViewer1.LocalReport.DataSources.Add(<yourdatasource>)
ReportViewer1.LocalReport.Refresh()

(очевидно, этот фрагмент VB)

person Ira Rainey    schedule 11.08.2011
comment
Tnx в ответ... Проблема в том, что в приложение можно добавлять новые отчеты, поэтому я хочу использовать sql внутри отчетов. Это большая работа — добавлять все наборы данных с кодом каждый раз, когда добавляется новый отчет. Я обнаружил, что в источник данных можно добавить строку подключения. Но мог бы помочь, что я делаю неправильно. ‹DataSource Name=xxx› ‹rd:DataSourceID›98fa74a9-d829-4196-be9d-49697ded5201‹/rd:DataSourceID› ‹DataProvider›SQL‹/DataProvider› ‹ConnectString›...‹/ConnectString›IntegratedSecurity›true‹/IntegratedSecurity › БД, к которой я пытаюсь подключиться, это MS SQL - person Tom; 11.08.2011
comment
Я могу ошибаться, но я не думаю, что то, что вы хотите сделать, возможно с файлом RDLC. Элемент строки подключения не используется в файле RDLC, поэтому для него задано значение /* Local Connection */, что требует установки подключения на уровне ReportViewer.LocalReport. - person Ira Rainey; 11.08.2011
comment
Боюсь, вы правы... Так что я никак не мог прочитать данные из базы данных, чтобы сообщить напрямую без какого-либо промежуточного кода С#? - person Tom; 11.08.2011
comment
Я так не думаю. Это одно из различий между RDL и RDLC — C означает «Клиент», который дает вам доступ к локальной обработке источника данных отчета. Похоже, вам нужно использовать RDL, только без SSRS, но вы не можете - person Ira Rainey; 11.08.2011
comment
Спасибо за ваше время... Я устал копаться в чем-то, чего не существует :) - person Tom; 11.08.2011