10

我有 ac# 程序集,它使用 app.config 来存储其数据库连接字符串。在调试应用程序时,我注意到与数据库的连接一直失败,因为 ConfigurationManager 不断返回 machine.config 连接字符串:

数据源=.\SQLEXPRESS; 综合安全性;....

我在 app.config 中的连接字符串之前添加了<clear/> ,它解决了我的开发机器上的问题。当我将它部署到生产环境时,问题又回来了。有人可以告诉我如何停止使用 machine.config 连接字符串吗?

SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings[0].ConnectionString);

<connectionStrings>
    <clear/>
    <add name="VersionConnectionString"
     connectionString=" Data Source=localhost;Initial Catalog=VersionInfo;User ID=user;Password=password"         
     providerName="System.Data.SqlClient" />
  </connectionStrings>

更新

以下仍然给我 machine.config 连接字符串?!

 Configuration appConfig = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location);
                string dllConfigData =
                    appConfig.ConnectionStrings.ConnectionStrings[0].ConnectionString;
4

4 回答 4

6

在 DLL 中使用连接字符串时,您还需要将它们添加到您的 exe 的 app.config 中,并使用与设置完全相同的名称。然后,您可以更改 exe 的 .config 文件中的连接字符串,DLL 将在加载时自动获取它。

当您的 DB 持久层在单独的 DLL 中实现时,这可能是您可以在 app.config 文件中使用自定义连接字符串的唯一方法。甚至不要问我花了多少时间研究和调试这个。

于 2010-09-23T20:24:09.193 回答
3

我知道这是一个较老的问题,但我今天遇到了同样的问题。问题是app.config我添加到项目中的 没有被复制到输出目录。要解决此问题,请右键单击app.config并选择Properties. 然后更改Build ActionContent. 希望这可以帮助!

于 2011-05-26T13:06:23.103 回答
1

尝试获取 app.config 文件的实例作为配置对象:

var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

var myConnString = config.ConnectionStrings["VersionConnectionString"].ConnectionString;

这完全绕过了机器配置文件。

于 2010-09-23T19:48:59.323 回答
0

您应该通过 NAME 而不是 INDEX 获取连接字符串 - 这将确保您获得所需的内容。

尝试

SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["VersionConnectionString"].ConnectionString);
于 2010-09-23T19:51:34.510 回答