如何在C#中检测SQL连接字符串是否显式指定某参数(如Encrypt)
问题描述
我需要一种可靠的C#方法,检测给定的SQL连接字符串是否显式指定了某个参数,例如Encrypt=...。尝试使用SqlConnectionStringBuilder解析字符串,通过ContainsKey()判断参数是否被指定,但未能成功:
System.Data.SqlClient.SqlConnectionStringBuilder x = new("Data Source=.;Initial Catalog=myDb;Integrated Security=True"); bool encryptSpecified = x.ContainsKey("Encrypt"); // 返回true :(
补充说明
我需要明确检测Encrypt参数是否被显式指定的原因:在当前版本的Microsoft.Data.SqlClient中,Encrypt的默认值为true,但旧版System.Data.SqlClient中其默认值为false。因此,为确保应用升级到Microsoft.Data.SqlClient后的向后兼容性,我希望将Encrypt参数设为false,除非用户已显式指定其值。
解决方案
(基于与@Charlieface的讨论)
// 注意:不能使用Microsoft.Data.SqlClient.SqlConnectionStringBuilder! System.Data.SqlClient.SqlConnectionStringBuilder scsb = new(connectionString); if (!scsb.Encrypted) scsb.Encrypted = false; // 这会显式设置Encrypt参数 connectionString = scsb.ConnectionString;
内容的提问来源于stack exchange,提问作者Mo B.
相关产品推荐
相关产品推荐

