Динамически изменить соединение в базе данных - PullRequest
0 голосов
/ 10 октября 2019

Я столкнулся с проблемой, которую не могу найти решение, возможно, кто-то может помочь.

Возможно ли динамически изменить соединение MySQL, используемое приложением, когда первое соединение недоступно для остановленного сервера?

У меня есть реплицированный сервер-клон, который следует запрашивать, когда первое соединение MySQL на главном сервере недоступно.

На каком языке программирования я могу получить это, если это возможно?

Я использую C # в ASPNET, Classic ASP и VBScript.

Заранее благодарен за любое предложение, очень признателен.

Редактировать # 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();
                }
            }
        }
    }
}

1 Ответ

1 голос
/ 10 октября 2019

если у вас есть проект .net, вы можете поместить два соединения в файл конфигурации (web.config) и просто создать отдельную функцию, которая возвращает соединение, в частности, вы собираетесь протестировать, какая из них работает, и передать еечерез. Когда нужно выполнить другие запросы, вызовите упакованную функцию, которая сделает всю работу за вас.

Например

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;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...