Visual Studio 2012 ASP.NET MVC 连接字符串 Web.Config

7

我有一个使用Visual Studio 2012开发的ASP.NET MVC应用程序,它查询数据库。我被告知将连接字符串保存在web.config文件中是一个好习惯。连接字符串名为ConnString,位于:

  <connectionStrings>
      <add name="ConnString" connectionString="Data Source=IP_OF_SERVER,PORT; Initial Catalog=DATABASE_NAME; UID=USERNAME; pwd=PASSWORD; Integrated Security=True;"/>
  </connectionStrings>

在C#中,我想要获取连接字符串时,我使用以下代码:
String connStr = ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString;

该应用程序在此行崩溃并抛出以下异常:
Object reference not set to an instance of an object. System.NullReferenceException: Object reference not set to an instance of an object.

我已经包含了:

using System.Configuration;

我尝试将WebConfigurationManager.AppSettings["keyName"]放在页面顶部,但仍然失败了。我还尝试使用using System.WebConfiguration,但仍无法获取字符串。我该如何获取字符串?


1
在您的 web.config 文件中,<connectionStrings> 节点是否位于 <configuration> 下面? - Ryan Weir
尝试使用 ConfigurationManager.ConnectionStrings["ConnString"].ToString()。 - ckv
@RyanWeir - 是的,它是<configuration>节点的直接子节点。 - Jonathan
@ckv - 当我尝试这样做时,我得到了“对象引用未设置为对象的实例”。 - Jonathan
你把它添加到哪个 web.config 文件中了?是在项目根目录下的那个,还是在 Views 目录下的那个? - Erik Funkenbusch
@MystereMan 刚刚发现问题所在!我把它添加到了视图目录中的其中一个,没有注意到另一个。现在已经添加到了另一个文件中,一切都正常了。感谢您的帮助! - Jonathan
3个回答

4

providerName="System.Data.SqlClient"作为连接字符串的属性添加到您的web.config文件中,如下所示:

  <connectionStrings>
      <add name="ConnString" connectionString="Data Source=IP_OF_SERVER,PORT; Initial Catalog=DATABASE_NAME; UID=USERNAME; pwd=PASSWORD; Integrated Security=True;" providerName="System.Data.SqlClient" />
  </connectionStrings>

谢谢,问题实际上是我使用了错误的web.config文件! - Jonathan

1
你忘记在连接字符串中添加 providerName="System.Data.SqlClient"
将你的连接字符串更改为:
  <connectionStrings>
          <add name="ConnString" connectionString="Data Source=IP_OF_SERVER,PORT; Initial Catalog=DATABASE_NAME; UID=USERNAME; pwd=PASSWORD; Integrated Security=True;" providerName="System.Data.SqlClient" />
      </connectionStrings>

问候


这不应该影响ConfigurationManager,因为它忽略provider。那只被ADO.net使用。 - Erik Funkenbusch

1

我没有新的答案来回答这个问题,但是我想给一些解释。

 System.Data.SqlClient 

这是针对 SQL Server 的 .NET Framework 数据提供程序。在 web.config 文件中,providerName 属性的值应为 System.Data.SqlClient。这就是您正在使用的 .NET Framework 数据提供程序。

如果您需要连接应用程序与 MySQL,则可以使用

  MySql .Net Connector

在您的情况下,它是必需的但缺失了,这就是为什么您会收到错误消息的原因。

您可以阅读更多关于(此处)[http://msdn.microsoft.com/en-US/library/htw9h4z3(v=VS.80).aspx],希望它能让您更好地理解您所犯的错误并修复它。

 <configuration>
  <connectionStrings>
    <add name="Northwind"
         connectionString="Data Source=Data Source=IP_OF_SERVER,PORT; Initial Catalog=DATABASE_NAME; UID=USERNAME; pwd=PASSWORD; Integrated Security=True;" 
         providerName="System.Data.SqlClient" />
   </connectionStrings>
 </configuration>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接