1

次のような状況があります: ディストリビューター データベースとしてディストリビューション、パブリケーション データベースとして production1、サブスクライバーとして production2 です。C# RMO を使用してパブリケーションを作成しようとすると、次のエラーが発生します。

値 NULL を列 'pubid'、テーブル 'production1.dbo.IHpublications' に挿入できません。列はヌルを許可しません。INSERT が失敗しました。\r\nパブリケーションを作成できませんでした。\r\nデータベース コンテキストを 'production1' に変更しました。\r\nステートメントは終了しました。

コードは以下に添付されています - MSDN から取得:

        // Set the Publisher, publication database, and publication names.
        string publicationName = "productionTran";
        string publicationDbName = "production1";
        string publisherName = "OSKAR-KOMPUTER";

        ReplicationDatabase publicationDb;
        TransPublication publication;

        // Create a connection to the Publisher using Windows Authentication.
        ServerConnection conn;
        conn = new ServerConnection(publisherName);


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

            // Enable the AdventureWorks database for transactional publishing.
            publicationDb = new ReplicationDatabase(publicationDbName, conn);

            // If the database exists and is not already enabled, 
            // enable it for transactional publishing.
            if (publicationDb.LoadProperties())
            {
                if (!publicationDb.EnabledTransPublishing)
                {
                    publicationDb.EnabledTransPublishing = true;
                }

                // If the Log Reader Agent does not exist, create it.
                if (!publicationDb.LogReaderAgentExists)
                {
                    // Specify the Windows account under which the agent job runs.
                    // This account will be used for the local connection to the 
                    // Distributor and all agent connections that use Windows Authentication.
                    //publicationDb.LogReaderAgentProcessSecurity.Login = winLogin;
                    //publicationDb.LogReaderAgentProcessSecurity.Password = winPassword;

                    // Explicitly set authentication mode for the Publisher connection
                    // to the default value of Windows Authentication.
                    publicationDb.LogReaderAgentPublisherSecurity.WindowsAuthentication = true;

                    // Create the Log Reader Agent job.
                    publicationDb.CreateLogReaderAgent();
                }
            }
            else
            {
                throw new ApplicationException(String.Format(
                    "The {0} database does not exist at {1}.",
                    publicationDb, publisherName));
            }

            // Set the required properties for the transactional publication.
            publication = new TransPublication();
            publication.ConnectionContext = conn;
            publication.Name = publicationName;
            publication.DatabaseName = publicationDbName;

            // Specify a transactional publication (the default).
            publication.Type = PublicationType.Transactional;

            // Activate the publication so that we can add subscriptions.
            publication.Status = State.Active;

            // Enable push and pull subscriptions and independent Distribition Agents.
            publication.Attributes |= PublicationAttributes.AllowPull;
            publication.Attributes |= PublicationAttributes.AllowPush;
            publication.Attributes |= PublicationAttributes.IndependentAgent;

            // Specify the Windows account under which the Snapshot Agent job runs.
            // This account will be used for the local connection to the 
            // Distributor and all agent connections that use Windows Authentication.
           // publication.SnapshotGenerationAgentProcessSecurity.Login = winLogin;
          //  publication.SnapshotGenerationAgentProcessSecurity.Password = winPassword;

            // Explicitly set the security mode for the Publisher connection
            // Windows Authentication (the default).
            publication.SnapshotGenerationAgentPublisherSecurity.WindowsAuthentication = true;

            if (!publication.IsExistingObject)
            {
                // Create the transactional publication.
                publication.Create();

                // Create a Snapshot Agent job for the publication.
                publication.CreateSnapshotAgent();
            }
            else
            {
                throw new ApplicationException(String.Format(
                    "The {0} publication already exists.", publicationName));
            }
        }

        catch (Exception ex)
        {
            // Implement custom application error handling here.
            throw new ApplicationException(String.Format(
                "The publication {0} could not be created.", publicationName), ex);
        }
        finally
        {
            conn.Disconnect();
        }

さらに言えば、ディストリビューターとパブリッシャーがインストールされています。何か案は?前もって感謝します。

4

1 に答える 1