您的位置:知识库 » .NET技术

ASP.NET 2.0数据教程之一:创建一个数据访问层

作者: Scott Mitchell  来源: 博客堂  发布时间: 2008-09-26 17:42  阅读: 19662 次  推荐: 0   原文链接   [收藏]  

系列文章导航:

ASP.NET 2.0数据教程之一:创建一个数据访问层

ASP.NET 2.0数据教程之二:创建一个业务逻辑层

ASP.NET 2.0数据教程之三:母板页和站点导航

ASP.NET 2.0数据教程之四:使用ObjectDataSource展现数据

ASP.NET 2.0数据教程之五:声明参数

ASP.NET 2.0数据教程之六:编程设置ObjectDataSource的参数值

ASP.NET 2.0数据教程之七:使用DropDownList过滤的主/从报表

ASP.NET 2.0数据教程之八:使用两个DropDownList过滤的主/从报表

ASP.NET 2.0数据教程之九:跨页面的主/从报表

ASP.NET 2.0数据教程之十:使用 GridView 和DetailView实现的主/从报表

ASP.NET 2.0数据教程之十一:基于数据的自定义格式化

ASP.NET 2.0数据教程之十二:在GridView控件中使用TemplateField


第四步:插入,更新和删除数据

常用的插入,更新和删除数据的模式有两种。第一种模式,我称之为DB直接模式,涉及的方法被调用时,会向数据库里发出一个INSERT, 或UPDATE,或DELETE命令,这个命令只对单个数据库记录做操作。象这样的方法一般接受一系列对应于插入,更新或删除的值的标量参数(譬如整数,字符串,布尔值,日期时间等)。譬如,用这个模式来操作Products表的话,删除方法会接受一个整数参数,代表所需要删除的记录的ProductID,而插入方法则会接受一个对应于ProductName的字符串,对应 于UnitPrice的decimal值,对应于UnitsOnStock的整数等等。

图 21: 每个插入,更新,和删除请求都被立刻发送到数据库

另外一个模式,我称之为批更新模式,可以在一个方法调用里更新整个DataSet,或者整个DataTable,或 者一个DataRow集合。在这个模式里,开发人员在一个DataTable中删除,插入,修改DataRow,然后把这 些DataRow或整个DataTable传给一个更新方法。然后这个方法会轮循传入的DataRow们,通过DataRow的RowState属 性属性来决定这些DataRow是否被改动过,或是新记录,或是被删除的记录,然后为每个记录发出合适的 数据库命令。

图 22: 在Update 方法调用之后,所有的变动都与数据库同步了

在默认情形下,TableAdapter采用批更新模式,但也支持DB直接模式。因为我们在创建我们的TableAdapter时的高级选项中选择了“生成插入,更新,和删除语句” 这个选项,ProductsTableAdapter 包含了一个 Update()方法,该方法实现了批 更新模式。具体地说,TableAdapter包含了一个Update() 方法,可以传入一个强类型 的DataSet,或者一个强类型的DataTable,或者一个和多个DataRow。假如你在一开始创建TableAdapter时的选项中没有清除“生成DB直接方法(GenerateDBDirectMethods)”复选框的话,DB直接模 式也会通过Insert()Update()Delete()方法来实现。

这两种数据修改模式都使用 了TableAdapter的InsertCommandUpdateCommand, 和DeleteCommand属性来向数据库发出对应 的INSERTUPDATEDELETE命令。你可以在DataSet设计器里点击TableAdapter,然后在属性窗口查看和改 动InsertCommandUpdateCommand, 和DeleteCommand属性。(确 认你选择了TableAdapter,并且ProductsTableAdapter对象是属性窗口中下拉框里被选中的项)

图23: TableAdapter包含InsertCommandUpdateCommand, 和DeleteCommand等属性

想查看或改动这些数据库命令的属性的话,点击CommandText子属性,这会启动对应的查询 生成器。

图 24: 在查询生成器里配置插入,更新,删除语句

下面的编码例子示范了如何使用批更新模式来把没被终止的,且库存等于或少于25个单元的产品的价格加 倍:

C#
1
2
3
4
5
6
7
8
9
10
11
12
NorthwindTableAdapters.ProductsTableAdapter 

productsAdapter =
  new NorthwindTableAdapters.ProductsTableAdapter();

// For each product, double its price if it is not discontinued 

and
// there are 25 items in stock or less
Northwind.ProductsDataTable products = productsAdapter.GetProducts();
foreach (Northwind.ProductsRow product in products)
   if (!product.Discontinued && product.UnitsInStock 

<= 25)
      product.UnitPrice *= 2;

// Update the products
productsAdapter.Update(products);

下面的编码示范如何使用DB直接模式删除一个产品,更新一个产品,然后添加一个新的产品:

C#
1
2
3
4
5
6
7
8
9
10
11
12
NorthwindTableAdapters.ProductsTableAdapter 

productsAdapter = new 

NorthwindTableAdapters.ProductsTableAdapter();

// Delete the product with ProductID 3
productsAdapter.Delete(3);

// Update Chai (ProductID of 1), setting the UnitsOnOrder to 

15
productsAdapter.Update("Chai", 1, 1, "10 boxes x 20 bags",
  18.0m, 39, 15, 10, false, 1);

// Add a new product
productsAdapter.Insert("New Product", 1, 1,
  "12 tins per carton", 14.95m, 15, 0, 10, false);
0
0
标签:ASP.NET DAL Data

.NET技术热门文章

    .NET技术最新文章

      最新新闻

        热门新闻