aspnet创建一个数据层(编辑修改稿)内容摘要:
Set 设计器,在 ProductsTableAdapter 上按右鼠标,然后选择 “ 添加查 询 (Add Query)”。 图 14: 在 TableAdapter 上按右鼠标,选择 “ 添加查询 ” 向导首先会问我们是否要通过一个 adhoc SQL 语句还是生成一个新存储过程或者使用现有存储过程来访问 数据库。 让我们还是选择使用 SQL 语句。 接着,向导会问我们使用什么类型的 SQL 查询。 因为我们想返回属 于 指定分类的所有产品,我们需要写一个返回数据行的 SELECT 语句。 图 15: 选择生成一个返回数据行的 SELECT 语句 下一步是定义用于访问数据的 SQL 查询语句。 因为我们只想返回属于指定分类的那些产品,我重 用 GetProducts()里的 SELECT语句,但添加了一个 WHERE 子 句:WHERE CategoryID = @CategoryID。 其中的 @CategoryID 参数 向 TableAdapter配置向导表示我们正在生成的方法将需要一个对应类 (即,可为 nullnullable的整数 )的输入 参数。 图 16: 输入一个只返回指定分类的产品的查询 在最后一步,我们可以选择使用何种数据访问模式,还可以定制生成的方法的名字。 对应于 Fill 模式,让我们把名字改成 FillByCategoryID,对返回 DataTable模式的方法 (GetX方法 ),让我们来用 GetProductsByCategoryID 这个名字。 图 17: 为 TableAdapter 的方法选择名字 在结束向导后, DataSet 设计器包含了这些新的 TableAdapter 的方法。 图 18: 通过分类来查询产品 花点时间用同样的手法添加一个 GetProductByProductID(productID) 方法。 这些参数化的查询可以在 DataSet 设计器里直接测试。 在 TableAdapter 中的方法上按右鼠标,然后选择 “ 预 览数据 (Preview Data)”。 接着,输入对应参数的值,然后按 “ 预览 (Preview)”。 图 19: 属于饮料 (Beverages)类的那些产品列单 通过我们的 DAL 中的 GetProductsByCategoryID(categoryID)方法,我们就能设计一 个 网页来显示属于指定分类的那些产品。 下面这个例子显示了属于 Beverages(饮 料 )类 (CategoryID=1)的所有产品。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 %@ Page Language=C AutoEventWireup=true CodeFile= Inherits=Beverages % !DOCTYPE html PUBLIC //W3C//DTD XHTML Transitional//EN html xmlns= head runat=server titleUntitled Page/title link href= rel=stylesheet type=text/css / /head body form id=form1 runat=server div h1Beverages/h1 p asp:GridView ID=GridView1 runat=server CssClass=DataWebControlStyle HeaderStyle CssClass=HeaderStyle / AlternatingRowStyle CssClass=AlternatingRowStyle / /asp:GridView /p /div /form /body /html C 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 using System。 using。 using。 using。 using。 using。 using。 using。 using。 using。 using NorthwindTableAdapters。 public partial class Beverages : { protected void Page_Load(object sender, EventArgs e) { ProductsTableAdapter productsAdapter = new ProductsTableAdapter()。 = (1)。 ()。 } } 图 20: 属于 Beverages(饮料 )类的所有产品显示 第四步:插入,更新和删除数据 常用的插入,更新和删除数据的模式有两种。 第一种模式,我称之为 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的 InsertCommand, UpdateCommand, 和 DeleteCommand 属性来向数据库发出对应 的 INSERT, UPDATE 和 DELETE 命令。 你可以在 DataSet 设计器里点击 TableAdapter,然后在属性窗口查看和改 动InsertCommand, UpdateCommand, 和 DeleteCommand 属性。 (确 认你选择了TableAdapter,并且 ProductsTableAdapter 对象是属性窗口中下拉框里被选中的项 ) 图 23: TableAdapter 包含 InsertCommand, UpdateCommand, 和 DeleteCommand等属性 想查看或改动这些数据库命令的属性的话,点击 CommandText 子属性,这会启动对应的查询 生成器。 图 24: 在查询生成器里配置插入,更新,删除语句 下面的编码例子示范了如何使用批更新模式来把 没被终止的,且库存等于或少于25个单元的产品的价格加 倍: C 1 2 3 4 5 6 7 8 9 10 11 12 productsAdapter = new ()。 // For each product, double its price if it is not discontinued and // there are 25 items in stock or less products = ()。 foreach ( product in products) if (! amp。 amp。 = 25) *= 2。 // Update the products (products)。 下面的编码示范如何使用 DB 直接模式删除一个产品,更新一个产品,然后添加一个新的产品: C 1 2 3 4 5 6 7 8 9 10 11 productsAdapter = new ()。 // Delete the product with ProductID 3 (3)。 // Update Chai (ProductID of 1), setting the UnitsOnOrder to 12 15 (Chai, 1, 1, 10 boxes x 20 bags, , 39, 15, 10, false, 1)。 // Add a new product (New Product, 1, 1, 12 tins per carton, , 15, 0, 10, false)。 创建自定义的插入,更新,删除方法 用 DB直接法生成的 Insert(), Update(),和 Delete()方法有时 候会感觉有点不方便,特别是当数据表有许多字段的时候。 看一下前面这个编码例子,没有IntelliSense 的帮 助的话,不是很清楚 Products 表的哪个字段对 应 Update()和 Insert()方法中的哪个输入参数。 有时候我们只要更新一到二个字 段或 者需要一个自定义的 Insert()方法,这个方法需要返回刚插入的记录 的IDENTITY(自增 )的字段值。 要创建这样的自定义方法,回到 DataSet 设计器。 在 TableAdapter 上按右鼠标,选择 “ 添加查询 ” ,然后回 到 TableAdapter 配置向导。 在第二屏上,我们可以指明要生成的查询的类型。 让我们生成一个添加新 的 product(产品 )。aspnet创建一个数据层(编辑修改稿)
相关推荐
完全公开 ,没有访问限制。 internal: 在同一命名空间内可以访问。 评分标准:答对 1题 2分, 2 题 5 分, 3题 7分。 全对 10 分。 (送分题 ) 4. 解 1: select top 10 * from A where id not in (select top 30 id from A) 解 2: select top 10 * from A where id
制作自己的 native安装程序 如果我们要把自己的 .NET 程序发布到目标机器上,同时我们不确定该目标机器是否已经安装了 .NET Framework, 那我们就需要自己设计一段 unmanaged代码,来判断目标机器是否安装了 .NET Framework, 如果没有,则运行 安装 .NET Framework, 然后利用Windows Installer安装自己的程序。 在
} return TodayWeather。 } } } class Program { static void Main(string[] args) { Point[] tmpPoints = new Point[10]。 for (int i = 0。 i。 i++) { tmpPoints[i] = new Point(i, (i))。 } Points tmpObj = new
符型转换 转为字符串 (n)。 //生成 12, (C)。 //生成 ¥ 12, (e)。 //生成 +004 (f4)。 //生成 (x)。 //生成 3039 (16 进制 ) (p)。 //生成 1,234,% 变量 .Length 数字型 以下为引用的内容: 取字串长度: 如: string str=中国。 int Len =。 //Len 是自定义变量, str 是求测的字串的变量名
void DGzf_ItemDataBound(object sender, e) { if (!=) { ( onmouseout,=\+[BACKGROUNDCOLOR]+\)。 ( onmouseover,=\+ EFF3F7+\)。 } } < ASP:TEMPLATECOLUMN visible=False sortexpression=demo headertext=ID> <
entArgs e) { if (!) { = aaaaaaaaaaaaa。 ()。 //或 ()。 } } 当 () 运行显示出来的效果 () 运行显示出来的效果 三 . %=% 这种形式实际上是由 %%扩展而来的 .等价于 :(%%)这种形式 (不标准,但能看明白 ),它其实也可以看成是一种绑定 . aspx代码 : 复制 保存 label