动态更改数据库连接

Dynamically change connection on database

我遇到了一个问题,我找不到解决方案,也许有人可以提供帮助。

当第一个连接对于已停止的服务器不可用时,是否可以动态更改应用程序使用的 MySQL 连接?

我有复制的克隆服务器,当主服务器上的第一个 MySQL 连接不可用时应该查询它。

如果可能的话,我可以用哪种编程语言得到这个?

我在 ASPNET、Classic ASP 和 VBScript 上使用 C#。

提前感谢您的任何建议,非常感谢。

编辑#01

string sql;
DataSet dsProducts = new DataSet();
public static OdbcConnection conn;

private static OdbcConnection _GetDataConnection()
{
    string conn1 = ConfigurationManager.ConnectionStrings["ConnectionStr1"].ConnectionString;
    string conn2 = ConfigurationManager.ConnectionStrings["ConnectionStr2"].ConnectionString;

    conn = null;

    try
    {
        conn = new OdbcConnection(conn1);
    }
    catch (OdbcException)
    {
        conn = new OdbcConnection(conn2);
    }

    HttpContext.Current.Response.Write(conn.DataSource.ToString() + "<br /><br />");
    return conn;
}

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        _GetDataConnection();

        if (conn != null && conn.State == ConnectionState.Open)
        {
            conn.Close();
            conn.Open();
        }

        ddl1.AppendDataBoundItems = true;

        sql = @String.Format(" SELECT ES FROM `adoTable`; ");

        using (conn)
        {
            using (OdbcCommand cmd =
                new OdbcCommand(sql, conn))
            {
                try
                {
                    cmd.CommandType = CommandType.Text;
                    cmd.Connection.Open();

                    using (OdbcDataAdapter sda =
                        new OdbcDataAdapter(cmd))
                    {
                        sda.Fill(dsProducts);
                        ddl1.DataSource = dsProducts.Tables[0];
                        ddl1.DataTextField = "ES";
                        ddl1.DataValueField = "ES";
                        ddl1.DataBind();

                        if (ddl1.Items.Count > 1)
                        {
                            ddl1.Enabled = true;
                        }
                        else
                        {
                            ddl1.Enabled = false;
                        }
                    }
                }
                catch (OdbcException)
                {
                    cmd.Connection.Close();
                    cmd.Connection.Dispose();
                }
            }
        }
    }
}

如果你有 .net 项目,你可以将这两个连接放入配置文件 (web.config) 并简单地创建一个单独的函数至极 return 连接,特别是你要进入的这个测试哪个有效并通过它。当需要执行其他查询时,调用包装函数以便为您完成工作。

例如

private static MySqlConnection _GetDataConnection()
        {
            string conn1 =ConfigurationManager.ConnectionStrings["ConnectionStr1"].ConnectionString;
            string conn2 =ConfigurationManager.ConnectionStrings["ConnectionStr2"].ConnectionString;
            MySqlConnection conn=null; 

            try
            {
              conn = new MySqlConnection(conn1);
              conn.Open();  
              Session["string_conn"] = conn1;            
            }
            catch(MySqlException)
            {
              conn = new MySqlConnection(conn2);
              Session["string_conn"] = conn2; 
            }

            return conn;
        }