动态更改数据库连接
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;
}
我遇到了一个问题,我找不到解决方案,也许有人可以提供帮助。
当第一个连接对于已停止的服务器不可用时,是否可以动态更改应用程序使用的 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;
}