C# 如何使用Microsoft sync Framework与筛选器数据同步
我正在使用sql server 2008和c编写Microsoft同步框架,下面是我的代码C# 如何使用Microsoft sync Framework与筛选器数据同步,c#,sql,sql-server,synchronization,microsoft-sync-framework,C#,Sql,Sql Server,Synchronization,Microsoft Sync Framework,我正在使用sql server 2008和c编写Microsoft同步框架,下面是我的代码 public static void SetUp(string _pScopeName, DbSyncTableDescription _pDbSyncTable, SqlConnection serverConn, SqlConnection clientConn) { // Create a scope named "_ITEM" and add tables
public static void SetUp(string _pScopeName, DbSyncTableDescription _pDbSyncTable, SqlConnection serverConn, SqlConnection clientConn)
{
// Create a scope named "_ITEM" and add tables to it.
DbSyncScopeDescription productScope = new DbSyncScopeDescription(_pScopeName);
// Define the Products table.
// Add the Table to the scope object.
productScope.Tables.Add(_pDbSyncTable);
// Create a provisioning object for "_ITEM" and apply it to the on-premise database if one does not exist.
SqlSyncScopeProvisioning serverProvision = new SqlSyncScopeProvisioning(serverConn, productScope);
serverProvision.ObjectSchema = ".dbo";
string _tblName = _pDbSyncTable.LocalName.Replace("[", "").Replace("]", "");
serverProvision.SetCreateTableDefault(DbSyncCreationOption.Skip);
serverProvision.Tables[_tblName].AddFilterColumn("_WORKGROUPNAME");
serverProvision.Tables[_pDbSyncTable.LocalName].FilterClause = "[" + _tblName + "].[_WORKGROUPNAME] = " + _CCompanyVar._WORKGROUPNAME;
//Skip create Sync Framework objects because we have already created them on the previous step
serverProvision.SetCreateTableDefault(DbSyncCreationOption.Skip);
//Create new select changes procedure for our scope
serverProvision.SetCreateProceduresForAdditionalScopeDefault(DbSyncCreationOption.Create);
if (_CPubVar._Stop_bool)
{
return;
}
if (!serverProvision.ScopeExists(_pScopeName))
serverProvision.Apply();
// Provision the SQL client database from the on-premise SQL Server database if one does not exist.
SqlSyncScopeProvisioning clientProvision = new SqlSyncScopeProvisioning(clientConn, productScope);
if (_CPubVar._Stop_bool)
{
return;
}
if (!clientProvision.ScopeExists(_pScopeName))
clientProvision.Apply();
}
我得到一个错误:
The multi-part identifier "_ATTENDANCESTATUS._WORKGROUPNAME" could not be bound.
Invalid column name 'FPR'.
第行:
serverProvision.Apply();
如果我删除下面的行,我的同步过程在没有筛选器的情况下可以正常工作
string _tblName = _pDbSyncTable.LocalName.Replace("[", "").Replace("]", "");
serverProvision.SetCreateTableDefault(DbSyncCreationOption.Skip);
serverProvision.Tables[_tblName].AddFilterColumn("_WORKGROUPNAME");
serverProvision.Tables[_pDbSyncTable.LocalName].FilterClause = "[" + _tblName + "].[_WORKGROUPNAME] = " + _CCompanyVar._WORKGROUPNAME;
//Skip create Sync Framework objects because we have already created them on the previous step
serverProvision.SetCreateTableDefault(DbSyncCreationOption.Skip);
//Create new select changes procedure for our scope
serverProvision.SetCreateProceduresForAdditionalScopeDefault(DbSyncCreationOption.Create);
\u WORKGROUPNAME
是我的所有表中的一个公共字段,我想筛选\u WORKGROUPNAME
上的数据,我将该数据传递到\u CCompanyVar.\u WORKGROUPNAME(字符串变量)
如果我错了,请指出…使用此
public static void SetUp(string _pScopeName, DbSyncTableDescription _pDbSyncTable, SqlConnection serverConn, SqlConnection clientConn)
{
// Create a scope named "_ITEM" and add tables to it.
DbSyncScopeDescription productScope = new DbSyncScopeDescription(_pScopeName);
// Define the Products table.
// Add the Table to the scope object.
Collection<string> includeColumns = new Collection<string>();
for (int i = 0; i < _pDbSyncTable.Columns.Count; i++)
{
includeColumns.Add(_pDbSyncTable.Columns[i].UnquotedName);
}
DbSyncTableDescription productDescription = SqlSyncDescriptionBuilder.GetDescriptionForTable(_pScopeName, includeColumns, serverConn);
productScope.Tables.Add(productDescription);
// Create a provisioning object for "_ITEM" and apply it to the on-premise database if one does not exist.
SqlSyncScopeProvisioning serverProvision = new SqlSyncScopeProvisioning(serverConn, productScope);
serverProvision.ObjectSchema = ".dbo";
// Filter Rows for the ListPrice column
serverProvision.Tables[ _pDbSyncTable.LocalName].AddFilterColumn("_WORKGROUPNAME");
serverProvision.Tables[ _pDbSyncTable.LocalName].FilterClause = "[side].[_WORKGROUPNAME] = '" + _CCompanyVar._WORKGROUPNAME + "'";
if (_CPubVar._Stop_bool)
{
return;
}
if (!serverProvision.ScopeExists(_pScopeName))
serverProvision.Apply();
// Provision the SQL client database from the on-premise SQL Server database if one does not exist.
SqlSyncScopeProvisioning clientProvision = new SqlSyncScopeProvisioning(clientConn, productScope);
if (_CPubVar._Stop_bool)
{
return;
}
if (!clientProvision.ScopeExists(_pScopeName))
clientProvision.Apply();
}
publicstaticvoid设置(字符串_pScopeName,DbSyncTableDescription _pDbSyncTable,sqlconnectionserverconn,sqlconnectionclientconn)
{
//创建一个名为“_ITEM”的范围并向其中添加表。
dbsyncopedescription productScope=新的dbsyncopedescription(_pScopeName);
//定义产品表。
//将表添加到范围对象。
集合includeColumns=新集合();
对于(int i=0;i<\u pDbSyncTable.Columns.Count;i++)
{
includeColumns.Add(_pDbSyncTable.Columns[i].UnquotedName);
}
DbSyncTableDescription productDescription=SqlSyncDescriptionBuilder.GetDescriptionForTable(_pScopeName,includeColumns,serverConn);
productScope.Tables.Add(productDescription);
//为“_ITEM”创建一个配置对象,如果不存在,则将其应用于本地数据库。
SqlSyncScopeProvisioning ServerProvisioning=新的SqlSyncScopeProvisioning(serverConn,productScope);
serverProvision.ObjectSchema=“.dbo”;
//筛选ListPrice列的行
serverProvision.Tables[\u pDbSyncTable.LocalName].AddFilterColumn(“\u WORKGROUPNAME”);
serverProvision.Tables[\u pDbSyncTable.LocalName].FilterClause=“[side]。[u WORKGROUPNAME]=”+\u CCompanyVar.\u WORKGROUPNAME+”;
如果(\u CPubVar.\u Stop\u bool)
{
返回;
}
如果(!serverProvision.ScopeExists(_pScopeName))
serverProvision.Apply();
//如果本地SQL Server数据库不存在,请从该数据库中设置SQL客户端数据库。
SqlSyncScopeProvisioning ClientProvisioning=新的SqlSyncScopeProvisioning(clientConn,productScope);
如果(\u CPubVar.\u Stop\u bool)
{
返回;
}
如果(!clientProvision.ScopeExists(_pScopeName))
clientProvision.Apply();
}