C# 由于Office 365自动登录,WPF核心应用程序在将数据写入访问数据库时崩溃

C# 由于Office 365自动登录,WPF核心应用程序在将数据写入访问数据库时崩溃,c#,wpf,ms-access,office365,oledb,C#,Wpf,Ms Access,Office365,Oledb,在我的C#WPF核心应用程序中,使用OLEDBConnection,我可以从Access数据库中读取数据,而无需连接到包含SharePoint网站的同一网络。我的目标是在未连接到网络的情况下将数据写入Access DB,然后在稍后连接到网络的点进行同步。下面是Office 365尝试连接导致的AccessViolationException 问题不在于OLEDB连接。我能够成功地从数据库中读取数据,并且在更新时成功地生成了我的SQL。如何绕过此Sharepoint自动登录功能以写入我的acces

在我的C#WPF核心应用程序中,使用OLEDBConnection,我可以从Access数据库中读取数据,而无需连接到包含SharePoint网站的同一网络。我的目标是在未连接到网络的情况下将数据写入Access DB,然后在稍后连接到网络的点进行同步。下面是Office 365尝试连接导致的AccessViolationException


问题不在于OLEDB连接。我能够成功地从数据库中读取数据,并且在更新时成功地生成了我的SQL。如何绕过此Sharepoint自动登录功能以写入我的access数据库(但不同步到主数据库)?

这里的问题是您试图使用oleDB连接到本地access数据库,但该数据库实际上不仅是本地的,而且连接并同步到Sharepoint。登录部分、同步部分和离线模式、在线模式都是访问的一部分,而不仅仅是oleDB

换言之: 如果您想释放诸如SharePoint登录、Access表同步以及Access中的所有花哨内容等所有花哨的额外部分,则需要在Access中编写应用程序

如果你打算使用.net?然后,.net应用程序必须访问SharePoint web服务并直接使用+消费SharePoint列表-没有访问权限执行所有额外的酷工作。net具有攻击SharePoint的所有功能,web服务调用可以是REST,但我认为大多数实际上是SOAP调用。(但是SOAP和SharePoint的WSDL都有很好的文档记录和支持)

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

您试图通过oleDB访问这些表,但是您希望所有的SharePoint登录,以及Access中内置的所有非常酷的SharePoint同步功能(它不仅是数据库引擎和oleDB的一部分,而且是属于Access的部分)

你可以考虑并尝试自动运行一个完整的Access副本。但是,再一次,你将不再使用OLeDB,但事实上,就像你可以创建Word、Excel或Outlook in .NET的实例一样,这样你就可以创建一个完整的Access副本。 请记住,作为COM对象访问并不能通过一组干净的方法和属性正确地公开脱机、联机和同步选项。我知道情况就是这样,因为即使是从VBA中,您也无法真正控制脱机模式和联机模式。您可以做的是“测试”和“知道”如果当前已断开连接,则可以执行“刷新表”命令

VBA:
DoCmd.RunCommand acCmdRefreshSharePointList
但是,上面的内容将尝试刷新,如果用户脱机,应用程序将保持脱机状态,但会告诉用户。然后,用户将获得以下选项:

因此,他们必须单击此选项。一旦他们重新连接,他们将看到:

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

因此,控制登录等所需的内容和部分是Access的一部分,而不是oleDB对象模型的一部分

如前所述,即使访问模型也没有以一种有用的方式公开离线和在线模式的控制,但它比您从.net获得的更好

如果您使用.net?如上所述,点击SharePoint web services与列表交互,并且如果您需要本地脱机模式,则必须运行自己的同步系统,或使用.net同步框架