上一篇博客讲了ADO.NET2.0的新特性之一的异步查询。这次我们讲一下ADO.NET2.0配合SQL Server2005的一个特性,多活动结果集。SQL默认是禁用多活动结果集的,必须要在连接字符串中显示的打开。上一篇博客中有讲解如何开启。请注意测试数据库使用的是SQL Server2005版本。运行截图如下:

后台代码如下,代码比较简单,请看注释。
//
多活动的结果集
private
void
BindMARSData()

...
{
string QueryStr;
SqlConnection Con = new SqlConnection(ConStr);
SqlCommand CmdOreder, CmdDetail;
SqlParameter CusID, OrderID;
SqlDataReader RdrOrder, RdrDetail;

Con.Open();
QueryStr = "SELECT orderid,orderdate From Orders WHERE customerID= @CuID";
CmdOreder = new SqlCommand(QueryStr,Con);
CusID = CmdOreder.Parameters.Add("@CuID",SqlDbType.NChar,5);

QueryStr = "SELECT productid,quantity,unitprice FROM [order details] WHERE orderid=@OrderID";
CmdDetail = new SqlCommand(QueryStr,Con);
OrderID = CmdDetail.Parameters.Add("@OrderID",SqlDbType.Int);

CusID.Value = "ALFKI";
Response.Write("ID为:"+CusID.Value);

RdrOrder = CmdOreder.ExecuteReader();
while (RdrOrder.Read())

...{
Response.Write(RdrOrder["OrderID"]+"</br>");
Response.Write("********************************</br>");
//以第一个DataReder读出的结果为参数,执行第二个SQL
OrderID.Value = RdrOrder["OrderID"];
RdrDetail = CmdDetail.ExecuteReader();
while (RdrDetail.Read())

...{
Response.Write(RdrDetail["unitprice"]+"</br>");
}
RdrDetail.Dispose();
}

RdrOrder.Dispose();
Con.Dispose();
CmdDetail.Dispose();
CmdOreder.Dispose();
}