title: Programming c# code to create a SSRS data driven subscription
body: <p>I have SSRS report with parameters under SQL Reporting service 2012 standard edition. I like to export to excel and send as an attachment in the email to different receipt and receipt comes from some SQL query that means it is dynamic.  </p>
  
  <p>Data-driven subscription can do this but I have SQL Server 2012 Standard edition which does not support data-driven subscription and I can not upgrade, so I am looking for any code which can do the similar job like a data-driven subscription.</p>
  
  <p>I found this link which has the solution to my issue.
  <a href="http://jaliyaudagedara.blogspot.com/2012/10/creating-data-driven-subscription.html" rel="nofollow noreferrer">http://jaliyaudagedara.blogspot.com/2012/10/creating-data-driven-subscription.html</a></p>
  
  <p>when I try this code under visual studio 2015 "Class Library" project by adding service reference "<a href="http://mylocalserver:81/reportserver/ReportService2010.asmx" rel="nofollow noreferrer">http://mylocalserver:81/reportserver/ReportService2010.asmx</a>"    I am getting an error on this line of code. 
      ReportingService2010SoapClient rs= new ReportingService2010SoapClient();</p>
  
  <p>Additional information about the error: Could not find default endpoint element that references contract 'ReportService2010.ReportingService2010Soap' in the ServiceModel client configuration section. This might be because no configuration file was found for your application, or because no endpoint element matching this contract could be found in the client element.</p>
  
  <p>After spending enough time to make it work with "Class Library" project, I decided to do the code under web service project by adding the web service reference. with some trial and error finally, I got the working code here under web service project. below code works on my local machine which has Sql server 2012 enterprise edition but it gives me the same error saying "Data-driven subscriptions to reports" is not supported in this edition of Reporting Services" on my company server which has SQL server 2012 standard edition. </p>
  
  <pre><code>   public void DoWork()
      {
         ReportingService2010 rs = new ReportingService2010();
          rs.Credentials = CredentialCache.DefaultCredentials;
         // rs.Url = "http://mylocalserver:81/reportserver/ReportService2010.asmx";
          rs.Url = "http://companyserver/reportserver/ReportService2010.asmx";
  
          var reportPath = "/CYTYC Reports/";
  
          string report = $"{reportPath}AllContactCIPPointsReport";
          string description = "Programmatic Data Driven Subscription \"Report Server Email\" ";
  
          //set extension as Windows File Share
          ExtensionSettings settings = new ExtensionSettings();
          settings.Extension = "Report Server Email";
  
  
          // Set the extension parameter values.
          var extensionParams = new ParameterValueOrFieldReference[8];
  
          // var to = new ParameterFieldReference { ParameterName = "TO", FieldAlias = "PARAMS" }; // Data-driven.
          var to = new ParameterValue { Name = "TO", Value = "example@gmail.com" }; // Data-driven.
          extensionParams[0] = to;
  
          var replyTo = new ParameterValue { Name = "ReplyTo", Value = "example@gmail.com" };
          extensionParams[1] = replyTo;
  
          var includeReport = new ParameterValue { Name = "IncludeReport", Value = "False" };
          extensionParams[2] = includeReport;
  
          var renderFormat = new ParameterValue { Name = "RenderFormat", Value = "HTML4.0" };
          extensionParams[3] = renderFormat;
  
          var priority = new ParameterValue { Name = "Priority", Value = "NORMAL" };
          extensionParams[4] = priority;
  
          var subject = new ParameterValue { Name = "Subject", Value = "Subsribed Report" };
          extensionParams[5] = subject;
  
          var comment = new ParameterValue { Name = "Comment", Value = "Here is the link to your report." };
          extensionParams[6] = comment;
  
          var includeLink = new ParameterValue { Name = "IncludeLink", Value = "True" };
          extensionParams[7] = includeLink;
  
          settings.ParameterValues = extensionParams;
  
          // Create the data source for the delivery query.
          var delivery = new DataSource { Name = "" };
          var dataSourceDefinition = new DataSourceDefinition
          {
              ConnectString = "Data Source=CYTYC-LIVE;Initial Catalog=yourdatabasename",
              CredentialRetrieval = CredentialRetrievalEnum.Store,
              Enabled = true,
              EnabledSpecified = true,
              Extension = "SQL",
              ImpersonateUserSpecified = false,
              UserName = "username",
              Password = "password"
          };
          delivery.Item = dataSourceDefinition;
  
          // Create the data set for the delivery query.
          var dataSetDefinition = new DataSetDefinition
          {
              AccentSensitivitySpecified = false,
              CaseSensitivitySpecified = false,
              KanatypeSensitivitySpecified = false,
              WidthSensitivitySpecified = false
          };
          var queryDefinition = new QueryDefinition
          {
              CommandText = @"Your select * from Query",
              CommandType = "Text",
              Timeout = 45,
              TimeoutSpecified = true
          };
          dataSetDefinition.Query = queryDefinition;
          var results = new DataSetDefinition();
          var oServerInfoHeader = new ServerInfoHeader();
          var oTrustedUserHeader = new TrustedUserHeader();
  
          bool changed;
          string[] paramNames;
          try
          {
              results = rs.PrepareQuery(delivery, dataSetDefinition, out changed, out paramNames);//.PrepareQuery(oTrustedUserHeader, delivery, dataSetDefinition, out results, out changed,out paramNames);
  
          }
          catch (Exception ex)
          {
  
              Console.WriteLine(ex.Message);
          }
  
          var dataRetrieval = new DataRetrievalPlan { DataSet = results, Item = dataSourceDefinition };
  
  
          // Set the event type and match data for the delivery.
          const string eventType = "TimedSubscription";
          const string matchData = "&lt;ScheduleDefinition&gt;&lt;StartDateTime&gt;2018-06-01T14:00:00-07:00&lt;/StartDateTime&gt;&lt;WeeklyRecurrence&gt;&lt;WeeksInterval&gt;1&lt;/WeeksInterval&gt;&lt;DaysOfWeek&gt;&lt;Monday&gt;True&lt;/Monday&gt;&lt;Tuesday&gt;True&lt;/Tuesday&gt;&lt;Wednesday&gt;True&lt;/Wednesday&gt;&lt;Thursday&gt;True&lt;/Thursday&gt;&lt;Friday&gt;True&lt;/Friday&gt;&lt;/DaysOfWeek&gt;&lt;/WeeklyRecurrence&gt;&lt;/ScheduleDefinition&gt;";
  
          //const string eventType = "SnapshotUpdated";
          //const string matchData = null;
  
          //// Set the report parameter values.
          //var parameters = new ParameterValueOrFieldReference[1];
  
          //// i am retrieving value EMAIL from database and I am passing that value as my report parameter value
          //var reportparam = new ParameterFieldReference { ParameterName = "yourreportparametername", FieldAlias = "PARAMS" }; // Data-driven.
  
          //parameters[0] = reportparam;
  
          var parameters = new ParameterValue[1];
          var reportparam = new ParameterValue {Name = "yourreportparametername", Value = "yourreportparametervalue"};
          parameters[0] = reportparam;
  
          string subscriptionId = "";
          try
          {
  
              subscriptionId = rs.CreateDataDrivenSubscription(report, settings, dataRetrieval, description, eventType, matchData, parameters);
              //(oTrustedUserHeader, report, settings, dataRetrieval,description, eventType, matchData, parameters,out subscriptionId);
          }
          catch (System.Web.Services.Protocols.SoapException ex)
          {
              Console.WriteLine(ex.Detail.InnerText.ToString(CultureInfo.InvariantCulture));
          }
  
      }
  </code></pre>