无法从 app.config 获取连接字符串

Posted

技术标签:

【中文标题】无法从 app.config 获取连接字符串【英文标题】:Can't get the connection string from app.config 【发布时间】:2013-11-08 09:46:40 【问题描述】:

我有一个类库,其中包含由 asp.net Web 应用程序和 WCF Web 服务共享的类。库中的类需要从数据库中检索信息,因此该库在 app.config 中有一个用于连接字符串的条目,以及一个检索该连接字符串的方法。

这是我在 app.config 中声明连接字符串的方式:

<configuration>
    <connectionStrings>
        <add name="connstring"
             connectionString="Data Source=MYSERVER;Initial Catalog=MY_DB;User Id=mylogin;Password=mypassword;"
             providerName="System.Data.SqlClient"/>
    </connectionStrings>
    [...]
</configuration>

这是检索连接字符串的方法:

Imports System.Configuration
Imports System.Data.SqlClient
Imports System.Data.OleDb

Public Module modGen

    Public Function gGetConnectionString() As String

        Dim conn As ConnectionStringSettings = ConfigurationManager.ConnectionStrings("connstring")
        Dim connString As String = conn.ConnectionString
        Return connString

    End Function

问题是,当方法运行时,“conn”的值是“Nothing”,然后抛出以下异常:

System.TypeInitializationException was caught
  Message=The type initializer for 'CHK.TRK.CLS.modGen' threw an exception.
  Source=CHK.TRK.CLS
  TypeName=CHK.TRK.CLS.modGen
  StackTrace:
       at CHK.TRK.CLS.modGen.gGetConnectionString()
       at CHK.TRK.CLS.modAuth.CheckUser(String logon, String pwHash) in  H:\WorkSpace\CHKTRK\CHKTRK\CHKTRKClasses\Mod\modAuth.vb:line 141
       at CHK.TRK.CLS.modAuth.Authenticate(String logon, String pwhash) in H:\WorkSpace\CHKTRK\CHKTRK\CHKTRKClasses\Mod\modAuth.vb:line 9
       at CHKTRKWebService.CheckTrackService.Authenticate(String login, String pwHash) in H:\WorkSpace\CHKTRK\CHKTRK\CHKTRKWebService\CheckTrackService.svc.vb:line 20
  InnerException: System.NullReferenceException
       Message=Object reference not set to an instance of an object.
       Source=CHK.TRK.CLS
       StackTrace:
            at CHK.TRK.CLS.modGen..cctor() in H:\WorkSpace\CHKTRK\CHKTRK\CHKTRKClasses\Mod\modGen.vb:line 138
       InnerException: 

我在 app.config 文件中声明连接字符串的方式或检索它的方法是否有问题?

【问题讨论】:

【参考方案1】:

将连接字符串添加到您的 asp.net 应用程序的web.config

您可以查看here给出的解决方案

【讨论】:

它已经在 asp.net 应用程序和 WCF 服务的 web.config 中。并且同名的是三个配置文件。 您提到此连接字符串在库的 app.config 中。你确定它也存在于 web.config 中吗? 是的,它在网络应用的 web.config 中以完全相同的方式声明。 它在 VS 中关闭并重新打开项目后工作。感谢您的帮助!【参考方案2】:

像这样添加连接字符串:ConfigurationManager.ConnectionStrings Property

示例代码:

Public Shared Sub ReadConnectionStrings()

    ' Get the ConnectionStrings collection. 
    Dim connections _
        As ConnectionStringSettingsCollection = _
            ConfigurationManager.ConnectionStrings

    If connections.Count <> 0 Then
        Console.WriteLine()
        Console.WriteLine( _
            "Using ConnectionStrings property.")
        Console.WriteLine( _
            "Connection strings:")

        ' Get the collection elements. 
        For Each connection _
            As ConnectionStringSettings In connections
            Dim name As String = connection.Name
            Dim provider As String = _
                connection.ProviderName
            Dim connectionString As String = _
                connection.ConnectionString

            Console.WriteLine( _
                "Name:               0", name)
            Console.WriteLine( _
                "Connection string:  0", _
                    connectionString)
            Console.WriteLine( _
                "Provider:            0", provider)
        Next 
    Else
        Console.WriteLine()
        Console.WriteLine( _
            "No connection string is defined.")
        Console.WriteLine()
    End If 
End Sub

【讨论】:

这不是真正的答案,但它对我有很大帮助,谢谢! 是的,这不是真的,但这是用于了解如何获取连接字符串的示例代码

以上是关于无法从 app.config 获取连接字符串的主要内容,如果未能解决你的问题,请参考以下文章

Winforms - 程序无法从 app.config 中找到连接字符串

Azure 函数 - 如何在 app.config 中添加我的数据库连接字符串

如何从 App.config 中检索连接字符串 [重复]

从 c# 中的 app.config 获取 ConnectionString [重复]

C# ConfigurationManager 从 app.config 检索错误的连接字符串

Web.config和App.config配置连接字符串