连接字符串之间切换

时间:2014-03-18 14:53:02

标签: c# .net asp.net-mvc-4 web-config connection-string

我是asp.net MVC的新手。 我目前正在重新编写一个应用程序,该应用程序最初是使用asp v #.net 4.5从asp c #.net 4.5开发的。 MVC。

我已经使用mvc simplemembership提供程序设计了登录屏幕。但问题是该应用程序为不同的办公地点使用多个数据库。即登录用户将被提供下拉列表框(站点)以选择除用户名和位置之外的位置。密码。根据所选的位置,应用程序应查看不同数据库中的用户详细信息。

enter image description here

以下是现有应用程序中多个连接字符串的显示方式。

        <appSettings>
            <add key="DBConnection_bk" value="Server=server1;UID=sa;PWD=*****;pooling=false;connect timeout=800;database=bangkong;"/>
            <add key="DBConnection_dxb" value="Server=server1;UID=sa;PWD=*****;pooling=false;connect timeout=800;database=dubai;"/>        
            <add key="DBConnection_hk" value="Server=server1;UID=sa;PWD=*****;pooling=false;connect timeout=800;database=Hongkong;"/>
            <add key="DBConnection_syd" value="Server=server1;UID=sa;PWD=*****;pooling=false;connect timeout=800;database=sydney;"/>
            <add key="DBConnection_sha" value="Server=server1;UID=sa;PWD=*****;pooling=false;connect timeout=800;database=shanghai;"/>         
                <add key="crServerName" value="server1" />
                <add key="crLogin" value="sa" />
                <add key="crPassword" value="*****" />  
                <add key="crDBConnection_bk" value="bangkong" />
                <add key="crDBConnection_dxb" value="dubai" />
                <add key="crDBConnection_hk" value="hongkong" />
                <add key="crDBConnection_syd" value="sydney" />
                <add key="crDBConnection_sha" value="shanghai" />
        </appSettings>

我的问题是我可以使用MVC 4存档相同的功能吗?即根据所选的下拉列表框(站点)值,我可以在内部选择连接字符串吗?

我也愿意接受建议。如果上面的方法不正确,那么存档的最佳方式是什么?

提前致谢!

1 个答案:

答案 0 :(得分:1)

您应该从代码和配置动态构建连接字符串。

您可以在配置文件中存储可能的目标服务器和数据库,以及连接超时和池等设置,但每个设置都是单独的配置值,而不是在连接字符串中反复复制它们。

使用服务器和数据库列表构建站点组合框,并根据用户输入和配置设置构建连接字符串。

public bool TryLogin(out connectionString)
{
    // set connectionString using input controls and config settings, as you see fit

    using (var cn = new SqlConnection(connectionString))
    {
        try
        {
            cn.Open();
            cn.Close();
        }
        catch (SqlException ex)
        {
            // connection attempt failed
            return false;
        }

        // connection attempt succeeded, connection string proven to be valid
        return true;
    }
}

我还建议你在web.config文件中查看how to make your own configuration elements。这有助于强制您的设置输入,并使代码中的使用更加清晰。

这样做,您的配置文件可能最终会出现这样的情况:

<dbSettings timeout="800" pooling="false">
    <possibleDbs>
        <db server="server1" database="bangkong"/>
        <db server="server1" database="shangai"/>
        <!-- etc -->
    </possibleDbs>
</dbSettings>

正如您所看到的,这更清洁,更安全。根据您的要求,您可能会做得更好。