我有一个本地SQL Server数据库(通过Management Studio管理)和本地
ASP.NET项目。 VS2017在服务器资源管理器中正确查看数据库。这也是我得到连接字符串的地方;正如互联网上的一些帖子所建议的那样。我在我的web.config
中将字符串放在现有字符串旁边(用于帐户管理)。该文件如下所示:
<configuration>
<connectionStrings>
<add name="DefaultConnection"
connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-Project-20170524124716.mdf;Initial Catalog=aspnet-Project-20170524124716;Integrated Security=True"
providerName="System.Data.SqlClient" />
<add name="MyLocalDb"
connectionString="Data Source=MYLAPTOP;Initial Catalog=TestDb;Integrated Security=True;"
providerName="System.Data.SqlClient" />
</connectionStrings>
<!--More things-->
</configuration>
我尝试像这样访问第二个字符串:
string connString = ConfigurationManager.ConnectionStrings["MyLocalDb"].ConnectionString;
完成的方式是here,here,here和here(几乎所有其他帖子都有关)。但是,当我运行代码时,我得到以下异常:
System.NullReferenceException:未将对象引用设置为对象的实例。
在ProjectUnitTests.DatabaseTests.TestConnection()中的ProjectUnitTests \ DatabaseTests.cs:第16行
我在这里设置了using System.Configuration;
的引用。我也非常确定web.config
上的格式是正确的,给定this帖子让我重新检查了大约10次。我已经尝试删除第一个字符串,但它没有效果。
连接字符串是正确的。当我在我的代码中直接使用它时,我可以访问数据库。
请注意,代码是从另一个项目运行的;我有一个代码运行的类库。 Web.config
文件位于另一个项目中。我在长期寻找的答案中读到这可能是一个问题;虽然我找不到更多的消息来源。
编辑:
根据要求;单元测试中的整个方法:
[TestMethod]
public void TestConnection()
{
//Connection tester will be called from the constructor
Database instance = Database.Instance(); //The Database class is in a class library. When calling the instance it will get the connection string itself
string connString = ConfigurationManager.ConnectionStrings["TicketSlothLocalDb"].ConnectionString; //Test if I was able to get the string at all. Apparently this is never possible.
Console.WriteLine(connString);
}
数据库类:
private Database()
{
openConnection();
}
public static Database Instance()
{
_instance = _instance ?? new Database();
return _instance;
}
private void openConnection()
{
try
{
string connString = ConfigurationManager.ConnectionStrings["TicketSlothLocalDb"].ConnectionString;
conn = new SqlConnection(connString);
conn.Open();
openConn = true;
testConnection(); //Function with a small SQL query inside to verify that it is able to retrieve data from the database
}
catch (SqlException ex)
{
Console.WriteLine(ex);
Console.WriteLine("Password is incorrect");
connectionstring = null;
}
catch (Exception ex)
{
Console.WriteLine("Threw other exception: {0}", ex);
}
}
为什么我不能在这里访问web.config
属性?
答案 0 :(得分:0)
您需要将数据库条目添加到单元测试项目的配置中。此文件将被称为app.config,并且将位于单元测试项目的根文件夹中。当项目构建时,文件将在bin文件夹中变为'dllname.config(构建过程应该为你处理)。
(我的假设是这是真的是基于堆栈跟踪中的这一提及 - ProjectUnitTests
)。