同时引用 Microsoft.Data.SqlClient 和 System.Data.SqlClient 会导致哪些类型的问题

What kind of problems can be caused by referencing both Microsoft.Data.SqlClient and System.Data.SqlClient

提问人:EyreCraggs 提问时间:3/14/2023 最后编辑:marc_sEyreCraggs 更新时间:3/14/2023 访问量:161

问:

我正在阅读这个问题的答案,其中指出“混淆数据提供者并不好玩,应尽可能避免。我想知道这会导致什么样的问题?Microsoft.Data.SqlClientSystem.Data.SqlClient

我考虑过两种情况,第一种是在项目中直接引用这两个包。在这种情况下,我可以看到共享的问题,或者传递 的不同实现的问题,但不确定还有什么会很痛苦。SqlConnectionSqlParameter

第二种是引用一个包,但通过第三方 dll 引用另一个包。在后一种情况下是否会引起问题,如果是这样,如何引起?

我这样做的秘密动机是,我们遇到了奇怪的行为,看起来像是我们的 Hangfire 服务中的连接泄漏,我想知道维护对 和 包的引用是否是一个可能的原因。Microsoft.Data.SqlClientSystem.Data.SqlClient

C# hangfire hangfire-sql system.data.sqlclient microsoft-data-sqlclient

评论

1赞 Jeroen Mostert 3/14/2023
“不好玩”在这里应该从字面上理解——引用这两个包所遇到的问题是烦恼,比如如果代码可以同时使用两种异常类型,则必须捕获两种异常类型,确保为在运行时执行此类操作的代码解析正确的数据库提供程序,解析类等。运行数据库代码的不同包的实际问题是意料之中的,因为它们不共享基本资源之外的资源,因此它应该很像(例如)在同一应用程序中使用 MySQL 和 SQL Server 的提供程序。Sytem.Data.SqlType
0赞 Jeroen Mostert 3/14/2023
如果你真的想知道“奇怪行为”是否是由于这个原因造成的,最好和最方便的方法是通过从等式中消除其中一个来测试它。如果这是不可能的,因为它是你设置的一个组成部分,那么你无论如何都无法放弃对“奇怪行为”的详细分析,你会发现它是否与这个过程有关。
0赞 JHBonarius 3/14/2023
这就像用 110V 和 240V 连接车间......您必须非常小心地连接正确的电线,否则您最终会遇到大问题并不得不重做大量工作。
1赞 Tanveer Badar 3/14/2023
一个直接的后果是,即使您在两个程序集中都有同类产品,它们确实是不同的类型,并且 CLR 将如此对待。您不能从一个包打开连接,并期望从另一个包配置参数。也可能存在实现级别的假设,这些假设可能会或可能不会被违反。SqlConnection

答: 暂无答案