我有一个应用程序,想要配置我的LINQ to SQL的连接字符串。我尝试了很多种不同的方法,但似乎无法使其工作。我希望在应用程序运行时可以在代码中动态地进行此操作,这是因为用户可以更改连接设置。
如果我从app.config中删除connectionString,应用程序仍然可以正常工作(通信),这让我想知道我应该在哪里更改连接字符串?
我有一个应用程序,想要配置我的LINQ to SQL的连接字符串。我尝试了很多种不同的方法,但似乎无法使其工作。我希望在应用程序运行时可以在代码中动态地进行此操作,这是因为用户可以更改连接设置。
如果我从app.config中删除connectionString,应用程序仍然可以正常工作(通信),这让我想知道我应该在哪里更改连接字符串?
我认为最好的方法是结合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)
这样,您甚至可以在运行时更改连接字符串,并且它将在正在运行的程序中起作用并发生变化。
server=ip;uid=user_id;pwd=passw;database=database_name
的东西。 - Francisco NoriegaDBML类(YourDataContext)有一个重载的构造函数,它接受ConnectionString参数,因此尝试实例化该构造函数而不是默认构造函数。从app.config获取连接字符串并使用它来创建实例。
YourDataContext context = new YourDataContext (ConfigurationManager.ConnectionStrings["ConnStringInAppConfig"].ConnectionString)
public HallLockerDataContext() :
base(ConfigurationManager.ConnectionStrings["MYDB1"].ConnectionString, mappingSource)
{
OnCreated();
}
使用方法:
using (var db = new HallLockerDataContext())
{
}
默认情况下,您的构造函数看起来像这样
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);
}
}
app.config
中删除连接字符串时,你是在从Visual Studio运行还是直接从可执行文件运行? - Graham Clark