对于我制作的项目之一,我需要使用OleDB从Sharepoint检索列表。您可以在下面看到我使用的代码:
string ConnectionString = "WSS;HDR=YES;IMEX=2;DATABASE=XXX;LIST=YYY;RetrieveIds=Yes;TABLE=ZZZ;Provider=Microsoft.ACE.OLEDB.12.0";
string query = "Select * From [Table]";
OLEDBConnection conn = new OLEDBConnection(ConnectionString);
conn.Open();
OLEDBDataAdapter dataAdapter = new OLEDBDataAdapter(query, conn);
DataSet ds = new DataSet();
dataAdapter.Fill(ds);
代替xxx,yyy,zzz我插入从Sharepoint生成的.iqy文件中获取的值。
计算机在Windows 10 Enterprise x64上运行,并且预安装了Office Professional 2016 x86(请注意,安装64位Office没有任何意义),包括Access 2016.Sharepoint服务器是Sharepoint 2013版本。
通过此设置,代码在打开连接时抛出异常Invalid argument
。我还确保12.0提供商已注册。尝试将提供程序更改为16.0版本确实导致完全相同的异常。
我被建议尝试使用“Microsoft Access数据库引擎2010”(x86)。
从上面的Microsoft页面代码安装该引擎后开始工作。我能够建立连接并使用查询获取列表。
但是,在打开Access之后,它在打开之前会运行一些修复(触发Office Professional安装)。修复后,代码再次停止工作,直到我重新安装“Microsoft Access数据库引擎2010”
我尝试使用Access Linked Table连接字符串中的参数。 (它使用ACEWSS;参数而不是WSS;),但没有任何结果。
我还尝试从连接字符串中删除WSS参数,但然后代码抛出错误Could not find installable ISAM
。
请在下面找到用于连接结果的所有连接字符串:
默认访问引擎(来自Office):
WSS;HDR=YES;IMEX=2;DATABASE=XXX;LIST=YYY;RetrieveIds=Yes;TABLE=ZZZ;Provider=Microsoft.ACE.OLEDB.12.0"
- 无效的参数
ACEWSS;HDR=YES;IMEX=2;DATABASE=XXX;LIST=YYY;RetrieveIds=Yes;TABLE=ZZZ;Provider=Microsoft.ACE.OLEDB.12.0"
- 无效的参数
HDR=YES;IMEX=2;DATABASE=XXX;LIST=YYY;RetrieveIds=Yes;TABLE=ZZZ;Provider=Microsoft.ACE.OLEDB.12.0"
- 无法找到可安装的ISAM
WSS;HDR=YES;IMEX=2;DATABASE=XXX;LIST=YYY;RetrieveIds=Yes;TABLE=ZZZ;Provider=Microsoft.ACE.OLEDB.16.0"
- 无效的参数
WSS;HDR=YES;IMEX=2;DATABASE=XXX;LIST=YYY;RetrieveIds=Yes;TABLE=ZZZ;Provider=Microsoft.ACE.OLEDB.16.0"
- 无效的参数
HDR=YES;IMEX=2;DATABASE=XXX;LIST=YYY;RetrieveIds=Yes;TABLE=ZZZ;Provider=Microsoft.ACE.OLEDB.16.0"
- 找不到可安装的ISAM
安装Access Database Engine 2010:
WSS;HDR=YES;IMEX=2;DATABASE=XXX;LIST=YYY;RetrieveIds=Yes;TABLE=ZZZ;Provider=Microsoft.ACE.OLEDB.12.0"
- 这个工作正常!
ACEWSS;HDR=YES;IMEX=2;DATABASE=XXX;LIST=YYY;RetrieveIds=Yes;TABLE=ZZZ;Provider=Microsoft.ACE.OLEDB.12.0"
- Microsoft Access数据库引擎找不到对象'Table'
HDR=YES;IMEX=2;DATABASE=XXX;LIST=YYY;RetrieveIds=Yes;TABLE=ZZZ;Provider=Microsoft.ACE.OLEDB.12.0"
- 无法找到可安装的ISAM
WSS;HDR=YES;IMEX=2;DATABASE=XXX;LIST=YYY;RetrieveIds=Yes;TABLE=ZZZ;Provider=Microsoft.ACE.OLEDB.16.0"
- 申请停止工作
ACEWSS;HDR=YES;IMEX=2;DATABASE=XXX;LIST=YYY;RetrieveIds=Yes;TABLE=ZZZ;Provider=Microsoft.ACE.OLEDB.16.0"
- 应用程序停止工作。
HDR=YES;IMEX=2;DATABASE=XXX;LIST=YYY;RetrieveIds=Yes;TABLE=ZZZ;Provider=Microsoft.ACE.OLEDB.16.0"
- 找不到可安装的ISAM
我已经没有想法,如何建立此连接并使用Access使用的默认驱动程序,并且既不理解为什么相同的连接字符串与安装的2010版本一起工作,也不能使用默认的Access 2016驱动程序。我将不胜感激。