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

其他回答

string str = Properties.Settings.Default.myConnectionString; 

1)创建一个新表单并添加以下内容:

Imports System.Configuration
Imports Operaciones.My.MySettings

Public NotInheritable Class frmconexion

    Private Shared _cnx As String
    Public Shared Property ConexionMySQL() As String
        Get
            Return My.MySettings.Default.conexionbd
        End Get
        Private Set(ByVal value As String)
            _cnx = value
        End Set
    End Property

End Class

然后当你想要使用连接时,在ur表单中这样做:

 Private Sub frmInsert_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim cn As New MySqlConnection(frmconexion.ConexionMySQL)
cn.open()

就是这样。您将连接到数据库,并可以做一些事情。

这是vb.net,但逻辑是相同的。

您可以使用此方法获取连接字符串

using System; 
using System.Configuration;

private string GetConnectionString()
{
    return ConfigurationManager.ConnectionStrings["MyContext"].ConnectionString;
}

放置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;
        }
    }
}

由于这是一个非常常见的问题,我准备了一些Visual Studio的屏幕截图,让它更容易遵循4个简单的步骤。