ASP.NET和AJAX简洁教程
- 格式:doc
- 大小:545.65 KB
- 文档页数:15
介绍尽管AJAX是种客户端技术,但实际上的开发过程,它经常要调用一个服务器端的过程。
通常,网站上的数据是存放在一个关系型数据库中,为了让AJAX更有用处,处理服务器端数据需要一种简单可靠的方法。
幸运的是, AJAX提供了一种有效的基础架构来做这件事情,浏览器和服务器在Internet上可以进行AJAX通信。
自然而然,Web Service在数据传输和客户端/服务器之间的一般通信方面可以扮演一个重要角色。
本文就演示了如果通过 AJAX调用 web services。
软件需求本文所有的范例都是使用 AJAX RC版,而且,要在SQL Server 2005 (Express版即可)上有一个Northwind数据库。
范例使用Visual Studio 2005作为开发环境。
范例场景范例开发了一个Web页面,用于输入Northwind数据库职员表中的职员数据。
页面通过 AJAX功能,调用一个Web Service来完成职员表中的数据增、删、改、查。
创建一个Web Service作为开始,使用Visual Studio 2005创建一个新的Web站点,注意把 AJAX项目模板添加到新站点对话框,这个对话框包括一个" AJAX Enabled Web Site" 模板。
图1:新站点创建模板使用" AJAX Enabled Web Site" 模板创建的新站点和用普通方法创建的站点区别如下:·它的Web.config自动包括许多 AJAX专用的配置信息。
·System.Web.Extensions程序集被添加到引用中。
当然,我们可以更改一个普通的Web站点,以使之符合AJAX要求,但模板可以大大简化我们的工作。
现在我们创建了一个新的Web站点,添加一个新的web service并命名为EmployeeService.asmx,EmployeeService将包括5个Web方法Method Name DescriptionGetEmployees() 返回Employees表里的雇员列表。
这个列表是一个Employee对象数组GetEmployee() 接收EmployeeID参数返回Employee对象的详细信息Insert() 给Employees表里增加一个新的雇员信息Update() 更新Employees表里的某个雇员信息Delete() 删除Employees表里的某个雇员信息表1:EmployeeService中的Web方法GetEmployees() 和GetEmployee()方法以Employee对象的形式返回数据,因此,首先创建一个Employee类。
右键单击App_Code文件夹,选择“添加新项…”,添加一个叫Employee的类,下面显示Employee类的全部代码:public class Employee{private int intEmployeeID;private string strFirstName;private string strLastName;public int EmployeeID{get{return intEmployeeID;}set{intEmployeeID = value;}}public string FirstName{get{return strFirstName;}set{strFirstName = value;}}public string LastName{get{return strLastName;}set{strLastName = value;}}}Employee类申明三个Private变量来分别存放employee ID, first name和last name,三个变量再封装在三个public属性中:EmployeeID, FirstName和LastName。
打开web.config文件,添加<connectionStrings>部分如下:<connectionStrings><add name="connstr" connectionString="data source=.\sqlexpress;initial catalog=northwind;integrated security=true"/></connectionStrings>这部分存放数据库链接字符串,用于指向Northwind数据库,确保修改SqlServer名称、IP地址以及验证方式以和我们的开发环境相符。
现在,打开EmployeeService.cs添加如下代码:private string strConn = "";public EmployeeService(){strConn = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;}代码使用了ConfigurationManager类来读取配置文件中的数据库链接字符串,并存放在一个类级别的变量strConn中,这个变量将被下面的所有Web Method所使用。
现在,添加GetEmployees() web method:[WebMethod]public Employee[] GetEmployees(){SqlConnection cnn = new SqlConnection(strConn);cnn.Open();SqlCommand cmd = new SqlCommand();cmd.Connection = cnn;mandText = "select employeeid,firstname,lastname from employees";SqlDataReader reader = cmd.ExecuteReader();List<Employee> list = new List<Employee>();while (reader.Read()){Employee emp = new Employee();emp.EmployeeID = reader.GetInt32(0);emp.FirstName = reader.GetString(1);stName = reader.GetString(2);list.Add(emp);}reader.Close();cnn.Close();return list.ToArray();}代码创建了SqlConnection and SqlCommand 对象,然后执行SELECT查询,以获取Employees表中EmployeeID, FirstName 和LastName字段。
结果通过SqlDataReader返回。
然后,创建一个generic-based Employee数组,通过While循环,给每个Employee实例的属性赋值。
当While循环完毕的时候,关闭SqlDataReader 和SqlConnection。
GetEmployees()方法返回的类型是Employee数组。
因此,generic List使用List类中的ToArray()方法来转换成Employee数组。
现在,添加一个GetEmployee() web method如下:[WebMethod]public Employee GetEmployee(int pEmployeeId){SqlConnection cnn = new SqlConnection(strConn);cnn.Open();SqlCommand cmd = new SqlCommand();cmd.Connection = cnn;mandText = "select employeeid,firstname,lastnamefrom employees where employeeid=@id";SqlParameter id = new SqlParameter("@id", pEmployeeId);cmd.Parameters.Add(id);SqlDataReader reader = cmd.ExecuteReader();Employee emp = new Employee();while (reader.Read()){emp.EmployeeID = reader.GetInt32(0);emp.FirstName = reader.GetString(1);stName = reader.GetString(2);}reader.Close();cnn.Close();return emp;}GetEmployee() web method接受一个employee ID参数作为输入,代码和前面的非常相似,但这次只返回一个employee。
注意,使用SqlParameter来定义传入的EmployeeID。
现在,再添加Insert()、Update()和Delete()web methods,其中,Insert() web method 以要添加的Employee的first name 和last name 作为参数,Update() web method 以要更新的employee ID 以及新的first name 和last name作为参数,并执行UPDA TE语句,Delete() web method 以要删除的employee ID 作为参数,然后执行DELETE 语句[WebMethod]public int Insert(string pFirstName, string pLastName){SqlConnection cnn = new SqlConnection(strConn);cnn.Open();SqlCommand cmd = new SqlCommand();cmd.Connection = cnn;mandText = "insert into employees(firstname,lastname)values (@fname,@lname)";SqlParameter fname = new SqlParameter("@fname", pFirstName);SqlParameter lname = new SqlParameter("@lname", pLastName);cmd.Parameters.Add(fname);cmd.Parameters.Add(lname);int i = cmd.ExecuteNonQuery();cnn.Close();return i;}[WebMethod]public int Update(int pEmployeeId,string pFirstName, string pLastName){SqlConnection cnn = new SqlConnection(strConn);cnn.Open();SqlCommand cmd = new SqlCommand();cmd.Connection = cnn;mandText = "update employees set firstname=@fname,lastname=@lname where employeeid=@id";SqlParameter fname = new SqlParameter("@fname", pFirstName);SqlParameter lname = new SqlParameter("@lname", pLastName);SqlParameter id = new SqlParameter("@id", pEmployeeId);cmd.Parameters.Add(fname);cmd.Parameters.Add(lname);cmd.Parameters.Add(id);int i = cmd.ExecuteNonQuery();cnn.Close();return i;}[WebMethod]public int Delete(int pEmployeeId){SqlConnection cnn = new SqlConnection(strConn);cnn.Open();SqlCommand cmd = new SqlCommand();cmd.Connection = cnn;mandText = "delete from employees where employeeid=@id";SqlParameter id = new SqlParameter("@id", pEmployeeId);cmd.Parameters.Add(id);int i = cmd.ExecuteNonQuery();cnn.Close();return i;}这就完成了web service的创建。