标签: system.data.sqlclient

检查 SQL 连接字符串是否指定参数

我正在寻找一种可靠的方法来检查 C# 中给定的 SQL 连接字符串是否显式指定了某个参数,例如“ Encrypt=...”。我尝试使用 解析字符串SqlConnectionStringBuilder,期望它能ContainsKey()告诉我是否指定了某个键,但它不起作用:

System.Data.SqlClient.SqlConnectionStringBuilder x = 
    new("Data Source=.;Initial Catalog=myDb;Integrated Security=True");

bool encryptSpecified = x.ContainsKey("Encrypt"); // returns true :(
Run Code Online (Sandbox Code Playgroud)

澄清

我应该澄清为什么我需要知道Encrypt参数是否被显式指定。在 的当前版本中,的Microsoft.Data.SqlClient默认值为,但之前(中)为。因此,为了确保升级到后应用程序的向后兼容性,我想将参数设置为,除非用户明确指定了它的值EncrypttrueSql.Data.SqlClientfalseMicrosoft.Data.SqlClientEncryptfalse

解决方案

[基于与@Charlieface的讨论]

// important: *not* Microsoft.Data.SqlClient.SqlConnectionStringBuilder!
System.Data.SqlClient.SqlConnectionStringBuilder scsb = 
    new(connectionString); 
if (!scsb.Encrypted) scsb.Encrypted = false; // this will explicitly set Encrypt
connectionString = scsb.ConnectionString;
Run Code Online (Sandbox Code Playgroud)

c# connection-string system.data.sqlclient

5
推荐指数
1
解决办法
620
查看次数

无法从程序集“Microsoft.Data.SqlClient,Version=5.0.0.0,Culture=neutral,PublicKeyToken=23ec7fc2d6eaa4a5”加载类型“SqlGuidCaster”

我为.NET8创建了一个空白的webapi项目,安装了两个包Microsoft.Extensions.DependencyModel、Microsoft.Data.SqlClient\n以下是源代码\xef\xbc\x9a\nusing Microsoft.Extensions.DependencyModel; using System.Reflection; using System.Runtime.Loader; var builder = WebApplication.CreateBuilder(args); var list = DependencyContext.Default.RuntimeLibraries.ToList(); var assemblies = list.Select(m =>{ try { return AssemblyLoadContext.Default.LoadFromAssemblyName(new AssemblyName(m.Name)); }catch { return null; } }).Where(m => m != null).ToList(); foreach (var assembly in assemblies) {foreach (var type in assembly.GetTypes()) { } } app.Run();

\n

编译后会提示如标题的错误信息。\n.NET6中不存在这种情况。\n将Microsoft.Data.SqlClient改为System.Data.SqlClient时也会出现类似错误\n如何解决?太感谢了。

\n

system.data.sqlclient .net-8.0

5
推荐指数
1
解决办法
2616
查看次数