【发布时间】:2022-12-10 09:24:21
【问题描述】:
我正在制作一个 PowerShell 脚本来从 Access 数据库中读取架构信息。我在调用带有限制的 OleDbConnection.GetSchema 函数时遇到问题(例如只获取用户表,而不是系统表)。在 C# 中工作的代码是:
OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=filename.mdb");
connection.Open();
DataTable schema = connection.GetSchema("Tables", new string[] {null, null, null, "TABLE"});
如何正确翻译最后一行以在 PowerShell 中工作?
我最初的尝试是:
$schema = $connection.GetSchema('Tables', @($null, $null, $null, 'TABLE'))
这失败了 OleDbException 消息:“参数不正确。”我将问题缩小到空值。甚至传递一个空限制:
$schema = $connection.GetSchema('Tables', @($null))
导致相同的异常。传入单个 null 限制应该与无限制调用 GetSchema 具有相同的效果,这在 PowerShell 中确实有效。
如果您为其中一个限制传递了无效值,我得到的异常与您得到的异常相同,所以我假设 $null 没有以某种方式正确翻译。对于 Access 数据库,前两个限制(目录和架构)必须为空。有谁知道如何正确传递这些空值?我尝试过的事情包括:
$connection.GetSchema('Tables',[string[]]@($null, $null, $null, 'TABLE'))
$connection.GetSchema('Tables',[string[]]@([string]$null, [string]$null, [string]$null, 'TABLE'))
[string[]] $restrictions = $null, $null, $null, 'TABLE'
$connection.GetSchema('Tables', $restrictions)
还尝试使用 ACE 提供程序而不是 JET。所有尝试都导致相同的 OleDbException 并显示消息:“参数不正确。”。
【问题讨论】:
标签: powershell oledb