2014-09-05 60 views
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() 

回答

0

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

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

$state = $command.BeginExecuteNonQuery() 
while(-not $state.IsCompleted) 
{ 
    Start-Sleep -Milliseconds 100 
}