none
关于读取项目中app.config文件遇到的问题 RRS feed

  • 问题

  • <configuration>
    
     <configSections>
    
     </configSections>
    
     <connectionStrings>
    
      <add name="tempexcelConnectionString" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source='{0}';Extended Properties='Excel 8.0;HDR=Yes';" providerName="System.Data.OleDb"/>
    
    

    这是我的App.config文件。

    我在代码中向用string.format(Properties.Settings.Default.tempexcelConnectionString,“c:\\temp\\temp.xls")来组合成一个连接字符串。可每次都会得到

    Provider=Microsoft.Jet.OLEDB.4.0;Data Source=temp.xls;Extended Properties='Excel 8.0;HDR=Yes';" 

    这样不正确的连接字符串,不能真正的连接到c:\temp\temp.xls文件。

    可是我如果将代码写成:

    string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='{0}';Extended Properties='Excel 8.0;HDR=Yes';", "c:\\temp\\temp.xls")

    这样就能获得正确的连接字符串。

    请问各位大侠这是怎么回是呢?请问怎样修改string.format(Properties.Settings.Default.tempexcelConnectionString,“c:\\temp\\temp.xls")这段代码才能得到正确的字符串?(还有我这个项目要在web网站上应用。)

    2011年1月24日 16:44

答案

  • 您好,我明白您的意思。我上面显示出来的字符串就是对的啊

    Provider=Microsoft.Jet.OLEDB.4.0;Data Source='c:\\temp\\temp.xls ';Extended Properties='Excel 8.0;HDR=Yes';

    我用应用程序设置也是对的。测试代码:

    String abc = string.Format(Properties.Settings.Default.tempexcelConnectionString, "c:\\temp\\temp.xls");

    您是否修改过Settings类tempexcelConnectionString属性的代码?我本机的代码:

           [global::System.Configuration.UserScopedSettingAttribute()]
            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
            [global::System.Configuration.DefaultSettingValueAttribute("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\'{0}\';Extended Properties=\'Excel 8.0" +
                ";HDR=Yes\';")]
            public string tempexcelConnectionString {
                get {
                    return ((string)(this["tempexcelConnectionString"]));
                }
                set {
                    this["tempexcelConnectionString"] = value;
                }
            }

     

    实在不行,用我第一次回帖的方法。在web网上通常都是这个方法。


    问题解决,谢谢提示。实际我手工修改了app.config中的连接字符串,可属性设置没有在vs中同步造成的结果不一致了。
    • 已标记为答案 NetAD 2011年1月26日 14:53
    2011年1月26日 7:14
  • System.Configuration.ConfigurationManager在webapp和winapp下是通用的。webapp下对应web.config,winapp下对应app.config。

    它们在config中的配置都是:

    <configuration>

        <connectionStrings>
        <add name="tempexcelConnectionString" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source='{0}';Extended Properties='Excel 8.0;HDR=Yes';" providerName="System.Data.OleDb"/>
      </connectionStrings>

    </configuration>

    调用方法都是:System.Configuration.ConfigurationManager.ConnectionStrings["tempexcelConnectionString"]

    请标记您认为对的为答案。

    • 已标记为答案 NetAD 2011年1月26日 14:55
    2011年1月26日 7:36
    版主

全部回复

  • 您好,我在web和window下都试了,其结果都是:Provider=Microsoft.Jet.OLEDB.4.0;Data Source='c:\temp\temp.xls';Extended Properties='Excel 8.0;HDR=Yes';

    我测试的代码:String abc = string.Format(System.Configuration.ConfigurationManager.ConnectionStrings["tempexcelConnectionString"].ToString(), "c:\\temp\\temp.xls");

    2011年1月25日 3:36
    版主
  • 你好:

    我是建立一个类库,用string a= string.format(Properties.Settings.Default.tempexcelConnectionString,“c:\\temp\\temp.xls")代码返回的是“Provider=Microsoft.Jet.OLEDB.4.0;Data Source='temp.xls';Extended Properties='Excel 8.0;HDR=Yes';”这样的字符串,下划线部分如果不带路径,就会找不到该文件,好像系统之从根目录寻找该文件,并没有到指定的目录去连接文件的。

    在类库项目中,用Properties.Settings.Default.tempexcelConnectionString返回的字符串中的占位符{0}不能用带路径的字符串替换,只用文件名替换了。而直接引用字符串“Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes';“,再这样string a= string.format(“Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes';“,“c:\\temp\\temp.xls")获取就能得到正确的“Provider=Microsoft.Jet.OLEDB.4.0;Data Source='c:\\temp\\temp.xls';Extended Properties='Excel 8.0;HDR=Yes'; “字符串了,我不知道这是什么原因呢?为什么用属性类获得的字符串不同呢?有些原因不能在App.config中设置出文件的具体路径和文件名的,只有后期获得,然后组合成链接字符串的。

    请问应该怎么做呀?

    还有你用string a= string.format(Properties.Settings.Default.tempexcelConnectionString,“c:\\temp\\temp.xls")这样测试一下,看看结果。

     

     

    2011年1月25日 4:16
  • 您好,我明白您的意思。我上面显示出来的字符串就是对的啊

    Provider=Microsoft.Jet.OLEDB.4.0;Data Source='c:\\temp\\temp.xls ';Extended Properties='Excel 8.0;HDR=Yes';

    我用应用程序设置也是对的。测试代码:

    String abc = string.Format(Properties.Settings.Default.tempexcelConnectionString, "c:\\temp\\temp.xls");

    您是否修改过Settings类tempexcelConnectionString属性的代码?我本机的代码:

           [global::System.Configuration.UserScopedSettingAttribute()]
            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
            [global::System.Configuration.DefaultSettingValueAttribute("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\'{0}\';Extended Properties=\'Excel 8.0" +
                ";HDR=Yes\';")]
            public string tempexcelConnectionString {
                get {
                    return ((string)(this["tempexcelConnectionString"]));
                }
                set {
                    this["tempexcelConnectionString"] = value;
                }
            }

     

    实在不行,用我第一次回帖的方法。在web网上通常都是这个方法。

    2011年1月25日 5:03
    版主
  • 我没有添加标签属性限定,我是直接从app.config文件中读取出来的那个链接字符。

    您的联系呢?

    我的msn:anhl_70@hotmail.com

    能进一步联系。

    2011年1月25日 8:25
  • 你先打印出

    Properties.Settings.Default.tempexcelConnectionString

    是不是你设置的值,如果是String.Format应该也是可以的


    【孟子E章】
    2011年1月25日 8:41
    版主
  • 我没有添加标签属性限定,我是直接从app.config文件中读取出来的那个链接字符。

    您的联系呢?

    我的msn:anhl_70@hotmail.com

    能进一步联系。


    您好,我用的win2003服务器版的操作系统,msn运行很不稳定,用的少。论坛的问题,还是在论坛讨论,这样会有更多的人帮助您。您看孟版主已经来了。

    如果您是webapp,我的建议您还是用我第一次回贴的方法,那是取得数据库连接字符串的标准用法。需要引用System.Configuration.dll。

     

    2011年1月25日 8:45
    版主
  • 你先打印出

    Properties.Settings.Default.tempexcelConnectionString

    是不是你设置的值,如果是String.Format应该也是可以的


    【孟子E章】


    我用断点调试看到的是“Provider=Microsoft.Jet.OLEDB.4.0;Data Source='temp.xls';Extended Properties='Excel 8.0;HDR=Yes';”这样的。

    文件名变量的值是c:\\temp\\temp.xls

    string.format(返回字符串的属性类,文件名字符串)并没有将文件名变量带入的。

    2011年1月26日 7:07
  • 您好,我明白您的意思。我上面显示出来的字符串就是对的啊

    Provider=Microsoft.Jet.OLEDB.4.0;Data Source='c:\\temp\\temp.xls ';Extended Properties='Excel 8.0;HDR=Yes';

    我用应用程序设置也是对的。测试代码:

    String abc = string.Format(Properties.Settings.Default.tempexcelConnectionString, "c:\\temp\\temp.xls");

    您是否修改过Settings类tempexcelConnectionString属性的代码?我本机的代码:

           [global::System.Configuration.UserScopedSettingAttribute()]
            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
            [global::System.Configuration.DefaultSettingValueAttribute("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\'{0}\';Extended Properties=\'Excel 8.0" +
                ";HDR=Yes\';")]
            public string tempexcelConnectionString {
                get {
                    return ((string)(this["tempexcelConnectionString"]));
                }
                set {
                    this["tempexcelConnectionString"] = value;
                }
            }

     

    实在不行,用我第一次回帖的方法。在web网上通常都是这个方法。


    问题解决,谢谢提示。实际我手工修改了app.config中的连接字符串,可属性设置没有在vs中同步造成的结果不一致了。
    • 已标记为答案 NetAD 2011年1月26日 14:53
    2011年1月26日 7:14
  • 第一次回帖是取web.config文件中的数据库连接字符串,在app.config中好像不能用。
    2011年1月26日 7:17
  • System.Configuration.ConfigurationManager在webapp和winapp下是通用的。webapp下对应web.config,winapp下对应app.config。

    它们在config中的配置都是:

    <configuration>

        <connectionStrings>
        <add name="tempexcelConnectionString" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source='{0}';Extended Properties='Excel 8.0;HDR=Yes';" providerName="System.Data.OleDb"/>
      </connectionStrings>

    </configuration>

    调用方法都是:System.Configuration.ConfigurationManager.ConnectionStrings["tempexcelConnectionString"]

    请标记您认为对的为答案。

    • 已标记为答案 NetAD 2011年1月26日 14:55
    2011年1月26日 7:36
    版主
  • 我是说

    Properties.Settings.Default.tempexcelConnectionString

    在替换之前是否是

    Provider=Microsoft.Jet.OLEDB.4.0;Data Source='{0}';Extended Properties='Excel 8.0;HDR=Yes'

     

     

     


    【孟子E章】
    2011年1月26日 8:31
    版主
  • 我是说

    Properties.Settings.Default.tempexcelConnectionString

    在替换之前是否是

    Provider=Microsoft.Jet.OLEDB.4.0;Data Source='{0}';Extended Properties='Excel 8.0;HDR=Yes'

     

     

     


    【孟子E章】

    那我没注意,经过Jiyuan提示,我在类库项目中打开属性设置页,vs提醒我有变动是否同步,我选是,以后在测试就好了。得到我要的结果了。
    2011年1月26日 14:58
  • System.Configuration.ConfigurationManager在webapp和winapp下是通用的。webapp下对应web.config,winapp下对应app.config。

    它们在config中的配置都是:

    <configuration>

        <connectionStrings>
        <add name="tempexcelConnectionString" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source='{0}';Extended Properties='Excel 8.0;HDR=Yes';" providerName="System.Data.OleDb"/>
      </connectionStrings>

    </configuration>

    调用方法都是:System.Configuration.ConfigurationManager.ConnectionStrings["tempexcelConnectionString"]

    请标记您认为对的为答案。


    那在WebApp解决方案中添加的被webapp引用类库项目,算不算winapp呢?

    是不是WinApp项目用Properties.Settings.Default.tempexcelConnectionString和System.Configuration.ConfigurationManager.ConnectionStrings["tempexcelConnectionString"]获得连接字符串,而WebApp中却只能用System.Configuration.ConfigurationManager.ConnectionStrings["tempexcelConnectionString"]这个获得。

    这样理解对么?

    2011年1月26日 15:05
  • 您好,类库依赖于宿主类型。由WebApp引用时,就是webapp,不算winapp。Properties.Settings.Default.tempexcelConnectionString在webapp中也可以用,您可以测一下。
    2011年1月27日 1:43
    版主
  • 嗯,知道了,谢谢!

    2011年1月27日 8:13