我在项目中更改了连接字符串的设置,如下所示:
var settings = ConfigurationManager.ConnectionStrings[2];
var fi = typeof(ConfigurationElement).GetField("_bReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
fi.SetValue(settings, false);
// settings.ConnectionString = "Provider=SQLOLEDB.1;Password=XXX;Persist Security Info=True;User ID=sa;Initial Catalog=InsuranceDB;Data Source=ERNA2";
//settings.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\database\InSuranceDB.accdb;Persist Security Info=True;Jet OLEDB:Database Password=XXX";
int onlineMode = int.Parse(File.ReadAllText("onlineMode.obj"));
if (onlineMode==1)
{
settings.ConnectionString = @"Provider=SQLOLEDB.1;Password=XXX;Persist Security Info=True;User ID=sa;Initial Catalog=InsuranceDB;Data Source=TABARI\SAMA2008";
// settings.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\database\InSuranceDB.accdb;Persist Security Info=True;Jet OLEDB:Database Password=XXX";
}
else
{
settings.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\database\InSuranceDB.accdb;Persist Security Info=True;Jet OLEDB:Database Password=XXX!";
}
File.WriteAllText("onlineMode.obj", "1");
它在我的计算机上工作得很好但是在发布之后它不起作用并且应用程序从app.config读取数据。你能帮我解决这个问题吗? 我也删除条件,但没有解决问题:(
答案 0 :(得分:1)
我猜测运行应用程序的用户无权修改部署位置中的配置文件。
在任何情况下,为什么要从另一个文件("onlineMode.obj"
)读取以获取配置设置?似乎更安全的方法是在配置文件中连接字符串和onlineMode
,然后在应用程序中选择适当的连接字符串。
如果您只是用代码中的硬编码值覆盖连接字符串,那么将连接字符串写入配置文件的重点是什么?