分类:
2008-10-15 16:38:21
在VS.NET中创建一个名称为PCSWebSrv2的新Web服务项目。首先,在global.asax的Application_Start()处理程序中给项目添加一些代码。把PCSWebApp3.mdb中的所有数据都载入到数据集中并且保存数据集,其中涉及的大部分代码前面已讨论过,因为前面已经把数据库载入到DataSet中。实际上,可以从第25章的PCSWebApp3的WebForm1.aspx.cs中复制需要的所有代码,其中包括InitializeComponent()中的数据库连接字符串(因为您使用的连接字符串有可能不相同,所以这里就不显示了)—— 只有几处需要修改:
protected void Application_Start(Object sender, EventArgs e)
{
System.Data.DataSet ds;
System.Data.OleDb.OleDbConnection oleDbConnection1;
System.Data.OleDb.OleDbDataAdapter daAttendees;
System.Data.OleDb.OleDbDataAdapter daRooms;
System.Data.OleDb.OleDbDataAdapter daEvents;
oleDbConnection1 = new System.Data.OleDb.OleDbConnection();
oleDbConnection1.ConnectionString = @" ... ";
oleDbConnection1.Open();
ds = new DataSet();
daAttendees = new System.Data.OleDb.OleDbDataAdapter(
"SELECT * FROM Attendees", oleDbConnection1);
daRooms = new System.Data.OleDb.OleDbDataAdapter(
"SELECT * FROM Rooms", oleDbConnection1);
daEvents = new System.Data.OleDb.OleDbDataAdapter(
"SELECT * FROM Events", oleDbConnection1);
daAttendees.Fill(ds, "Attendees");
daRooms.Fill(ds, "Rooms");
daEvents.Fill(ds, "Events");
oleDbConnection1.Close();
Application["ds"] = ds;
}
这里需要注意代码中的最后一行。通常,Application(以及Session)对象都有一个名/值对的集合,可以在该集合中保存数据。这里在Application中创建一个名称ds,它从数据库中提取数据集ds的串行化值,其中包含表Attendees、Rooms和Events。这样,Web服务对象的所有实例在任何时间都可以访问ds中保存的值。
为了能使上面的代码正常执行,也需要给global.asax.cs添加一个对System.data命名空间的引用:
...
using System.Data;
这项技术非常适合于只读数据,因为多个线程可以访问它,减少了对数据库中数据的载入。但要注意,由于Events表有可能发生变化,在Events表发生变化时,必须更新应用程序层DataSet。稍后会介绍这一内容。
接下来需要把方法GetData()添加给Service1.asmx.cs中的服务:
[WebMethod]
public DataSet GetData()
{
return (DataSet) Application["ds"];
}
[1]