รับสตริงการเชื่อมต่อจาก App.config


380
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>

แต่เมื่อโครงการของฉันทำงานนี่คือข้อผิดพลาดของฉัน:

การอ้างอิงวัตถุไม่ได้ถูกตั้งค่าเป็นอินสแตนซ์ของวัตถุ


5
คุณวาง App.config นั้นไว้ที่ไหน โปรเจ็กต์ของแอปพลิเคชั่นที่คุณใช้งานอยู่หรืออาจเป็น dll คุณต้องการก่อน
abatishchev

3
เพิ่มการอ้างอิงถึง System.Configuration.dll และคุณควรจะใช้ System.Configuration.ConfigurationManager
daszarrin

สตริงการเชื่อมต่อของคุณมีการพิมพ์ผิด คุณต้องมีช่องว่างระหว่าง "รวม" และ "ความปลอดภัย"
Onur Omer

@OnurOmer - คำถามได้รับการอัปเดตเพื่อรวมพื้นที่ ("ความปลอดภัยแบบบูรณาการ" แทนที่จะเป็น "IntegratedSecurity")
SlimsGhost

คำตอบ:


484

คุณไม่สามารถทำสิ่งต่อไปนี้ได้:

var connection = 
    System.Configuration.ConfigurationManager.
    ConnectionStrings["Test"].ConnectionString;

แอสเซมบลีของคุณยังต้องการการอ้างอิงถึง System.Configuration.dll


14
ฉันรู้ว่านี่เป็นคำถาม C # แต่เนื่องจากนี่คือผลการค้นหา google ที่ดีที่สุดในการทำเช่นนี้ใน VB จึงSystem.Configuration.ConfigurationManager.ConnectionStrings("Test").ConnectionStringเหมาะสำหรับพวกเราที่ต้องดูแลโค้ด VB
JFA

296

เนื่องจากเป็นคำถามที่พบบ่อยมากฉันได้เตรียมภาพหน้าจอจาก Visual Studio เพื่อให้ง่ายต่อการติดตามใน 4 ขั้นตอน

รับสตริงการเชื่อมต่อจาก app.config


22
รักคำตอบนี้ ตามค่าเริ่มต้นในเวอร์ชัน VS ของฉัน (VS2012 Ultimate) ห้องสมุดนี้ไม่รวมอยู่ แต่using System.Configurationก็ยังใช้งานได้
David Colwell

3
ฉันต้องการเพิ่มการอ้างอิงหรือการใช้ไม่ได้ขีดเส้นใต้ แต่ยังไม่ทราบ ConfigurationManager ขอบคุณ!
CodingYourLife

33
string str = Properties.Settings.Default.myConnectionString; 

1
จะเกิดอะไรขึ้นถ้า app.config ถูกเพิ่มเป็นลิงค์ไปยังโครงการ
FrenkyB

2
สิ่งนี้จะใช้งานได้หากสตริงการเชื่อมต่อของคุณเป็นการตั้งค่าแอป แต่จะไม่ทำงานหากดึง<connectionStrings>องค์ประกอบจาก app.config (ซึ่งเป็นสิ่งที่ OP ขอให้!)
BrainSlugs83

31

ตรวจสอบด้วยว่าคุณได้รวมSystem.Configurationdll ไว้ใต้เอกสารอ้างอิงของคุณแล้ว ถ้าไม่มีคุณจะไม่สามารถเข้าถึงConfigurationManagerคลาสใน System.Configuration namespace


22

ก่อนเพิ่มการอ้างอิงถึงในSystem.Configurationหน้าของคุณ

using System.Configuration;

จากนั้นตามที่คุณapp.configรับสตริงการเชื่อมต่อดังต่อไปนี้

string conStr = ConfigurationManager.ConnectionStrings["Test"].ToString();

นั่นคือตอนนี้คุณมีสตริงการเชื่อมต่อของคุณในมือของคุณและคุณสามารถใช้งานได้


16
//Get Connection from web.config file
public static OdbcConnection getConnection()
{
    OdbcConnection con = new OdbcConnection();
    con.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["con"].ConnectionString;
    return con;     
}


