由于Office 365自动登录,WPF Core App在将数据写入Access DB时崩溃

问题描述 投票:-1回答:1

在我的C#WPF Core应用程序中,使用OLEDBConnection,我可以从Access数据库读取数据,而无需连接到包含SharePoint网站的同一网络。我的目标是在不连接到网络的情况下将数据写入Access DB,然后在以后连接到网络的位置进行同步。下面是由Office 365尝试连接引起的AccessViolationException。 WPf Access error

问题不是OLEDBConnection。我能够从数据库成功读取,并且在更新中成功生成了我的SQL。如何解决此Sharepoint自动登录功能,以便写入访问数据库(但不同步到主数据库)?

c# wpf ms-access office365 oledb
1个回答
1
投票

这里的问题是您尝试使用oleDB连接到本地Access数据库,但是该数据库并不是真正的本地数据库,而是已连接并同步到SharePoint。零件,同步零件和离线模式上的登录,在线模式是Access的全部,而不仅仅是oleDB。

换句话说:如果要释放所有那些多余的多余部分(如SharePoint登录),以及将Access同步到表以及Access中所有花哨的内容,则需要在Access中编写应用程序。

如果您要使用.net?然后,.net应用程序必须访问SharePoint Web服务并直接使用+使用SharePoint列表-不能由Access执行所有这些额外的出色工作。 .net具有击中SharePoint的所有功能,Web服务调用可以是REST,但我认为大多数实际上是SOAP调用。 (但是SOAP和SharePoint的WSDL都有很好的文档记录和受支持)。

如果您需要离线,那么在线同步系统?然后,您必须自己动手,或对.net使用已弃用的同步框架(已弃用,但仍可以使用。并且有SharePoint的同步提供程序。因此,您仍然可以拥有本地accDB(访问数据文件),但数据表不会链接到SharePoint。您的.net应用程序必须执行同步操作。

[您试图通过oleDB击中表,但是您随后希望所有SharePoint登录以及所有非常酷的SharePoint同步内置于Access中的内容(这不仅是数据库引擎和oleDB的一部分,而且是点点滴滴属于Access。)

您可以考虑并尝试自动执行Access的整个运行副本。但是话又说回来,您将不再使用oleDB,但实际上就像您可以创建Word或Excel实例或在.net中说Outlook一样?因此,您将创建Access的完整运行副本。

[请记住,作为COM对象的Access不能真正通过一组干净的方法和属性正确地公开脱机,联机和同步选项。我知道是这样,因为即使是从VBA,您也无法真正控制离线模式与在线模式。您可以做的是“测试”并“知道”当前是否断开连接。然后,您可以执行刷新表命令。

VBA:
DoCmd.RunCommand acCmdRefreshSharePointList

但是,以上内容将尝试刷新,并且如果用户处于脱机状态,则该应用程序将保持脱机状态,但是会告诉用户。然后为用户提供此选项:

enter image description here

因此,他们必须单击此选项。一旦他们重新连接,他们就会看到以下内容:

enter image description here

因此,上面的acCmdRefreshSharePointList仅在用户选择上面的UI后才真正触发数据的完全刷新(和同步)。不幸的是,据我所知,UI是用户处理是否已连接SharePoint的唯一方法(您可以测试/签入VBA,但无法控制它)。一旦上面的用户重新连接,然后您可以按照上面的命令强制刷新,但实际上并没有多大帮助,因为您无法切换或控制离线/在线或在线模式从VBA(因此也无法从.net通过COM对象自动化)。

因此,您需要控制登录等的操作和操作是Access的一部分,而不是oleDB对象模型的一部分。

如前所述,即使Access模型也没有以有用的方式公开离线/在线和在线模式的控制。但是它比.net的要好。

如果您使用.net?如前所述,单击SharePoint Web服务以与列表进行交互,并且如果需要本地脱机模式,则必须滚动自己的同步系统或使用.net同步框架。

© www.soinside.com 2019 - 2024. All rights reserved.