LINQ to SQL connectionstring

时间:2011-02-21 17:09:09

标签: c# wpf linq-to-sql

我有一个应用程序,我希望能够为我的LINQ to SQL配置连接字符串。我已经尝试了很多不同的方法,但似乎无法让它发挥作用。我想在运行应用程序时在代码中动态执行此操作,原因是用户可以更改连接设置。

如果我从app.config中删除了connectionString,应用程序仍能正常工作(通信),这让我想知道应该在哪里更改连接字符串?

6 个答案:

答案 0 :(得分:9)

我认为最好的方法是结合Albin和Rup的答案。在配置文件中有一个值,然后在运行时读取它并将其提供给上下文构造函数,如下所示:

<强> WEB.CONFIG:

<appSettings>
<add key="ConString" Value="The connection string" />

<强> CODE:

//read value from config
var DBConnString = System.Configuration.ConfigurationManager.AppSettings("ConString");

//open connection
var dataContext= new MyDataContext(sDBConnString)

通过这种方式,即使在运行时也可以更改连接字符串,它可以正常运行并更改正在运行的程序。

答案 1 :(得分:8)

您可以将覆盖连接字符串传递到DataContext constructor

var db = new MyDataContext("Data Source=Something Else;")

答案 2 :(得分:2)

DBML类(YourDataContext)有一个重载的构造函数,它接受ConnectionString,因此请尝试实例化而不是默认的。从app.config获取连接字符串并使用它来创建实例。

YourDataContext context = new  YourDataContext (ConfigurationManager.ConnectionStrings["ConnStringInAppConfig"].ConnectionString)

答案 3 :(得分:0)

您应该在app.config中更改它。它没有的原因是LINQ2SQL设计器创建了设计DBML时使用的连接字符串的回退。如果您在app.config中定义了一个连接字符串,而是使用它。

答案 4 :(得分:0)

默认情况下,您的构造函数看起来像这样

#include <QtGui>
#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
#include <QtWidgets>
#endif

您可以更改返回值而不是

public dbDataContext() : 
            base(global::invdb.Properties.Settings.Default.Enventory_4_0ConnectionString, mappingSource)
    {
        OnCreated();
    }

这个

//Original 
public string Enventory_4_0ConnectionString {
            get {
                return ((string)(this["Enventory_4_0ConnectionString"]));
            }
        } 

答案 5 :(得分:0)

在您的dbml文件designer.cs中,将此动态调用添加到基类构造函数中。它将自动从当前web.config中提取的本地,开发人员和产品工作,而无需每次都通过连接;

    public HallLockerDataContext() : 
    base(ConfigurationManager.ConnectionStrings["MYDB1"].ConnectionString, mappingSource)
    {
        OnCreated();
    }

用法:

    using (var db = new HallLockerDataContext())
    {

    }