3

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 แต่ลอจิกเหมือนกัน



3

ฉันมีปัญหาเดียวกัน โซลูชันของฉันถูกสร้างขึ้นจากสองโครงการ A Class libraryและเว็บไซต์ที่อ้างอิงถึงโครงการห้องสมุดชั้นเรียน ปัญหาคือว่าฉันพยายามเข้าถึงApp.configในClass libraryโครงการของฉันแต่ระบบกำลังค้นหาในWeb.configเว็บไซต์ ฉันใส่สายเชื่อมต่อข้างในWeb.configและ ... แก้ไขปัญหาได้แล้ว!

เหตุผลหลักคือแม้ว่า ConfigurationManagerถูกนำมาใช้ในการชุมนุมอื่นมันกำลังค้นหาภายในโครงการ runnig


3

คุณสามารถใช้วิธีนี้เพื่อรับสตริงการเชื่อมต่อ

using System; 
using System.Configuration;

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


2

ก่อนอื่นคุณต้องเพิ่มSystem.Configurationการอ้างอิงถึงโครงการของคุณจากนั้นใช้โค้ดด้านล่างเพื่อรับสตริงการเชื่อมต่อ

_connectionString = ConfigurationManager.ConnectionStrings["MYSQLConnection"].ConnectionString.ToString();

2

สิ่งนี้ใช้ได้กับฉัน:

string connection = System.Configuration.ConfigurationManager.ConnectionStrings["Test"].ConnectionString;

ขาออก:

แหล่งข้อมูล = .; แค็ตตาล็อกเริ่มต้น = OmidPayamak; IntegratedSecurity = True "


1

คุณสามารถดึงข้อมูลสตริงการเชื่อมต่อโดยใช้บรรทัดด้านล่างของรหัส -

using System; using System.Configuration;

var connectionString=ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;

นี่คือการอ้างอิง: สตริงการเชื่อมต่อจาก App.config


2
ฉันทำเช่นเดียวกับที่คุณพูด แต่ข้อผิดพลาดอ้างอิงโมฆะเดียวกันฉันได้รับ
ใจลึกลับ

1

ดูเหมือนว่าปัญหาไม่ได้มีการอ้างอิงคุณจะได้รับการเชื่อมต่อเป็นโมฆะดังนั้นโปรดตรวจสอบให้แน่ใจว่าคุณได้เพิ่มค่าลงในไฟล์ปรับแต่งที่โครงการที่กำลังรันอยู่ซึ่งหมายถึงโปรแกรม / ไลบรารีหลักที่เริ่มต้น / ดำเนินการก่อน


1

เป็นไปได้ว่า OP ในคำถามนี้กำลังพยายามใช้ App.Config ภายใน dll

ในกรณีนี้รหัสเป็นจริงพยายามเข้าถึง App.Config ของปฏิบัติการและไม่ใช่ dll เนื่องจากไม่พบชื่อคุณจะได้รับ Null คืนดังนั้นจึงแสดงข้อยกเว้น

โพสต์ต่อไปนี้อาจเป็นประโยชน์: ConnectionString จาก app.config ของ DLL เป็นโมฆะ


0

ฉันอ้างอิงSystem.Configurationห้องสมุดและฉันมีข้อผิดพลาดเดียวกัน ไฟล์ debug ไม่มี app.config สร้างไฟล์นี้ขึ้นเอง ข้อผิดพลาดคือฉันแก้ไขไฟล์คัดลอก "appname.exe.config" ในโฟลเดอร์ดีบั๊ก IDE ไม่ได้สร้างไฟล์


0

ฉันแก้ไขปัญหาโดยใช้ดัชนีเพื่ออ่านสตริงและตรวจสอบทีละคน การอ่านโดยใช้ชื่อยังคงให้ข้อผิดพลาดเดียวกัน
ฉันมีปัญหาเมื่อฉันพัฒนาแอปพลิเคชันหน้าต่าง C # ฉันไม่ได้มีปัญหาในแอปพลิเคชัน asp.net ของฉัน จะต้องมีบางสิ่งในการตั้งค่าที่ไม่ถูกต้อง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.