2011-10-26 29 views
19

Come posso ottenere l'utente e la password da un tale connectionString nel app.config con una funzione di .NET?Ottenere utente e la password da ConnectionStringSettings

Naturalmente ho potuto leggere quella stringa e ottenere il valore dopo l'ID e la password = =.

<connectionStrings> 
<add name="MyConString" connectionString="Data Source=(local);Initial Catalog=MyDatabase;Persist Security Info=True;User ID=MyUsername Password=MyPassword;Connect providerName="System.Data.SqlClient"/>  
</connectionStrings> 
+1

spero avete notato che vi manca un ';." Dopo 'myusername' - prima di 'Password' –

risposta

31

uso del ConnectionBuilderClass

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder("Your connection string"); 
string password = builder.Password; 


insieme al

string connString = ConfigurationManager.ConnectionStrings["MyConString"].ConnectionString; 

per raggiungere questo obiettivo.

+0

+1 Sicuramente la soluzione più semplice. – Tim

+0

! yup grande risposta – msfanboy

-2
var connString = ConfigurationManager.ConnectionStrings["MyConString"].ConnectionString; 
var tokens = connString.Split(';'); 

string userId; 
string password; 

for(var i = 0; i < tokens.Length; i++) { 
    var token = tokens[i]; 
    if(token.StartsWith("User ID")) 
     userId = token.Substring(token.IndexOf("=") + 1); 

    if(token.StartsWith("Password")) 
     password = token.Substring(token.IndexOf("=") + 1); 
} 
+0

+1 per esempio di codice, tuttavia, non dovrebbe essere' token.Substring (token.IndexOf ("=") + 1); 'per rimuovere" = "? – Tim

+0

@Tim: Grazie. Notato e modificato - parla di" off-by-one "sempre adescando la sua brutta testa :) –

1

è possibile ottenere la stringa di connessione tra i seguenti

SqlConnectionStringBuilder yourconn = new SqlConnectionStringBuilder(ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString); 
string password = yourconn.Password; 

È quindi possibile ottenere la stringa che si sta cercando.

2
var builder = new SqlConnectionStringBuilder(ConfigurationManager.ConnectionStrings["MyConString"].ConnectionString) 
var user = builder.UserID; 
var password = builder.Password; 
4
SqlConnectionStringBuilder con = new SqlConnectionStringBuilder(ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString); 
string myUser = con.UserID; 
string myPass = con.Password; 
-2
string connectionString = ConfigurationManager.ConnectionStrings["MyConString"].ConnectionString; 
var tokens = connectionString.Split(';').Select(n => n.Split('='); 
string userId = tokens.First(n => n[0].Equals("User ID").Select(n => n[1]); 
string password = tokens.First(n => n[0].Equals("Password").Select(n => n[1]); 
0

solo per aggiungere un po 'per la risposta di Tomas Walek.

Questo approccio funziona solo se "User ID" nella stringa di connessione è in maiuscolo in modo corretto. Il provider Oracle ha accettato "ID utente" OK, ma SqlConnectionStringBuilder non ha funzionato.

public static class DbConnectionFactory 
{ 
    public static ConnectionStringSettings AppConnectionSettings = ConfigurationManager.ConnectionStrings["{A connection string name}"]; 
    public static SqlConnectionStringBuilder AppConnBuilder = new SqlConnectionStringBuilder(AppConnectionSettings.ConnectionString); 

    public static string DbUserID 
    { 
     get 
     { 
      return AppConnBuilder.UserID; 
     } 
     set { } 
    } 
} 
0

aggiungere un riferimento a System.Configuration e quindi utilizzare: using System.Configuration;

string MyDBConnection = ConfigurationManager.ConnectionStrings["MyDBConnection"].ConnectionString; 
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(MyDBConnection); 
string UserID = builder.UserID; 
string Password = builder.Password; 
string ServerName = builder.DataSource; 
string DatabaseName = builder.InitialCatalog; 
0
public static string GetConnectionSettings(string searchSetting) 
{ 
    var con = ConfigurationManager.ConnectionStrings["yourConnectionHere"]‌​.ConnectionString; 
    String[] myString = con.Split(';'); 
    Dictionary<string, string> dict = new Dictionary<string, string>(); 

    for (int i = 0; i < myString.Count(); i++) 
    { 
     String[] con3 = myString[i].Split('='); dict.Add(con3[0], con3[1]); 
    } 

    return dict[searchSetting]; 
} 

per searchSetting è possibile utilizzare ciò che si vuole "utente è" o la password.

+0

GetConnectionSettings public String statici (searchSetting stringa) {var con = ConfigurationManager.ConnectionStrings [ "yourConnectionHere"] ConnectionString;. String [] myString = con.Split (';'); Dictionary < string, string> dict = new Dictionary (); for (int i = 0; i

System.Data.Common.DbConnectionStringBuilder

che è una classe base per altre classi come SqlConnectionStringBuilder ecc

è possibile creare un'istanza di DbConnectionStringBuilder e nel mio caso avevo bisogno di avere una stringa di connessione configurabile che avrei potuto ottenere informazioni da - a prescindere dal da tipo di provider tabase. Alcune opzioni se hai bisogno di questa flessibilità - potresti creare ConnectionStringBuilder appropriato per il tuo provider come altri hanno suggerito - questo sarebbe probabilmente richiesto nella maggior parte dei casi in cui sono necessarie proprietà specifiche del provider.

O se volete leggere solo un paio di proprietà generiche, si potrebbe usare DbConnectionStringBuilder se avete solo bisogno l'ID utente e la password per esempio.

Questo campione dovrebbe funzionare per qualsiasi stringa di connessione che comprende user id e password.

DbConnectionStringBuilder db = new DbConnectionStringBuilder(); 
db.ConnectionString = ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString; 

var username = db["User Id"].ToString(); 
var password = db["Password"].ToString(); 
Problemi correlati