我有以下情况:分发为分发服务器数据库,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();
}
我可以说更多,分销商和广告商已安装。有任何想法吗?提前谢谢。
答案 0 :(得分:0)
我有同样的问题。 在我要发布的数据库上运行以下命令对我有用。
DROP TABLE dbo.iharticles;
DROP TABLE dbo.ihcolumns;
DROP TABLE dbo.ihconstrainttypes;
DROP TABLE dbo.ihindextypes;
DROP TABLE dbo.ihpublications;
DROP TABLE dbo.ihpublishercolumnconstraints;
DROP TABLE dbo.ihpublishercolumnindexes;
DROP TABLE dbo.ihpublishercolumns;
DROP TABLE dbo.ihpublisherconstraints;
DROP TABLE dbo.ihpublisherindexes;
DROP TABLE dbo.ihpublishers;
DROP TABLE dbo.ihpublishertables;
DROP TABLE dbo.ihsubscriptions;
DROP TABLE dbo.syssubscriptions
DROP VIEW dbo.syspublications;
DROP VIEW dbo.sysarticlecolumns;
DROP VIEW dbo.syssubscriptions;
DROP VIEW dbo.sysextendedarticlesview;
DROP VIEW dbo.ihextendedarticleview;
DROP VIEW dbo.ihextendedsubscriptionview;
然后我使用向导禁用发布,然后使用向导重新启用它并能够创建发布。