【问题标题】:How can I show the database name to my visitors in MVC4/Razor?如何在 MVC4/Razor 中向访问者显示数据库名称?
【发布时间】:2013-04-02 16:38:47
【问题描述】:

我想告知我的访问者他们当前正在与哪个数据库进行交互。我的应用程序的 web.config 中只有一个实体框架连接字符串。数据库名称(初始目录)是存储在 web.config 中的连接字符串的一部分。

我可以通过包含以下 html 在共享布局中公开整个连接字符串。

You are connecting to <span class="databasename">@System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionStringName"].ConnectionString)</span>!

但我不需要整个连接字符串,只需要数据库名称。有没有办法在不涉及控制器或实例化新的 SqlConnection() 的情况下做到这一点?有什么建议么?

【问题讨论】:

  • 如果只允许一个连接,为什么要动态生成此信息?
  • 因为我维护了三个版本的应用程序(开发、测试、生产),其中唯一的核心区别是连接字符串。在页眉中包含数据库名称是识别我正在与之交互的数据库的便捷方式。

标签: asp.net-mvc string razor asp.net-mvc-4 connection


【解决方案1】:

你可以试试这样的:

@{
    var sqlDB = new System.Data.SqlClient.SqlConnectionStringBuilder(
        System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionStringName"].ConnectionString)
    );
    var dbName = sqlDB.InitialCatalog;
}

You are connecting to <span class="databasename">@dbName</span>!

这将解析连接字符串并返回数据库。或者,如果您想要与连接字符串不同的属性,只需使用 SqlConnectionStringBuilder 对象的不同属性即可。

【讨论】:

  • 去吃午饭了,但这看起来可行。我稍后会告诉你。谢谢!
  • 我尝试了您的解决方案并收到了一个运行时错误,keyword not supported 'metadata' 这个thread 帮助阐明了我应该使用 EntityConnectionStringBuilder 而不是 SqlConnectionStringBuilder 来梳理数据库名称这一事实。
  • 我的最终解决方案有点笨拙,但有效.... @{ var entityConnectionString = new System.Data.EntityClient.EntityConnectionStringBuilder(System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionStringName"].ConnectionString); var ProviderConnectionString = entityConnectionString.ProviderConnectionString; var sqlDB = new System.Data.SqlClient.SqlConnectionStringBuilder(ProviderConnectionString); var dbName = sqlDB.InitialCatalog; } 感谢 Eilon 引导我朝着正确的方向前进!
【解决方案2】:

我用

@using Firm.Applic.Common
@Html.RenderDataSource() 

在标记中和这个 HtmlHelper 在一个类中

using System.Web;
using System.Web.Mvc;
using System.Configuration;
using System.Data.Common;

namespace Firm.Applic.Common
{
    public static class HtmlHelpers
    {
        public static IHtmlString RenderDataSource(this HtmlHelper htmlHelper)
        {
            var cnstr = ConfigurationManager.ConnectionStrings["ORA"].ConnectionString;
            var builder = new DbConnectionStringBuilder();
            builder.ConnectionString = cnstr;
            return new MvcHtmlString(builder["Data Source"].ToString());
        }
    }   
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-07
    • 2012-10-26
    • 1970-01-01
    • 2018-11-22
    • 2019-03-27
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    相关资源
    最近更新 更多