Microsoft Access ODBC连接:连接字符串差异

时间:2018-09-27 16:08:47

标签: sql tsql ms-access odbc

使用以下内容:

  • MS Access 2016,Office 365
  • SQL Server 2012

我有100多个SQL Server表和视图通过ODBC连接链接到Access数据库。所有这些SQL Server对象都来自驻留在同一服务器上的两个SQL Server数据库。所有这些连接都已使用Access用户界面进行了设置,并通过链接表管理器进行了重新链接。

最近我遇到了许多Access数据库问题,因此我正在用细齿梳进行梳理。我注意到所有SQL Server对象的连接字符串都有许多不一致之处(请参见下文)。就这些对象的创建时间以及连接字符串的格式而言,似乎没有任何模式。

ODBC;DSN=Database1;Description=Database1;Trusted_Connection=Yes;APP=Microsoft Office 2010;  
ODBC;DSN=Database1;Description=Database1;Trusted_Connection=Yes;APP=Microsoft Office 2010;DATABASE=Database1  
ODBC;DSN=Database1;Description=Database1;Trusted_Connection=Yes;APP=Microsoft Office 2010;DATABASE=Database1;Network=DBMSSOCN  
ODBC;DSN=Database1;Description=Database1;Trusted_Connection=Yes;APP=Microsoft Office 2016;  
ODBC;DSN=Database1;Description=Database1;Trusted_Connection=Yes;APP=Microsoft Office 2016;DATABASE=Database1  
ODBC;DSN=Database2;Description=Database2;Trusted_Connection=Yes;APP=Microsoft Office 2010;DATABASE=Database2  
ODBC;DSN=Database2;Description=Database2;Trusted_Connection=Yes;APP=Microsoft Office 2016;DATABASE=Database2  

连接字符串的变化太多有问题吗?我已经做过一些研究(例如Googling),但是在数据库领域我经验不足。一些连接指定了“网络”,而其他则没有。对于connectionstrings.com(https://www.connectionstrings.com/define-sql-server-network-protocol/),“ Network = DBMSSOC”指定Winsock TCP / IP连接,我认为这是我的网络设置的适当选择。从多个连接字符串中排除此参数是否有问题?

1 个答案:

答案 0 :(得分:0)

我当然可以将所有链接表“协调”到同一连接。

您可以使用链接表管理器来执行此操作,但是可能代码会更好。

您需要在链接表管理器中选择所有表,并确保单击提示输入新位置。这将迫使您创建(或选择)现有的DSN。实际上,我将从“一个”给定的数据库中选择所有表,然后单击“始终”提示以查找新位置。当您执行此操作时,所有人将拥有相同的链接和连接字符串。

有很多原因,其中一个很好的原因是Access会为您缓存连接。因此,如果同一数据库具有“不同”的连接,则这些连接将具有多个缓存。这可能不会很大程度地影响性能,但这仍然是一个好主意。

如果您不使用受信任的连接,则实际上您的连接字符串不需要包含uid /密码。 (但是,uid / password的高速缓存需要完全匹配的字符串(减去uid / password)。在这种方法中,您可以在应用程序启动时执行“一次性”登录,然后执行所有链接表(无需uid /密码)现在可以使用。但是,您在此处使用了受信任的连接,因此此提示+问题无关紧要。

在您的示例中,您使用的是受信任的连接,因此问题“少了很多”,省心或麻烦。

我也强烈建议,当您从Access启动ODBC管理器时,您始终但始终使用FILE dsn。原因是Access会为您将连接转换为无DSN。

这意味着您现在可以将前端应用程序部署到任何工作站,而无需进行设置或复制任何DSN连接,甚至无需在工作站上进行设置。

因此,我实际上将为一个给定的数据库选择所有表(检查提示中的新位置),然后创建一个FILE dsn(无论如何它们都是默认值)。链接后,请对指向其他数据库的所有其他表执行相同的操作。再次重新链接。

结果将是无dsn的连接,因此您的应用程序将可以在网络上的任何工作站上运行,而无需在每个工作站上设置任何类型的dsn。

是的,您不必这样做,但是随着时间的流逝,似乎有些表是使用不同的DSN链接的,应该将它们统一起来。而且,如果您曾经介绍过一些自动链接代码,则希望能够区分这两个数据库,并且使用不同连接的“大杂烩”来编写代码将非常困难。

因此,您可以使用链接表管理器来协调连接–只需确保从单个给定数据库中选择所有表,然后重新与FILE dsn链接,结果将减少DSN连接(仅访问)在链接过程中使用DSN –之后,访问无关,它也不使用甚至不查看DSN,甚至不存在。

以上所述,目前尚不清楚此问题是否与您的错误或应用程序中的不稳定有关。 (一个好主意是始终分发应用程序的编译版本-(与accDB相对应的accDE)。