Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用同步框架将本地MSSQL数据库同步到托管MySQL数据库时出现问题_C#_Mysql_Sql Server_Microsoft Sync Framework - Fatal编程技术网

C# 使用同步框架将本地MSSQL数据库同步到托管MySQL数据库时出现问题

C# 使用同步框架将本地MSSQL数据库同步到托管MySQL数据库时出现问题,c#,mysql,sql-server,microsoft-sync-framework,C#,Mysql,Sql Server,Microsoft Sync Framework,我有个问题。我想使用Sync框架将本地MSSQL db同步到托管的MySQL db,但我遇到了问题,因为我的代码目前使用的是SqlConnection,但我不知道如何使serverConn成为MySqlConnection 我的代码: AppConnectionFactory.cs: public class AppConnectionFactory : IConnectionFactory { private readonly DbProviderFactory _provider;

我有个问题。我想使用Sync框架将本地MSSQL db同步到托管的MySQL db,但我遇到了问题,因为我的代码目前使用的是
SqlConnection
,但我不知道如何使
serverConn
成为MySqlConnection

我的代码:

AppConnectionFactory.cs:

public class AppConnectionFactory : IConnectionFactory
{
    private readonly DbProviderFactory _provider;
    private readonly string _connectionString;
    private readonly string _name;

    public AppConnectionFactory(string connectionName)
    {
        if (connectionName == null)
            throw new ArgumentNullException("connectionName");

        var connStr = ConfigurationManager.ConnectionStrings[connectionName];
        if (connStr == null)
            throw new ConfigurationErrorsException(string.Format("Failed to find the connection named {0} in App.config",connectionName));

        _name = connStr.ProviderName;
        _provider = DbProviderFactories.GetFactory(connStr.ProviderName);
        _connectionString = connStr.ConnectionString;
    }

    public IDbConnection Create()
    {
        var connection = _provider.CreateConnection();
        connection.ConnectionString = _connectionString;
        connection.Open();
        return connection;
    }
}
DbSync.cs:

public class DbSync
{
    private readonly IConnectionFactory _serverConn;
    private readonly IConnectionFactory _clientConn;
    private readonly string _sScope = "SmartFridgeScope";

    public DbSync(IConnectionFactory serverConn, IConnectionFactory clientConn)
    {
        _serverConn = serverConn;
        _clientConn = clientConn;
    }

    public void ProvisionServer()
    {
        var serverConn = (SqlConnection)_serverConn.Create();
        var serverProvision = new SqlSyncScopeProvisioning(serverConn);

        if (serverProvision.ScopeExists(_sScope)) return;

        var scopeDesc = new DbSyncScopeDescription(_sScope);

        var listDesc = SqlSyncDescriptionBuilder.GetDescriptionForTable("List", serverConn);
        scopeDesc.Tables.Add(listDesc);
        var itemDesc = SqlSyncDescriptionBuilder.GetDescriptionForTable("Item", serverConn);
        scopeDesc.Tables.Add(itemDesc);
        var listItemDesc = SqlSyncDescriptionBuilder.GetDescriptionForTable("ListItem",
            serverConn);

        scopeDesc.Tables.Add(listItemDesc);

        serverProvision = new SqlSyncScopeProvisioning(serverConn, scopeDesc);
        serverProvision.SetCreateTableDefault(DbSyncCreationOption.CreateOrUseExisting);
        serverProvision.Apply();
    }

    public void ProvisionClient()
    {
        var clientConn = (SqlConnection)_clientConn.Create();
        var serverConn = (SqlConnection)_serverConn.Create();

        var clientProvision = new SqlSyncScopeProvisioning(clientConn);
        if (clientProvision.ScopeExists(_sScope)) return;

        var scopeDesc = SqlSyncDescriptionBuilder.GetDescriptionForScope(_sScope, serverConn);
        clientProvision = new SqlSyncScopeProvisioning(clientConn, scopeDesc);
        clientProvision.Apply();
    }

    public void Sync()
    {
        var clientConn = (SqlConnection)_clientConn.Create();
        var serverConn = (SqlConnection)_serverConn.Create();

        var syncOrchestrator = new SyncOrchestrator
        {
            LocalProvider = new SqlSyncProvider(_sScope, clientConn),
            RemoteProvider = new SqlSyncProvider(_sScope, serverConn),
            Direction = SyncDirectionOrder.DownloadAndUpload
        };

        syncOrchestrator.Synchronize();
    }
}
有人能帮我使用MySqlConnection而不是SqlConnection吗


如果我需要更多解释,请告诉我。提前感谢。

MySQL没有内置的提供程序。您必须编写自己的实现。嗯,我不知道该怎么做。这不是一个简单的过程,而且肯定比这里的一个答案描述的要多。我链接的那篇文章有一般步骤。谢谢@Claies,你引导我找到了一个我还没有访问过的链接,这可能有助于完成这项任务(不知为什么,我以前在搜索中没有看到这样的链接)。