0

Microsoft.ACE.OLEDB.12.0コマンドオブジェクトを使用してMSAccessの名前付きクエリを実行するための構文を探しています。

テーブルを使用した例はたくさんありますが、クエリはまだ使用していません。テーブル名をクエリ名に交換しても機能しないようです。つまり、「myquery」から*を選択します

これが私のコードスニペットです:

$OleDbConn = New-Object "System.Data.OleDb.OleDbConnection";
$OleDbCmd = New-Object "System.Data.OleDb.OleDbCommand";
$OleDbAdapter = New-Object "System.Data.OleDb.OleDbDataAdapter";
$DataTable = New-Object "System.Data.DataTable";

$OleDbConn.Open();

$OleDbCmd.Connection = $OleDbConn;
$OleDbCmd.CommandText = "'myQuery'"; # name query in MS Access db
$OleDbCmd.CommandType = [System.Data.CommandType]::StoredProcedure;
$OleDbAdapter.SelectCommand = $OleDbCmd;

$RowsReturned = $OleDbAdapter.Fill($DataTable);
Write-Host $RowsReturned;

エラー:「1」引数を指定して「Fill」を呼び出す際の例外:「MicrosoftAccessデータベースエンジンが入力テーブルを見つけられないか、「ラボマニュアル」をクエリできません。存在し、名前のスペルが正しいことを確認してください。」

4

1 に答える 1

1

秘訣は、クエリ名の前にコマンド「実行」を追加し、クエリ名を角かっこで囲むことでした。

$OleDbConn = New-Object "System.Data.OleDb.OleDbConnection";
$OleDbCmd = New-Object "System.Data.OleDb.OleDbCommand";
$OleDbAdapter = New-Object "System.Data.OleDb.OleDbDataAdapter";
$DataTable = New-Object "System.Data.DataTable";

$OleDbConn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\temp\labmanual.mdb;";
$OleDbCmd.Connection = $OleDbConn;
$OleDbCmd.CommandText = "Execute [myQuery]";

$OleDbAdapter.SelectCommand = $OleDbCmd;

$OleDbConn.Open();
$RowsReturned = $OleDbAdapter.Fill($DataTable);


Write-Host $RowsReturned;

$OleDbConn.Close();
于 2012-10-16T18:38:13.130 に答える