C# ADO.NET问题

来源:百度知道 编辑:UC知道 时间:2024/05/10 09:07:19
IAsyncResult iar =SqlCommondName.BeginExecuteReader();
这个异步接口返回的是什么东西知道吗?

IAsyncResult 是个接口类型,它返回对象会根据具体的情况不同的哈,他的AsyncState属性为一个object对象。按照你的题目要求~~我想应该可以用SqlDataReader来强转换,即
SqlDataReader sdReader=(SqlDataReader)iar.AsyncState;
你试试看呢?
还有,SqlCommondName是你重写的?

好好看看MSDN的帮助吧:
BeginExecuteReader 方法启动异步执行返回行的 Transact-SQL 语句或存储过程的进程,因此,在执行语句的同时可以并发运行其他任务。当语句完成时,开发人员必须调用 EndExecuteReader 方法以完成操作并检索命令返回的 SqlDataReader。BeginExecuteReader 方法立即返回,但在代码执行相应的 EndExecuteReader 方法调用之前,它不得对同一 SqlCommand 对象执行启动同步执行或异步执行的任何其他调用。如果命令尚未执行完就调用 EndExecuteReader,会导致 SqlCommand 对象在命令执行完之前一直被阻止。

请注意,命令文本和参数会同步发送到服务器。如果发送了较大的命令或许多参数,该方法可能会在写操作期间被阻止。命令发出后,该方法将立即返回,而不等待服务器的应答 - 也就是说,读操作是异步执行的。虽然命令的执行是异步的,但获取值的操作仍然是同步的。这意味着,当需要更多数据时,如果基础网络的读操作被阻止,那么对 Read 的调用可能会被阻止。

由于此重载不支持回调过程,因此,开发人员必须使用 BeginExecuteReader 方法返回的 IAsyncResult 的 IsCompleted 属性进行轮询,以确定命令是否已完成;或者使用返回的 IAsyncResult 的 AsyncWaitHandle 属性,等待一个或多个命令完成。

如果您使用 ExecuteReader 或 BeginExecuteReader 访问 XML 数据,SQL Server 将以多行(每行 2,033 个字符)方式返回长度大于 2,033 个字符的所有 XML 结果。若要