var connection = ConnectionFactory.GetConnection(
ConfigurationManager.ConnectionStrings["Test"]
.ConnectionString, DataBaseProvider);
这是我的app。config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="Test" connectionString="Data Source=.;Initial Catalog=OmidPayamak;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
但是当我的项目运行时,这是我的错误:
对象引用未设置为对象的实例。
上面的答案没有详细说明connectionStrings索引中的值从何而来。
如上所述,要获得连接字符串,你说:
string conStr = ConfigurationManager.ConnectionStrings["XXX"].ToString();
要使用正确的XXX值,请访问您的主要项目web。配置文件,并寻找以下一段代码:
<connectionStrings>
<add name="Authentication" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;Initial Catalog=Authentication;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\Authentication.mdf" providerName="System.Data.SqlClient" />
</connectionStrings>
当它说name=时,后面引号中的文本就是上面代码中使用的XXX的值。在我上面的例子中,它恰好是Authentication
放置ConfigurationManager时遇到此问题。在UserControl的构造函数中的ConnectionStrings,这里没有一个解决方案对我有效。
经过一些研究,看起来像ConfigurationManager。ConnectionStrings将为空,而试图从设计时间访问它。
从这篇文章中,我想出了下面的代码来检测DesignTime,作为解决问题的方法:
public class MyUserControl : UserControl
{
....
public MyUserControl ()
{
InitializeComponent();
bool designMode = (LicenseManager.UsageMode == LicenseUsageMode.Designtime);
if (!designMode)
{
this.connectionString =
ConfigurationManager.ConnectionStrings["xxx"].ConnectionString;
}
}
}