Powershell-插入后为选择查询提供ODBC MSAccess提交事务刷新数据

时间:2018-07-03 14:48:58

标签: powershell transactions odbc ms-access-2010 insert-into

我正在使用Powershell中的ODBC连接到.accdb访问数据库。将新数据插入表中(通过ExecuteNonQuery插入)后,我无法使用select命令提取数据以进行进一步处理(创建PDF表)。尽管“选择@@ IDENTITY”返回最新的索引标识符,但查询的结果对象为空(0行)。工作流程是这样的: 在表单窗口中输入数据->创建新记录->提取数据并将其处理为报告->通过邮件发送报告->将记录标记为已发送

我尝试使用SQL事务机制,但是即使在完成提交之后,也不能立即通过选择查询来检索数据。插入另一条记录后,可以使用选择查询来拉出先前插入的一条记录,而不是新的最新记录。

我没有找到任何解决此问题的方法。我已经听说过,在使用Access表单时,当表单移至下一条记录时,数据将可用。有什么想法可以解决这个问题吗?

下面是我的getter和setter函数。通常,它们可以按预期工作,但是先使用Set-Data并先插入一个插入,然后使用select触发Get-Data不会提供任何记录。

Function Get-Data($SQLCommand){
    try{
        $Connection = New-Object System.Data.Odbc.OdbcConnection($DSN)
        $Connection.Open()
        $AccdbCommand = New-Object System.Data.Odbc.OdbcCommand($SQLCommand, $Connection)
        $AccdbAdapter = New-Object System.Data.Odbc.OdbcDataAdapter($AccdbCommand)
        $AccdbDataSet = New-Object System.Data.DataSet
        $AccdbAdapter.Fill($AccdbDataSet)
        $Connection.Close()
        return $AccdbDataSet
    }
    catch
    {
        [System.Windows.Forms.MessageBox]::Show($_.Exception.Message + "`r`n" + $_.Exception.InnerException, "Fehler",'OK','Error')
    }
}

Function Set-Data($SQLCommand){
    try
    {
        $Connection = New-Object System.Data.Odbc.OdbcConnection($DSN)
        $Connection.Open()

        $Transaction = $Connection.BeginTransaction()

        $AccdbCommand = New-Object System.Data.Odbc.OdbcCommand($SQLCommand, $Connection, $Transaction)
        $AccdbCommand.ExecuteNonQuery()
        $transaction.Commit()

        $AccdbCommand = New-Object System.Data.Odbc.OdbcCommand("Select @@IDENTITY", $Connection)
        $result = $AccdbCommand.ExecuteScalar()

        $Connection.Close()
    }
    catch
    {
        [System.Windows.Forms.MessageBox]::Show($_.Exception.Message + "`r`n" + $_.Exception.InnerException, "Fehler", 'OK', 'Error')
    }
}

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题。提交本身按预期工作。输出过程中丢失的数据记录是由于使用for语句在数据集中的行进行循环时出错所致。