PullSubscription.Create Method
Creates the pull subscription on the Subscriber.
Namespace: Microsoft.SqlServer.Replication
Assembly: Microsoft.SqlServer.Rmo (in Microsoft.SqlServer.Rmo.dll)
After creating the subscription at the Subscriber, you must call the MakePullSubscriptionWellKnown or MakePullSubscriptionWellKnown method to register the subscription at the Publisher.
The Create method can only be called by members of the sysadmin fixed server role at the Subscriber or by members of the db_owner fixed database role on the subscription database.
Calling Create and specifying a value of true for CreateSyncAgentByDefault is equivalent to executing sp_addpullsubscription (Transact-SQL) and sp_addpullsubscription_agent (Transact-SQL) for a subscription to a transactional or snapshot publication or executing sp_addmergepullsubscription (Transact-SQL) and sp_addmergepullsubscription_agent (Transact-SQL) for a subscription to a merge publication.
Calling Create and specifying a value of false for CreateSyncAgentByDefault is equivalent to executing sp_addpullsubscription (Transact-SQL) for a subscription to a transactional or snapshot publication or executing sp_addmergepullsubscription (Transact-SQL) for a subscription to a merge publication.
This example creates a pull subscription to a transactional publication.
// Define the Publisher, publication, and databases. string publicationName = "AdvWorksProductTran"; string publisherName = publisherInstance; string subscriberName = subscriberInstance; string subscriptionDbName = "AdventureWorks2012Replica"; string publicationDbName = "AdventureWorks2012"; //Create connections to the Publisher and Subscriber. ServerConnection subscriberConn = new ServerConnection(subscriberName); ServerConnection publisherConn = new ServerConnection(publisherName); // Create the objects that we need. TransPublication publication; TransPullSubscription subscription; try { // Connect to the Publisher and Subscriber. subscriberConn.Connect(); publisherConn.Connect(); // Ensure that the publication exists and that // it supports pull subscriptions. publication = new TransPublication(); publication.Name = publicationName; publication.DatabaseName = publicationDbName; publication.ConnectionContext = publisherConn; if (publication.IsExistingObject) { if ((publication.Attributes & PublicationAttributes.AllowPull) == 0) { publication.Attributes |= PublicationAttributes.AllowPull; } // Define the pull subscription. subscription = new TransPullSubscription(); subscription.ConnectionContext = subscriberConn; subscription.PublisherName = publisherName; subscription.PublicationName = publicationName; subscription.PublicationDBName = publicationDbName; subscription.DatabaseName = subscriptionDbName; // Specify the Windows login credentials for the Distribution Agent job. subscription.SynchronizationAgentProcessSecurity.Login = winLogin; subscription.SynchronizationAgentProcessSecurity.Password = winPassword; // Make sure that the agent job for the subscription is created. subscription.CreateSyncAgentByDefault = true; // By default, subscriptions to transactional publications are synchronized // continuously, but in this case we only want to synchronize on demand. subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.OnDemand; // Create the pull subscription at the Subscriber. subscription.Create(); Boolean registered = false; // Verify that the subscription is not already registered. foreach (TransSubscription existing in publication.EnumSubscriptions()) { if (existing.SubscriberName == subscriberName && existing.SubscriptionDBName == subscriptionDbName) { registered = true; } } if (!registered) { // Register the subscription with the Publisher. publication.MakePullSubscriptionWellKnown( subscriberName, subscriptionDbName, SubscriptionSyncType.Automatic, TransSubscriberType.ReadOnly); } } else { // Do something here if the publication does not exist. throw new ApplicationException(String.Format( "The publication '{0}' does not exist on {1}.", publicationName, publisherName)); } } catch (Exception ex) { // Implement the appropriate error handling here. throw new ApplicationException(String.Format( "The subscription to {0} could not be created.", publicationName), ex); } finally { subscriberConn.Disconnect(); publisherConn.Disconnect(); }
' Define the Publisher, publication, and databases. Dim publicationName As String = "AdvWorksProductTran" Dim publisherName As String = publisherInstance Dim subscriberName As String = subscriberInstance Dim subscriptionDbName As String = "AdventureWorks2012Replica" Dim publicationDbName As String = "AdventureWorks2012" 'Create connections to the Publisher and Subscriber. Dim subscriberConn As ServerConnection = New ServerConnection(subscriberName) Dim publisherConn As ServerConnection = New ServerConnection(publisherName) ' Create the objects that we need. Dim publication As TransPublication Dim subscription As TransPullSubscription Try ' Connect to the Publisher and Subscriber. subscriberConn.Connect() publisherConn.Connect() ' Ensure that the publication exists and that ' it supports pull subscriptions. publication = New TransPublication() publication.Name = publicationName publication.DatabaseName = publicationDbName publication.ConnectionContext = publisherConn If publication.IsExistingObject Then If (publication.Attributes And PublicationAttributes.AllowPull) = 0 Then publication.Attributes = publication.Attributes _ Or PublicationAttributes.AllowPull End If ' Define the pull subscription. subscription = New TransPullSubscription() subscription.ConnectionContext = subscriberConn subscription.PublisherName = publisherName subscription.PublicationName = publicationName subscription.PublicationDBName = publicationDbName subscription.DatabaseName = subscriptionDbName subscription.Description = "Pull subscription to " + publicationDbName _ + " on " + subscriberName + "." ' Specify the Windows login credentials for the Distribution Agent job. subscription.SynchronizationAgentProcessSecurity.Login = winLogin subscription.SynchronizationAgentProcessSecurity.Password = winPassword ' Make sure that the agent job for the subscription is created. subscription.CreateSyncAgentByDefault = True ' By default, subscriptions to transactional publications are synchronized ' continuously, but in this case we only want to synchronize on demand. subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.OnDemand ' Create the pull subscription at the Subscriber. subscription.Create() Dim registered As Boolean = False ' Verify that the subscription is not already registered. For Each existing As TransSubscription In publication.EnumSubscriptions() If existing.SubscriberName = subscriberName And _ existing.SubscriptionDBName = subscriptionDbName Then registered = True End If Next existing If Not registered Then ' Register the subscription with the Publisher. publication.MakePullSubscriptionWellKnown( _ subscriberName, subscriptionDbName, _ SubscriptionSyncType.Automatic, _ TransSubscriberType.ReadOnly) End If Else ' Do something here if the publication does not exist. Throw New ApplicationException(String.Format( _ "The publication '{0}' does not exist on {1}.", _ publicationName, publisherName)) End If Catch ex As Exception ' Implement the appropriate error handling here. Throw New ApplicationException(String.Format( _ "The subscription to {0} could not be created.", publicationName), ex) Finally subscriberConn.Disconnect() publisherConn.Disconnect() End Try
This example creates a pull subscription to a merge publication.
// Define the Publisher, publication, and databases. string publicationName = "AdvWorksSalesOrdersMerge"; string publisherName = publisherInstance; string subscriberName = subscriberInstance; string subscriptionDbName = "AdventureWorks2012Replica"; string publicationDbName = "AdventureWorks2012"; string hostname = @"adventure-works\garrett1"; //Create connections to the Publisher and Subscriber. ServerConnection subscriberConn = new ServerConnection(subscriberName); ServerConnection publisherConn = new ServerConnection(publisherName); // Create the objects that we need. MergePublication publication; MergePullSubscription subscription; try { // Connect to the Subscriber. subscriberConn.Connect(); // Ensure that the publication exists and that // it supports pull subscriptions. publication = new MergePublication(); publication.Name = publicationName; publication.DatabaseName = publicationDbName; publication.ConnectionContext = publisherConn; if (publication.LoadProperties()) { if ((publication.Attributes & PublicationAttributes.AllowPull) == 0) { publication.Attributes |= PublicationAttributes.AllowPull; } // Define the pull subscription. subscription = new MergePullSubscription(); subscription.ConnectionContext = subscriberConn; subscription.PublisherName = publisherName; subscription.PublicationName = publicationName; subscription.PublicationDBName = publicationDbName; subscription.DatabaseName = subscriptionDbName; subscription.HostName = hostname; // Specify the Windows login credentials for the Merge Agent job. subscription.SynchronizationAgentProcessSecurity.Login = winLogin; subscription.SynchronizationAgentProcessSecurity.Password = winPassword; // Make sure that the agent job for the subscription is created. subscription.CreateSyncAgentByDefault = true; // Create the pull subscription at the Subscriber. subscription.Create(); Boolean registered = false; // Verify that the subscription is not already registered. foreach (MergeSubscription existing in publication.EnumSubscriptions()) { if (existing.SubscriberName == subscriberName && existing.SubscriptionDBName == subscriptionDbName && existing.SubscriptionType == SubscriptionOption.Pull) { registered = true; } } if (!registered) { // Register the local subscription with the Publisher. publication.MakePullSubscriptionWellKnown( subscriberName, subscriptionDbName, SubscriptionSyncType.Automatic, MergeSubscriberType.Local, 0); } } else { // Do something here if the publication does not exist. throw new ApplicationException(String.Format( "The publication '{0}' does not exist on {1}.", publicationName, publisherName)); } } catch (Exception ex) { // Implement the appropriate error handling here. throw new ApplicationException(String.Format( "The subscription to {0} could not be created.", publicationName), ex); } finally { subscriberConn.Disconnect(); publisherConn.Disconnect(); }
' Define the Publisher, publication, and databases. Dim publicationName As String = "AdvWorksSalesOrdersMerge" Dim publisherName As String = publisherInstance Dim subscriberName As String = subscriberInstance Dim subscriptionDbName As String = "AdventureWorks2012Replica" Dim publicationDbName As String = "AdventureWorks2012" Dim hostname As String = "adventure-works\garrett1" 'Create connections to the Publisher and Subscriber. Dim subscriberConn As ServerConnection = New ServerConnection(subscriberName) Dim publisherConn As ServerConnection = New ServerConnection(publisherName) ' Create the objects that we need. Dim publication As MergePublication Dim subscription As MergePullSubscription Try ' Connect to the Subscriber. subscriberConn.Connect() ' Ensure that the publication exists and that ' it supports pull subscriptions. publication = New MergePublication() publication.Name = publicationName publication.DatabaseName = publicationDbName publication.ConnectionContext = publisherConn If publication.LoadProperties() Then If (publication.Attributes And PublicationAttributes.AllowPull) = 0 Then publication.Attributes = publication.Attributes _ Or PublicationAttributes.AllowPull End If ' Define the pull subscription. subscription = New MergePullSubscription() subscription.ConnectionContext = subscriberConn subscription.PublisherName = publisherName subscription.PublicationName = publicationName subscription.PublicationDBName = publicationDbName subscription.DatabaseName = subscriptionDbName subscription.HostName = hostname ' Specify the Windows login credentials for the Merge Agent job. subscription.SynchronizationAgentProcessSecurity.Login = winLogin subscription.SynchronizationAgentProcessSecurity.Password = winPassword ' Make sure that the agent job for the subscription is created. subscription.CreateSyncAgentByDefault = True ' Create the pull subscription at the Subscriber. subscription.Create() Dim registered As Boolean = False ' Verify that the subscription is not already registered. For Each existing As MergeSubscription In _ publication.EnumSubscriptions() If existing.SubscriberName = subscriberName Then registered = True End If Next If Not registered Then ' Register the local subscription with the Publisher. publication.MakePullSubscriptionWellKnown( _ subscriberName, subscriptionDbName, _ SubscriptionSyncType.Automatic, _ MergeSubscriberType.Local, 0) End If Else ' Do something here if the publication does not exist. Throw New ApplicationException(String.Format( _ "The publication '{0}' does not exist on {1}.", _ publicationName, publisherName)) End If Catch ex As Exception ' Implement the appropriate error handling here. Throw New ApplicationException(String.Format( _ "The subscription to {0} could not be created.", publicationName), ex) Finally subscriberConn.Disconnect() publisherConn.Disconnect() End Try