2

我正在查看顾问签入的一些代码,并注意到他们正在使用 SQLCLR。我没有任何经验,所以我想我会研究它是关于什么的。我注意到他们使用

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

代替

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

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

4

2 回答 2

6

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

使用 localhost 将使用普通的共享内存连接连接到服务器。如果您不想使用用户的连接(即,如果您想连接到不同的数据库,或者使用不同的选项等),这可能很有用。

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

另外,请注意,使用单独的连接意味着您不是用户事务的一部分,并且受制于正常的锁定语义。

于 2008-09-11T15:19:57.637 回答
1

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

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

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

上下文连接具有使用正在执行 SQLCLR 对象的现有连接的新 SqlConnection 实例。它使用现有/本地上下文。这就像直接拨打我办公室同事的分机一样。本地上下文更高效。

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

彼得

于 2008-09-11T15:27:02.847 回答