我正在审查一些顾问签到的代码并注意到他们正在使用SQLCLR。我没有任何经验,所以我想我会研究它的内容。我注意到他们使用了
Dim cn As New SqlConnection("server=LOCALHOST;integrated security=yes;database=" & sDb)
而不是
DIM conn As New SqlConnection("context connection=true")
我想知道它的第一个是localhost的区别是什么?
答案 0 :(得分:6)
上下文连接使用用户已建立的与服务器的连接。所以你继承了数据库上下文,连接选项等等。
使用localhost将使用普通的共享内存连接连接到服务器。如果您不想使用用户的连接(例如,如果要连接到其他数据库,或使用不同的选项等),这可能很有用。
在大多数情况下,您应该使用上下文连接,因为它不会创建与服务器的单独连接。
另外,请注意,使用单独的连接意味着您不属于用户的事务,并且受到正常锁定语义的限制。
答案 1 :(得分:1)
考虑使用大型办公电话系统:
我的办公室有一个内部电话系统。但是每部手机都有一个外部电话号码(虚拟号码使用一组真正的TELCO线路)。我可以通过直接拨打电话分机呼叫另一个办公室,呼叫将通过我们的内部电话系统(一跳)。或者,我可以拨打该电话的公共号码,并将呼叫从大楼的系统路由到TELCO交换局,然后通过大楼的系统返回到办公室分机(3跳)。
第一个SQL连接的行为与连接到连接字符串中指定的服务器时的任何标准SQL连接相同。使用标准本机SQL连接创建新连接。这类似于拨打另一部办公室电话的完整公用电话号码。当然,您正在连接到本地计算机,但连接的路由方式不同。
上下文连接使用正在执行SQLCLR对象的现有连接来使用新的SqlConnection实例。它使用现有/本地上下文。这就像直接拨打我办公室友人的分机。本地环境和更高效。
虽然我不肯定,但我相信在使用上下文连接时,对SQLCLR对象的调用也会参与上下文的事务。如果我错了,请有人纠正我。
彼得