【问题标题】:Connecting to database in ASP.NET server control在 ASP.NET 服务器控件中连接到数据库
【发布时间】:2010-08-03 00:44:55
【问题描述】:

作为this question 的后续,我正在构建一个自定义服务器控件以放置在 Sharepoint 2010 母版页上。

这背后的想法是它将显示一个从数据库动态填充的菜单。

由于这是一个服务器控件,我将它构建在一个 dll 中,但我遇到了一个小障碍。由于它必须连接到数据库,我需要将连接字符串存储在某处(并使其能够根据目标配置(dev/test/prod)进行配置。

我打算向用户提供实体框架作为我的 ORM,但我对存储连接字符串的位置感到困惑。在普通的 ASP.NET Web 应用程序中,它位于 web.config 中,但这是外部 DLL 中的服务器控件。

我在哪里存储连接字符串,以便我可以构建和部署包含服务器控件的程序集。

编辑:
在发布赏金之前,我尝试使用嵌入式资源 XML 文件来保存连接字符串,虽然这可行,但我很好奇这是否是最佳实践/更好的方法?

【问题讨论】:

    标签: asp.net entity-framework connection-string custom-server-controls


    【解决方案1】:

    我建议不要让控件连接到数据库。相反,控件的用户应该连接到数据库,然后将数据绑定到控件。

    【讨论】:

    • 我不确定我是否理解。你是什​​么意思控件的用户应该连接?
    • 是的。关注点分离。控件应该关注呈现 HTML。其他的事情应该关注将数据传递给控件呈现 HTML 所需的控件。
    • 好的,没关系,但我想不出控件能够获取此信息的方法。填充自身的控件调用会是什么(考虑到我只是想构建一个可以插入 Sharepoint 页面的控件)
    • 它会像 DataGrid 一样进行数据绑定。
    • 好吧,现在我很困惑。我们对控件的数据绑定到底是什么?连接字符串?或所需的数据?如果不清楚,我正在使用连接的结果来创建一些 HTML,而不是在表格或类似的东西中显示它。
    【解决方案2】:

    连接字符串应放置在 .dll 用于其配置文件的任何应用程序中。由于这是 ASP.NET,web.config 文件会很好。当您从 DLL 调用任何方法时,您应该将连接字符串作为对象传递给它:

    MyConnectionString
    {
        get
        {
            return ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString
        }
    }
    

    用法

    using(SqlConnection conn = new SqlConnection(MyConnectionString))
    {
        //other stuff here. Like making your command object, or passing it.. etc.)
    }
    

    【讨论】:

    • 那么如果我将连接字符串添加到 Sharepoint web.config,它会自动获取它吗?
    • @Alastair Pitts 可能会也可能不会。我不会打赌。您必须编写一行代码来返回连接字符串并将其传递给 DLL。我已经更新了我的答案以包括一种可能的方式。
    猜你喜欢
    • 1970-01-01
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 2011-08-12
    • 2014-07-14
    • 2016-12-17
    相关资源
    最近更新 更多