SQLCLR中的连接字符串之间的区别

时间:2020-03-05 18:51:33  来源:igfitidea点击:

我正在查看顾问检查的一些代码,发现他们正在使用SQLCLR。我没有任何经验,因此我想研究一下它的含义。我注意到他们使用了

Dim cn As New SqlConnection("server=LOCALHOST;integrated security=yes;database=" & sDb)

代替

DIM conn As New SqlConnection("context connection=true")

我想知道有什么区别,因为第一个是localhost?

解决方案

回答

上下文连接使用用户已经建立的与服务器的连接。因此,我们可以继承其数据库上下文,连接选项等内容。

使用localhost将使用普通的共享内存连接连接到服务器。如果我们不想使用用户的连接(即,如果我们要连接到其他数据库或者使用其他选项等),则此功能很有用。

在大多数情况下,我们应该使用上下文连接,因为它不会创建到服务器的单独连接。

另外,请注意,使用单独的连接意味着我们不属于用户事务的一部分,并且受常规锁定语义的约束。

回答

考虑一个大型办公电话系统:

我的办公室有一个内部电话系统。但是,每个电话都有一个外部电话号码(使用一组真实TELCO线路中的一个的虚拟号码)。我可以通过直接拨打他们的电话分机号来呼叫另一个办公室,并且该呼叫将路由到我们的内部电话系统(一跳)。或者,我可以拨打该电话的公用号码,然后将呼叫从建筑物的系统路由到TELCO交换局,然后再通过建筑物的系统再返回到办公室分机(3跳)。

当连接到连接字符串中指定的服务器时,第一个SQL连接的行为与任何标准SQL连接的行为相同。使用标准的本机SQL连接来创建新连接。这就像拨打另一个办公室电话的完整公用电话号码一样。当然,我们正在连接到本地计算机,但是连接的路由不同。

上下文连接具有新的SqlConnection实例,该实例使用正在执行SQLCLR对象的现有连接。它使用现有/本地上下文。这就像直接拨打我办公室伴侣的分机。本地环境,效率更高。

尽管我不太肯定,但我相信使用上下文连接时,对SQLCLR对象的调用也将参与上下文的事务。如果我错了,请有人纠正我。

彼德