ASP.NET 2.0数据教程之一:创建一个数据访问层
[2] ASP.NET 2.0数据教程之一:创建一个数据访问层
[3] ASP.NET 2.0数据教程之一:创建一个数据访问层
[4] ASP.NET 2.0数据教程之一:创建一个数据访问层
[5] ASP.NET 2.0数据教程之一:创建一个数据访问层
[6] ASP.NET 2.0数据教程之一:创建一个数据访问层
[7] ASP.NET 2.0数据教程之一:创建一个数据访问层
[8] ASP.NET 2.0数据教程之一:创建一个数据访问层
[9] ASP.NET 2.0数据教程之一:创建一个数据访问层
[10] ASP.NET 2.0数据教程之一:创建一个数据访问层
[11] ASP.NET 2.0数据教程之一:创建一个数据访问层
[12] ASP.NET 2.0数据教程之一:创建一个数据访问层
[13] ASP.NET 2.0数据教程之一:创建一个数据访问层
系列文章导航:
ASP.NET 2.0数据教程之四:使用ObjectDataSource展现数据
ASP.NET 2.0数据教程之六:编程设置ObjectDataSource的参数值
ASP.NET 2.0数据教程之七:使用DropDownList过滤的主/从报表
ASP.NET 2.0数据教程之八:使用两个DropDownList过滤的主/从报表
ASP.NET 2.0数据教程之十:使用 GridView 和DetailView实现的主/从报表
ASP.NET 2.0数据教程之十一:基于数据的自定义格式化
ASP.NET 2.0数据教程之十二:在GridView控件中使用TemplateField
创建自定义的插入,更新,删除方法
用DB直接法生成的Insert()
, Update()
,和Delete()
方法有时 候会感觉有点不方便,特别是当数据表有许多字段的时候。看一下前面这个编码例子,没有IntelliSense的帮 助的话,不是很清楚Products
表的哪个字段对 应Update()
和Insert()
方法中的哪个输入参数。有时候我们只要更新一到二个字 段或者需要一个自定义的Insert()
方法,这个方法需要返回刚插入的记录 的IDENTITY
(自增)的字段值。
要创建这样的自定义方法,回到DataSet设计器。在TableAdapter上按右鼠标,选择“添加查询”,然后回 到TableAdapter配置向导。在第二屏上,我们可以指明要生成的查询的类型。让我们生成一个添加新 的product(产品)记录,然后返回新添加记录的ProductID
值的方法。因此,选择生成一个插 入(INSERT
)型查询。
图25: 创建一个给Products
表添加新记录的方法
下一个屏显示InsertCommand
的CommandText
属性。在查询语句后面,增添一 个SELECT SCOPE_IDENTITY()
的查询,这查询将返回当前同一个操作范围内插 入IDENTITY
字段的最后那个identity 值。(详见技术文档中关 于SCOPE_IDENTITY()
的内容以及为什么你应该http://weblogs.sqlteam.com/travisl/archive/2003/10/29/405.aspx)。确认在添加SELECT
语句前,你在INSERT
语句后面添一个分号 。
图26: 增添查询返回SCOPE_IDENTITY()
值
最后,把这个新方法命名为InsertProduct
。
图 27:放方法名字设成InsertProduct
当你返回DataSet设计器时,你将看到ProductsTableAdapter
多了一个新的方 法,InsertProduct
。如果对应Products
表的每个字段,这个新的方法没有对应的参数的话,非常可能的原因是,你忘了给INSERT
语句的结尾添加一个分号(semi-colon)。重新配 置InsertProduct
方法,确认在INSERT
和SELECT
语句间有个分号。
在默认情形下,插入方法调用的是非查询(non-query)方法,意即,他们只返回受影响的记录数。但是,我们想要让InsertProduct
方法返回一个查询返回的值,而不是受影响的记录数。这可以把InsertProduct
方法的ExecuteMode
属性改 成Scalar
(标量)来实现。
图 28:把ExecuteMode
属性改成Scalar
下面的编码示范如何使用这个新的InsertProduct
方法:
C# | |
1 2 3 4 5 6 7 |
NorthwindTableAdapters.ProductsTableAdapter productsAdapter = new NorthwindTableAdapters.ProductsTableAdapter(); // Add a new product int new_productID = Convert.ToInt32(productsAdapter.InsertProduct("New Product", 1, 1, "12 tins per carton", 14.95m, 10, 0, 10, false)); // On second thought, delete the product productsAdapter.Delete(new_productID); |