0

我正在尝试使我的 SQL 命令与 PowerShell 异步运行。为了实现这一点,我正在使用SqlCommand类和BeginExecuteNonQuery方法。据我所知,这个方法应该返回IAsyncResult类。但是当我试图检查返回值时,我看到了System.Data.Common.DbAsyncResult类。

请告诉我我做错了什么或者我在哪里可以读到我的错误,我对编程很陌生。我的代码示例如下

$connection = New-Object System.Data.SqlClient.SqlConnection
"addr=tcp:192.168.0.81,1433;Database=ArchiCredit;uid=sa;password=1;Async=true;"
$connection.Open()
$connection.State
$command = New-Object System.Data.SqlClient.SqlCommand ("update clients set fullname = 'ololo' where id = 15", $connection)
$state = $command.BeginExecuteNonQuery()
$state | gm

这个脚本的结果是

PS C:\Users\ivanov> F:\AsyncSQL.ps1
Open


TypeName: System.Data.Common.DbAsyncResult

Name        MemberType Definition                    
----        ---------- ----------                    
Equals      Method     bool Equals(System.Object obj)
GetHashCode Method     int GetHashCode()             
GetType     Method     type GetType()                
ToString    Method     string ToString()
4

1 回答 1

0

这是正常的。IAsyncResult是一个接口。一个类实现了一个接口,使用该类的任何人都可以保证该类将具有该接口指定的所有属性/方法。在这种情况下,我相信DbAsyncResult是一个内部类。也许这就是 PowerShell 没有向您显示属性的原因。奇怪的。

尽管没有看到它的属性,你可以像这样等待它:

$state = $command.BeginExecuteNonQuery()
while( -not $state.IsCompleted )
{
    Start-Sleep -Milliseconds 100
}
于 2014-09-05T21:30:46.497 回答