0

在 .NET 的世界里,我还是个婴儿,我被赋予了一项我似乎无法解决的任务。

我需要一个应用程序来连接到多个数据库。数据库具有静态 IP 地址。

因此,基本上当用户单击按钮 database1 时,它将转到 IP1,如果他们单击 database2,它会自动路由到 IP2。

我觉得我忽略了一些可能如此简单的事情。

谢谢

4

2 回答 2

0

1) 在 web.config 文件中有 2 个连接。2) 在按钮上单击事件是指第一个 IP,在另一个按钮上单击连接另一个 IP。

于 2013-06-18T07:27:43.813 回答
0

以前从未这样做过,但有一些想法来实现这一点。在我的项目中,我引用了 2 个数据库。PostgreSQL 和甲骨文。在我的应用程序中,我有几个提供者类实现数据库访问并为此使用 Executor 类。要创建此执行程序的实例,我需要使用我的数据库的 IP(在本地网络中)传递连接字符串。我从 Web.config 文件中收到的连接字符串,例如

    //Here is the connection strings with IP, Login, and DBname from web.config You need to configure it dynamicaly
    private string PostgreSQLConnection = WebConfigurationManager.ConnectionStrings["PostgreSQLConnection"].ConnectionString;
    private string OracleConnection = WebConfigurationManager.ConnectionStrings["OracleConnection"].ConnectionString;

    using (PostgreSQLExecutor executor = new PostgreSQLExecutor(PostgreSQLConnection))
    {
        executor.ExecuteQuery(@"query");
    }

    using (OracleSQLExecutor executor = new OracleSQLExecutor(OracleConnection))
    {
        executor.ExecuteQuery(@"query");
    }

将任何字符串作为连接字符串传递是没有问题的。我不知道你的应用程序使用什么数据库访问库,但我确信它有你的类女巫来配置你的会话,就像我的例子一样。所以,我认为你只需要找到你的数据库配置类并实现动态配置逻辑。最好用这样的数据库部分创建路由。

 routes.MapRoute(
               name: "Default",
               url: "{databaseSection}/{controller}/{action}/{id}",
               defaults: new { databaseSection = "sectionName1", controller = "Home", action = "Index", id = UrlParameter.Optional },
               constraints: new { databaseSection = "sectionName1|sectionName2" }
           );

因此,如果应用程序将 url 切换到 site.com/sectionName2/home/index,您可以检索部分名称并将您的数据库访问配置为全局行为。例如在 global.asax Application_BeginRequest 事件中

 protected void Application_BeginRequest(object sender, EventArgs e)
 {
    string section = Request.RequestContext.RouteData.Values["databaseSection"].ToString();
    if(section == sectionName2)
    {
        do some stuff to configure your database session 
    }
    else
    {
        default behavior
    }
 }

或者,您可以为此使用 cookie。希望能帮助到你。对不起我的英语/:

于 2013-06-18T07:30:14.787 回答