简体   繁体   English

从C#中读取Oracle连接字符串

[英]Read oracle connection string from c#

Let's say I have a string 假设我有一个字符串

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\"

How can I get the string as below: 如何获取如下字符串:

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

if you want to parse the string mentioned then you can use the EntityConnectionStringBuilder . 如果要解析提到的字符串,则可以使用EntityConnectionStringBuilder

There are Properties like ProviderConnectionString which gives you the string you want. 像ProviderConnectionString这样的属性可以为您提供所需的字符串。

Example

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);

Thats all you Need :) 那就是你所需要的:)

Why do you need to substring connectionstring even that is possible using EntityConnectionStringBuilder as mentioned below : 为什么甚至需要使用EntityConnectionStringBuilder来对连接字符串进行子字符串化,如下所述:

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

And from it you can retrieve ProviderConnectionString as shown below: 然后可以从中检索ProviderConnectionString ,如下所示:

var providerString = connString.ProviderConnectionString;

For Oracle: 对于Oracle:

For oracle you can use OracleConnectionStringBuilder 对于oracle,可以使用OracleConnectionStringBuilder

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

(data source).*[^"]

Try splitting string by the given delimiter. 尝试按给定的分隔符分割字符串 Then concatenate, the array elements. 然后连接数组元素。

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

You can use String.Substring by first seraching the sub-string provider connection string= : 您可以通过首先搜索子字符串provider connection string=来使用String.Substring

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

Try this regex: 试试这个正则表达式:

\"[^\"]*\"

or 要么

\".*?\"

explain : 说明:

[^ character_group ]

Negation: Matches any single character that is not in character_group. 否定:匹配不在character_group中的任何单个字符。

*?

Matches the previous element zero or more times, but as few times as possible. 与上一个元素匹配零次或多次,但次数最少。

and a sample code: 和示例代码:

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

//or in LINQ //或在LINQ中

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

You can use SubString logic. 您可以使用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"));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM