检查Access Web数据库是否在线

时间:2012-01-05 18:02:17

标签: ms-access c#-4.0 sharepoint-2010 oledb

有没有办法检查Access网络数据库是否在线?我通过OleDB和Microsoft.ACE.OLEDB.12.0提供程序连接到数据库。数据库包含本地表以及一些Web表。我需要能够检查Web表是否连接到SharePoint数据库。我也在使用Access Interop库来执行某些操作 - 如果我可以使用它来检查数据库是否在线,那也可以。

2 个答案:

答案 0 :(得分:1)

Access客户端知道它是“在线”还是“离线”。因此,Access测试/检查/必须有某种方式知道这些表当前是断开连接的(本地的),或者实际上是与SharePoint的实时连接,并且是活动的同步数据。我的蜘蛛意识告诉我,这种状态可能不会暴露,如果是,我不知道如何抓住这个值。

但是,您可以尝试强制进行完整的Web同步操作,如果您离线,则会收到可捕获的错误(3021)。这看起来有点像kluge,并且完全有可能检查状态(但我不知道在这个时间点如何)。

因此尝试同步会强制此问题。

例如

On Error Resume Next
DoCmd.RunCommand acCmdSyncWebApplication
Debug.Print Err.Number

作为抬头,acCmdSyncWebApplicaiton常量为699

然而,上面确实会抛出一个必须被解雇的对话框。因此,对于用户交互按钮,上面没有问题,但没有用户交互,没有互操作或自动化。

我现在知道如何从Access执行此操作的唯一方法是在SharePoint上调用表级过程。

以下对我来说效果很好:

On Error Resume Next
DoCmd.RunDataMacro "tblmonthtext.test1"
Debug.Print Err.Number

如果我们在线和表连接,那么调用表级过程(它什么都不做)工作正常,并且errnumber = 0.如果我们离线,那么调用表过程是不可能的,因此错误数字= 13087。

如上所述,由于我们正在处理自动连接或不连续的表,因此无论您是否有网络连接或应用程序“脱机”而不是“在线”运行,我打开表的VBA代码运行正常。我不认为代码知道或关心,这是你的问题。

所以我可以从Access调用该表过程。我相信docmd对象和方法是作为.net的自动化(互操作)公开的,所以在这个时候我正在使用这个kluge,它对我来说确实很好用。如果暴露了rundatamacro,那么你可以使用这个想法。

另一个kluge(一个可能更适合你的方法)就是使用一个dumy表并添加一条新记录。当表离线时,生成的自动编号PK值为负值。当您最终在线并同步时,那些PK负数将被服务器端生成的PK正值替换。

当你在线并添加一行时,你得到一个正的自​​动编号PK值。因此,另一个可能的技巧是简单地拥有一个没有记录的虚拟表。

然后您只需添加一条记录,确保保存。然后你抓住pk值,然后我想删除该行。 (所以桌子永远不会填满)。如果pk值> 0,你在线并连接。如果PK值< 0,那么你处于离线断开模式。所以一个“提示”或想法是在离线模式下PK行值将在你最终获得连接同步时被替换,并且在该离线时间帧期间,那些PK值是&lt; 0

答案 1 :(得分:0)

这样的东西
try
{
   //Create or open connection
}
catch(/*Exception you receive if database is inaccessible*/)
{
   //Handle exception
}
catch(Exception ex)
{
   //Handle other exceptions
}
finally
{
   accessConnection.Close();
}
相关问题