获取连接字符串没有密码值在C#

问题描述:

我尝试创建方法获取连接字符串值,但没有密码的值,或显示密码,如*字符。我需要在日志中使用它。获取连接字符串没有密码值在C#

我使用ConnectionStringBuilder for Oracle,SqlServer。

无论如何,另一种方式 - 更好地实施它?也许更通用。什么碰巧它的ProviderName是空的...

public static string GetConnectionStringWithouPassword(this ConnectionStringSettings cs) 
{ 
    if (cs == null || string.IsNullOrEmpty(cs.ConnectionString)) return null; 

    if (cs.ProviderName.ToLower().Equals("Oracle.DataAccess.Client".ToLower())) 
    { 
     var builderOra = new Oracle.DataAccess.Client.OracleConnectionStringBuilder(cs.ConnectionString); 
     return ""; 
    } 

    if (cs.ProviderName.ToLower().Equals("System.Data.SqlClient".ToLower())) 
    { 
     var builderSql = new SqlConnectionStringBuilder(cs.ConnectionString); 
     return ""; 
    } 

    return null; 
} 

// 
public static string ObtenerCadenasConexion() 
{ 
    var sb = new StringBuilder(); 
    ConnectionStringSettingsCollection settings = ConfigurationManager.ConnectionStrings; 

    if (settings != null) 
    { 
     foreach (ConnectionStringSettings cs in settings) 
     { 
      sb.AppendLine("Name: " + cs.Name); 
      sb.AppendLine("ProviderName: " + cs.ProviderName); 
      sb.AppendLine("ConnectionString: " + cs.GetConnectionStringWithouPassword() + Environment.NewLine); 
     } 
    } 

    return sb.ToString(); 
} 

检查这一项:DbConnectionStringBuilder Class

可以使用Remove方法,不需要神奇解析:

例如,从MSDN页面:

static void Main() 
{ 
    DbConnectionStringBuilder builder = new 
     DbConnectionStringBuilder(); 
    builder.ConnectionString = 
     @"Provider=Microsoft.Jet.OLEDB.4.0;Data 
      Source=C:\Demo.mdb;" + 
     "Jet OLEDB:System Database=system.mdw;"; 

    // Try to remove an existing item. 
    TryRemove(builder, "Provider"); 

    // Try to remove a nonexistent item. 
    TryRemove(builder, "User ID"); 

    // Try to remove an existing item, 
    // demonstrating that the search isn't 
    // case sensitive. 
    TryRemove(builder, "DATA SOURCE"); 
    Console.ReadLine(); 
} 

static void TryRemove(DbConnectionStringBuilder builder, string itemToRemove) 
{ 
    if (builder.Remove(itemToRemove)) 
    { 
     Console.WriteLine(@"Removed '{0}'", itemToRemove); 
    } 
    else 
    { 
     Console.WriteLine(@"Unable to remove '{0}'", itemToRemove); 
    } 
    Console.WriteLine(builder.ConnectionString); 
} 

检查Connection.PersistSecurityInfo属性,您可以在创建连接后立即删除此信息自动编辑。