วิธีรับชื่อฐานข้อมูลจาก Connection String โดยใช้ SqlConnectionStringBuilder


92

ฉันไม่ต้องการแยกสตริงการเชื่อมต่อโดยใช้การจัดการสตริงและรับเซิร์ฟเวอร์ฐานข้อมูล uid และรหัสผ่าน

ฉันอ่านลิงค์ต่อไปนี้และอ่านคำตอบที่ยอมรับฉันพบว่าเป็นวิธีที่ดีที่สุดในการดึงรหัสผู้ใช้และรหัสผ่านออกจากสตริงการเชื่อมต่อ แต่ชื่อฐานข้อมูลล่ะ

วิธีที่ถูกต้องในการรับชื่อผู้ใช้และรหัสผ่านจากสตริงการเชื่อมต่อ?

วิธีรับชื่อฐานข้อมูลจาก Connection String โดยใช้ SqlConnectionStringBuilder (DataSource เป็นชื่อเซิร์ฟเวอร์หรือไม่)

คำตอบ:


53

ดูเอกสาร MSDN สำหรับคุณสมบัติ InitialCatalog :

รับหรือตั้งชื่อของฐานข้อมูลที่เกี่ยวข้องกับการเชื่อมต่อ ...

คุณสมบัตินี้สอดคล้องกับคีย์ "Initial Catalog" และ "database" ภายในสตริงการเชื่อมต่อ ...


152

คุณสามารถใช้คลาส ConnectionStringBuilder เฉพาะผู้ให้บริการ (ภายในเนมสเปซที่เหมาะสม) หรือSystem.Data.Common.DbConnectionStringBuilderเพื่อนามธรรมวัตถุสตริงการเชื่อมต่อหากคุณต้องการ คุณจำเป็นต้องทราบคีย์เวิร์ดเฉพาะผู้ให้บริการที่ใช้ในการกำหนดข้อมูลที่คุณต้องการ แต่สำหรับตัวอย่าง SQL Server คุณสามารถทำอย่างใดอย่างหนึ่งจากสองสิ่งนี้:

System.Data.SqlClient.SqlConnectionStringBuilder builder = new System.Data.SqlClient.SqlConnectionStringBuilder(connectionString);

string server = builder.DataSource;
string database = builder.InitialCatalog;

หรือ

System.Data.Common.DbConnectionStringBuilder builder = new System.Data.Common.DbConnectionStringBuilder();

builder.ConnectionString = connectionString;

string server = builder["Data Source"] as string;
string database = builder["Initial Catalog"] as string;

2
สำหรับฉันบรรทัดสุดท้ายต้องเป็น: string database = builder["Initial Catalog"] as string;- "ฐานข้อมูล" เป็นคำหลักที่ไม่ถูกต้อง
Sandra

@Sandra ใช่ครับ builder ["ฐานข้อมูล"] เป็นสตริงจะทำงานถ้าเราใช้ SqlConnectionStringBuilder
Romil Kumar Jain

32

ทางเลือกที่ง่ายกว่ามากคือการรับข้อมูลจากออบเจ็กต์การเชื่อมต่อเอง ตัวอย่างเช่น:

IDbConnection connection = new SqlConnection(connectionString);
var dbName = connection.Database;

ในทำนองเดียวกันคุณสามารถรับชื่อเซิร์ฟเวอร์ได้เช่นกันจากออบเจ็กต์การเชื่อมต่อ

DbConnection connection = new SqlConnection(connectionString);
var server = connection.DataSource;

นี่คือสิ่งที่ฉันกำลังมองหา ขอบคุณ.
Ivan Santiago

SqlConnectionเรื่องนี้กลายเป็นที่เฉพาะเจาะจงสำหรับ มีวิธีที่คล้ายกันในการสร้าง RDBMS ข้ามนี้หรือไม่?
Amit Joshi

@AmitJoshi ไม่ควรใช้ทั้งหมดIDbConnection?
nawfal

@nawfal: ฉันเห็นด้วย แต่ก็ยังไม่สามารถใช้งานได้ ฉันได้อธิบายรายละเอียดในคำถามนี้แล้ว stackoverflow.com/q/47727524/5779732
Amit Joshi

สามารถรับฐานข้อมูลและแหล่งข้อมูล แต่ไม่สามารถรับ userId และรหัสผ่านด้วยวิธีนี้
Dush

12
string connectString = "Data Source=(local);" + "Integrated Security=true";

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectString);

Console.WriteLine("builder.InitialCatalog = " + builder.InitialCatalog);

7

สิ่งนี้ให้ Xact แก่คุณ

System.Data.SqlClient.SqlConnectionStringBuilder connBuilder = new System.Data.SqlClient.SqlConnectionStringBuilder();

connBuilder.ConnectionString = connectionString;

string server = connBuilder.DataSource;           //-> this gives you the Server name.
string database = connBuilder.InitialCatalog;     //-> this gives you the Db name.


4

คุณสามารถใช้InitialCatalog Property หรือbuilder["Database"]ทำงานได้เช่นกัน ฉันทดสอบกับเคสอื่นแล้วก็ยังใช้งานได้

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