我有一个应用程序,我希望能够为我的LINQ to SQL配置连接字符串。我已经尝试了很多不同的方法,但似乎无法让它发挥作用。我想在运行应用程序时在代码中动态执行此操作,原因是用户可以更改连接设置。
如果我从app.config中删除了connectionString,应用程序仍能正常工作(通信),这让我想知道应该在哪里更改连接字符串?
答案 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())
{
}