Export (0) Print
Expand All

Subscription.Create Method

Creates the subscription registration at the Publisher.

Namespace:  Microsoft.SqlServer.Replication
Assembly:  Microsoft.SqlServer.Rmo (in Microsoft.SqlServer.Rmo.dll)

public void Create()

The Create method can only be called by members of the sysadmin fixed server role at the Publisher or by members of the db_owner fixed database role on the publication database.

Calling Create is equivalent to executing sp_addsubscription or sp_addmergesubscription.

This namespace, class, or member is supported only in version 2.0 of the Microsoft .NET Framework.

This example creates a push subscription to a transactional publication.

			// Define the Publisher, publication, and databases.
			string publicationName = "AdvWorksProductTran";
			string publisherName = publisherInstance;
			string subscriberName = subscriberInstance;
            string subscriptionDbName = "AdventureWorks2008R2Replica";
            string publicationDbName = "AdventureWorks2008R2";

			//Create a connection to the Publisher.
			ServerConnection conn = new ServerConnection(subscriberName);

			// Create the objects that we need.
			TransPublication publication;
			TransSubscription subscription;

			try
			{
				// Connect to the Publisher.
				conn.Connect();

				// Ensure that the publication exists and that 
				// it supports push subscriptions.
				publication = new TransPublication();
				publication.Name = publicationName;
				publication.DatabaseName = publicationDbName;
				publication.ConnectionContext = conn;

				if (publication.IsExistingObject)
				{
					if ((publication.Attributes & PublicationAttributes.AllowPush) == 0)
					{
						publication.Attributes |= PublicationAttributes.AllowPush;
					}

					// Define the push subscription.
					subscription = new TransSubscription();
					subscription.ConnectionContext = conn;
					subscription.SubscriberName = subscriberName;
					subscription.PublicationName = publicationName;
					subscription.DatabaseName = publicationDbName;
					subscription.SubscriptionDBName = subscriptionDbName;

					// Specify the Windows login credentials for the Distribution Agent job.
					subscription.SynchronizationAgentProcessSecurity.Login = winLogin;
					subscription.SynchronizationAgentProcessSecurity.Password = winPassword;

                    // 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 push subscription.
					subscription.Create();
				}
				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
			{
				conn.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 = "AdventureWorks2008R2Replica"
Dim publicationDbName As String = "AdventureWorks2008R2"

'Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(subscriberName)

' Create the objects that we need.
Dim publication As TransPublication
Dim subscription As TransSubscription

Try
    ' Connect to the Publisher.
    conn.Connect()

    ' Ensure that the publication exists and that 
    ' it supports push subscriptions.
    publication = New TransPublication()
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName
    publication.ConnectionContext = conn

    If publication.IsExistingObject Then
        If (publication.Attributes And PublicationAttributes.AllowPush) = 0 Then
            publication.Attributes = publication.Attributes _
            Or PublicationAttributes.AllowPush
        End If

        ' Define the push subscription.
        subscription = New TransSubscription()
        subscription.ConnectionContext = conn
        subscription.SubscriberName = subscriberName
        subscription.PublicationName = publicationName
        subscription.DatabaseName = publicationDbName
        subscription.SubscriptionDBName = subscriptionDbName

        ' Specify the Windows login credentials for the Distribution Agent job.
        subscription.SynchronizationAgentProcessSecurity.Login = winLogin
        subscription.SynchronizationAgentProcessSecurity.Password = winPassword

        ' 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 push subscription.
        subscription.Create()
    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
    conn.Disconnect()
End Try


This example creates a push subscription to a merge publication.

			// Define the Publisher, publication, and databases.
			string publicationName = "AdvWorksSalesOrdersMerge";
			string publisherName = publisherInstance;
			string subscriberName = subscriberInstance;
            string subscriptionDbName = "AdventureWorks2008R2Replica";
            string publicationDbName = "AdventureWorks2008R2";
			string hostname = @"adventure-works\garrett1";

			//Create a connection to the Publisher.
			ServerConnection conn = new ServerConnection(subscriberName);

			// Create the objects that we need.
			MergePublication publication;
			MergeSubscription subscription;

			try
			{
				// Connect to the Publisher.
				conn.Connect();

				// Ensure that the publication exists and that 
				// it supports push subscriptions.
				publication = new MergePublication();
				publication.Name = publicationName;
				publication.DatabaseName = publicationDbName;
				publication.ConnectionContext = conn;

				if (publication.IsExistingObject)
				{
					if ((publication.Attributes & PublicationAttributes.AllowPush) == 0)
					{
						publication.Attributes |= PublicationAttributes.AllowPush;
					}

					// Define the push subscription.
					subscription = new MergeSubscription();
					subscription.ConnectionContext = conn;
					subscription.SubscriberName = subscriberName;
					subscription.PublicationName = publicationName;
					subscription.DatabaseName = publicationDbName;
					subscription.SubscriptionDBName = subscriptionDbName;
					subscription.HostName = hostname;

					// Set a schedule to synchronize the subscription every 2 hours
					// during weekdays from 6am to 10pm.
					subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.Weekly;
					subscription.AgentSchedule.FrequencyInterval = Convert.ToInt32(0x003E);
					subscription.AgentSchedule.FrequencyRecurrenceFactor = 1;
					subscription.AgentSchedule.FrequencySubDay = ScheduleFrequencySubDay.Hour;
					subscription.AgentSchedule.FrequencySubDayInterval = 2;
					subscription.AgentSchedule.ActiveStartDate = 20051108;
					subscription.AgentSchedule.ActiveEndDate = 20071231;
					subscription.AgentSchedule.ActiveStartTime = 060000;
					subscription.AgentSchedule.ActiveEndTime = 100000;

					// Specify the Windows login credentials for the Merge Agent job.
					subscription.SynchronizationAgentProcessSecurity.Login = winLogin;
					subscription.SynchronizationAgentProcessSecurity.Password = winPassword;

					// Create the push subscription.
					subscription.Create();
				}
				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
			{
				conn.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 = "AdventureWorks2008R2Replica"
Dim publicationDbName As String = "AdventureWorks2008R2"
Dim hostname As String = "adventure-works\garrett1"

'Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(subscriberName)

' Create the objects that we need.
Dim publication As MergePublication
Dim subscription As MergeSubscription

Try
    ' Connect to the Publisher.
    conn.Connect()

    ' Ensure that the publication exists and that 
    ' it supports push subscriptions.
    publication = New MergePublication()
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName
    publication.ConnectionContext = conn

    If publication.IsExistingObject Then
        If (publication.Attributes And PublicationAttributes.AllowPush) = 0 Then
            publication.Attributes = publication.Attributes _
            Or PublicationAttributes.AllowPush
        End If

        ' Define the push subscription.
        subscription = New MergeSubscription()
        subscription.ConnectionContext = conn
        subscription.SubscriberName = subscriberName
        subscription.PublicationName = publicationName
        subscription.DatabaseName = publicationDbName
        subscription.SubscriptionDBName = subscriptionDbName
        subscription.HostName = hostname

        ' Set a schedule to synchronize the subscription every 2 hours
        ' during weekdays from 6am to 10pm.
        subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.Weekly
        subscription.AgentSchedule.FrequencyInterval = Convert.ToInt32("0x003E", 16)
        subscription.AgentSchedule.FrequencyRecurrenceFactor = 1
        subscription.AgentSchedule.FrequencySubDay = ScheduleFrequencySubDay.Hour
        subscription.AgentSchedule.FrequencySubDayInterval = 2
        subscription.AgentSchedule.ActiveStartDate = 20051108
        subscription.AgentSchedule.ActiveEndDate = 20071231
        subscription.AgentSchedule.ActiveStartTime = 60000
        subscription.AgentSchedule.ActiveEndTime = 100000

        ' Specify the Windows login credentials for the Merge Agent job.
        subscription.SynchronizationAgentProcessSecurity.Login = winLogin
        subscription.SynchronizationAgentProcessSecurity.Password = winPassword

        ' Create the push subscription.
        subscription.Create()
    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
    conn.Disconnect()
End Try


Community Additions

ADD
Show:
© 2014 Microsoft