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

时间:2008-09-11 15:02:21

标签: sqlclr

我正在审查一些顾问签到的代码并注意到他们正在使用SQLCLR。我没有任何经验,所以我想我会研究它的内容。我注意到他们使用了

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

而不是

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

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

2 个答案:

答案 0 :(得分:6)

上下文连接使用用户已建立的与服务器的连接。所以你继承了数据库上下文,连接选项等等。

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

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

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

答案 1 :(得分:1)

考虑使用大型办公电话系统:

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

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

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

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

彼得