LINQ to SQL连接字符串

6

我有一个应用程序,想要配置我的LINQ to SQL的连接字符串。我尝试了很多种不同的方法,但似乎无法使其工作。我希望在应用程序运行时可以在代码中动态地进行此操作,这是因为用户可以更改连接设置。

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


当你说你要从app.config中删除连接字符串时,你是在从Visual Studio运行还是直接从可执行文件运行? - Graham Clark
6个回答

9
您可以将重写连接字符串传递到DataContext构造函数中:
var db = new MyDataContext("Data Source=Something Else;")

我该如何在代码中设置app.config中的连接字符串? - Prisoner
抱歉,我错过了额外的问题 - 不,我并不建议您在app.config中更改它。您可以使用此构造函数来提供从任何地方获取的任何字符串。 - Rup

9

我认为最好的方法是结合Albin和Rup的答案。在配置文件中设置一个值,然后在运行时读取并将其提供给上下文构造函数,类似于以下内容:

WEB.CONFIG:

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

代码:

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

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

这样,您甚至可以在运行时更改连接字符串,并且它将在正在运行的程序中起作用并发生变化。


我该如何在代码中设置app.config中的连接字符串? - Prisoner
就像你说你删除的连接字符串一样,它取决于你使用的提供程序。对于 MSSQL,我使用类似于 server=ip;uid=user_id;pwd=passw;database=database_name 的东西。 - Francisco Noriega
你可以在配置文件中手动指定连接位置,然后通过上下文构造函数自动连接到该位置的代码。 - Francisco Noriega
是的,我明白这一点,但我希望用户能够在程序运行时更改app.config文件中的连接字符串。 - Prisoner
1
哦!那种情况下,您只需要从用户那里获取字符串(或值并设置字符串),然后在上下文构造函数中使用它即可。 - Francisco Noriega
嗨,要在代码中创建connectionString,请使用SqlConnectionStringBuilder类。构造正确后,在创建时将其connectionString属性传递给DataContext类,因为这已经在此处建议过了。 - ChristoD

2

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

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

0
你应该在 app.config 中更改它。没有定义也可以工作的原因是LINQ2SQL设计器创建了一个回退到设计DBML时使用的连接字符串。如果在 app.config 中定义了一个连接字符串,则会使用它。

0
在您的dbml文件designer.cs中添加此动态调用基类构造函数。它将自动从当前web.config中获取本地、开发和生产环境,无需每次传递连接即可工作;
    public HallLockerDataContext() : 
    base(ConfigurationManager.ConnectionStrings["MYDB1"].ConnectionString, mappingSource)
    {
        OnCreated();
    }

使用方法:

    using (var db = new HallLockerDataContext())
    {

    }

0

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

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"]));
            }
        } 

这个

//Modified code
public string Enventory_4_0ConnectionString {
            get {
                return (System.Configuration.ConfigurationManager.ConnectionStrings["Enventory_4_0ConnectionString"].ConnectionString);
            }
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接