C# 我如何删除“;提供者=…”;从连接字符串
我有一个带有sql任务和c#脚本任务的SSIS 它有一个项目参数C# 我如何删除“;提供者=…”;从连接字符串,c#,regex,C#,Regex,我有一个带有sql任务和c#脚本任务的SSIS 它有一个项目参数conn(类型为字符串),其值为: Data Source=serverName;Initial Catalog=dbName;Provider=SQLNCLI11.1;Integrated Security=SSPI; sql任务使用oledb连接,oledb连接使用此字符串。sql任务调用一个存储过程。此sql任务有效 c#script任务也需要使用它,它使用SqlConnection。 (我可以使用一个单独的项目参数,该参数
conn
(类型为字符串),其值为:
Data Source=serverName;Initial Catalog=dbName;Provider=SQLNCLI11.1;Integrated Security=SSPI;
sql任务使用oledb连接,oledb连接使用此字符串。sql任务调用一个存储过程。此sql任务有效
c#script任务也需要使用它,它使用SqlConnection
。
(我可以使用一个单独的项目参数,该参数不包含“Provider”,但似乎效率不高)
但是,SqlConnection
不喜欢关键字“Provider”,我无法将其更改为使用OleDbConnection
(我的c语言能力不强)
因此,我需要从这个字符串中删除Provider=blabla
。我想用正则表达式替换String.replace
我该怎么做
谢谢大家! 因为您有两个不同的客户机,有不同的需求,所以我将使用两个字符串。是否将两组代码都存储在同一目录中 如果你想坚持使用一个字符串,我想最简单的方法是
connectionString.Replace(“Provider=SQLNCLI11.1;”,“”)代码>
您还可以将该元素移动到字符串的末尾,获取“Provider=”的索引,并仅从0-index读取。这将保护您的代码,防止将来有人更改为其他提供程序
connectionString.SubString(0,s.IndexOf(“Provider=”)
一般来说,不直接修改连接字符串更安全,而是使用特定提供商的连接StringBuilder
为您执行此操作:
var conn = " Data Source=serverName;Initial Catalog=dbName;Provider=SQLNCLI11.1;Integrated Security=SSPI; ";
var connBldr = new OleDbConnectionStringBuilder(conn);
connBldr.Remove("provider");
conn = connBldr.ConnectionString;
也就是说,另一种方法是在上拆分字符串代码>字符,删除任何包含“provider”的部分,然后使用将它们重新连接起来代码>字符:
conn = string.Join(";", conn.Split(';').Where(c =>
!c.TrimStart().StartsWith("provider", true, null)));
它起作用了!谢谢你,这很简洁。编辑:我确实尝试过这个方法,它也很管用,但是你的方法要好得多:“var newConn=new-OleDbConnectionStringBuilder(conn);newConn.Remove(“Provider”);conn=newConn.ToString();”根据经验,永远不要直接创建或操作连接字符串,使用相应的ConnectionStringBuilder来处理它。