【问题标题】:Read oracle connection string from c#从 c# 读取 oracle 连接字符串
【发布时间】:2014-08-11 07:42:12
【问题描述】:

假设我有一个字符串

metadata=res://*/Mapping.Models.csdl|res://*/Mapping.Models.ssdl|res://*/Mapping.Models.msl;provider=Oracle.ManagedDataAccess.Client;provider connection string="data source=TESTSERVER;password=pass;persist security info=True;user id=id\"

我怎样才能得到如下字符串:

data source=TESTSERVER;password=pass;persist security info=True;user id=id

【问题讨论】:

  • 问之前有没有尝试过?
  • @Matthijs 我做到了。我试过拆分..但似乎不太好...我不太擅长正则表达式...
  • 下次在您的问题中提供您的努力!它表明您已经积极尝试解决您的问题,这会触发 SO 用户积极尝试解决问题。
  • @Matthijs,好的,明白了~

标签: c#


【解决方案1】:

如果你想解析提到的字符串,那么你可以使用EntityConnectionStringBuilder。

有像 ProviderConnectionString 这样的属性可以给你你想要的字符串。

示例

var myEntityConnection = @"metadata=res://*/Mapping.Models.csdl|res://*/Mapping.Models.ssdl|res://*/Mapping.Models.msl;provider=Oracle.ManagedDataAccess.Client;provider connectionstring='""data source=TESTSERVER;password=pass;persist security info=True;user id=id";

var builder = new EntityConnectionStringBuilder(myEntityConnection);
Console.WriteLine(builder.ProviderConnectionString);

这就是你所需要的:)

【讨论】:

    【解决方案2】:

    为什么即使使用 EntityConnectionStringBuilder 也可以对连接字符串进行子串化,如下所述:

    var connString = new EntityConnectionStringBuilder(ConfigurationManager.ConnectionStrings["ConnectionStringKey"].ConnectionString);
    

    您可以从中检索 ProviderConnectionString,如下所示:

    var providerString = connString.ProviderConnectionString;
    

    对于甲骨文:

    对于 oracle,您可以使用 OracleConnectionStringBuilder

    【讨论】:

    • 嗨...因为我想使用 OracleDependency 但 EF 不提供..所以我必须提取连接字符串............并使用 OracleConnection
    • @kingjia :为此,您可以使用 OracleConnectionBuilder。看看我更新的答案。
    【解决方案3】:

    如果需要,您可以使用正则表达式来获取连接字符串:

    (data source).*[^"]
    

    【讨论】:

    • 提供者连接字符串中元素的顺序是任意的; “数据源”不必是第一个。
    【解决方案4】:

    您可以通过首先搜索子字符串provider connection string=来使用String.Substring:

    int index = text.IndexOf(@"provider connection string=");
    string result = text.Substring(index).Trim('"');
    

    【讨论】:

      【解决方案5】:

      试试这个正则表达式:

      \"[^\"]*\"
      

      或

      \".*?\"
      

      解释:

      [^ character_group ]
      

      否定:匹配任何不在 character_group 中的单个字符。

      *?
      

      匹配前一个元素零次或多次,但尽可能少。

      和一个示例代码:

      foreach(Match match in Regex.Matches(inputString, "\"([^\"]*)\""))
      Console.WriteLine(match.ToString());
      

      //或在 LINQ 中

      var result = from Match match in Regex.Matches(line, "\"([^\"]*)\"") 
               select match.ToString();
      

      【讨论】:

        【解决方案6】:

        您可以使用 SubString 逻辑。

                string strConnection = @"metadata=res://*/Mapping.Models.csdl|res://*/Mapping.Models.ssdl|res://*/Mapping.Models.msl;provider=Oracle.ManagedDataAccess.Client;provider connection string='""data source=TESTSERVER;password=pass;persist security info=True;user id=id";
        
                strConnection = strConnection.Substring(strConnection.LastIndexOf("data source"));
        

        【讨论】:

        • 几乎在那里....但包含'\'数据源=TESTSERVER;password=pass;persist security info=True;user id=id\
        【解决方案7】:

        通过给定的分隔符尝试splitting string。然后连接数组元素。

        string[] stringArray = str.Split(new string[] { "=" }, StringSplitOptions.None);

        【讨论】:

        • 它将返回原始字符串。
        猜你喜欢
        • 1970-01-01
        • 2011-09-02
        • 2018-03-06
        • 1970-01-01
        • 2015-12-31
        • 2010-12-22
        • 2013-02-23
        • 1970-01-01
        • 2013-12-14
        相关资源
        最近更新 更多