asp.net2.0高级编程特别版中ADO.NET的异步处理一节提到的SqlAsyncResult到底哪里来的啊?网上搜索都没资料啊!程序也运行不了,郁闷!!
<%@ Page Language= "C# " %>
<%@ Import Namespace= "System.Data " %>
<%@ Import Namespace= "System.Data.SqlClient " %>
<%@ Import Namespace= "System.Configuration " %>
<script runat= "server ">
protected void Page_Load(object sender, EventArgs e)
{
SqlConnection DBCon;
SqlCommand Command = new SqlCommand();
SqlAsyncResult ASyncResult;
DBCon = new SqlConnection();
Command = new SqlCommand();
DBCon.ConnectionString =
ConfigurationManager.ConnectionStrings[ "DSN_NorthWind "].ConnectionString;
// Selecting top 5 records from the Orders table
Command.CommandText =
"SELECT TOP 5 Customers.CompanyName, Customers.ContactName, " +
"Orders.OrderID, Orders.OrderDate, " +
"Orders.RequiredDate, Orders.ShippedDate " +
"FROM Orders, Customers " +
"WHERE Orders.CustomerID = Customers.CustomerID " +
"ORDER BY Customers.CompanyName, Customers.ContactName ";
Command.CommandType = CommandType.Text;
Command.Connection = DBCon;
DBCon.Open();
// Starting the asynchronous processing
AsyncResult = Command.BeginExecuteReader(new AsyncCallback(CBMethod),
CommandBehavior.CloseConnection);
}
public void CBMethod(SQLAsyncResult ar)
{
SqlDataReader OrdersReader;
// Retrieving result from the asynchronous process
OrdersReader = ar.EndExecuteReader(ar);
// Displaying result on the screen
gvOrders.DataSource = OrdersReader;
gvOrders.DataBind();
}
</script>
<html xmlns= "http://www.w3.org/1999/xhtml " >
<head id= "Head1 " runat= "server ">
<title> The Call Back Approach </title>
</head>
<body>
<form id= "form1 " runat= "server ">
<div>
<asp:GridView ID= "gvOrders " Width= "100% " AutoGenerateColumns= "False "
runat= "server ">
<Columns>
<asp:BoundField HeaderText= "Company Name "
DataField= "CompanyName "> </asp:BoundField>
<asp:BoundField HeaderText= "Contact Name "
DataField= "ContactName "> </asp:BoundField>
<asp:BoundField HeaderText= "Order Date " DataField= "orderdate "
DataFormatString= "{0:d} "> </asp:BoundField>
<asp:BoundField HeaderText= "Required Date " DataField= "requireddate "
DataFormatString= "{0:d} "> </asp:BoundField>
<asp:BoundField HeaderText= "Shipped Date " DataField= "shippeddate "
DataFormatString= "{0:d} "> </asp:BoundField>
</Columns>
</asp:GridView>
</div>
</form>
</body>
</html>
[解决办法]
这本书很新么?不会是beta版的吧,应该是 返回 IAsyncResult,底下的类型也是DbAsyncResult
------解决方案--------------------
由于databind在页面完成后才被执行,所以显示空白。在
AsyncResult = Command.BeginExecuteReader(new AsyncCallback(CBMethod), CommandBehavior.CloseConnection);
后加
System.Threading.Thread.Sleep(1000);
DBCon.Close();
数据就能显示了。
[解决办法]
要设置System.Threading.Thread.Sleep(1000);
那异步回调有什么用呢??
如果被回调的方法执行的时间不止1000ms,那不是又出错??
哪位高手说说??
Wrox的ASP.NET2.0高级编程特别版中的批量更新、MARS、异步调用那几节都有错误...