|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
中间码是基于一个虚拟机器。源代码是最高层的,理论上从源代码开始直接编译成本地码能提供最大优化的。而中间码只能是转译成本地码,效率上难免受到损耗。根据虚拟机器所设定的体系结构的特点,和本地机器的差异的多少。asp.net|创立|会见|数据 第四步:拔出,更新和删除数据
经常使用的拔出,更新和删除数据的形式有两种。第一种形式,我称之为DB间接形式,触及的办法被挪用时,会向数据库里收回一个INSERT,或UPDATE,或DELETE命令,这个命令只对单个数据库纪录做操纵。象如许的办法一样平常承受一系列对应于拔出,更新或删除的值的标量参数(比如整数,字符串,布尔值,日期工夫等)。比如,用这个形式来操纵Products表的话,删除办法会承受一个整数参数,代表所必要删除的纪录的ProductID,而拔出办法则会承受一个对应于ProductName的字符串,对应于UnitPrice的decimal值,对应于UnitsOnStock的整数等等。
1:每一个拔出,更新,和删除哀求都被立即发送到数据库
别的一个形式,我称之为批更新形式,能够在一个办法挪用里更新全部DataSet,大概全部DataTable,或者一个DataRow汇合。在这个形式里,开辟职员在一个DataTable中删除,拔出,修正DataRow,然后把这些DataRow或全部DataTable传给一个更新办法。然后这个办法会轮循传进的DataRow们,经由过程DataRow的RowState属性属性来决意这些DataRow是不是被修改过,或是新纪录,或是被删除的纪录,然后为每一个纪录收回符合的数据库命令。
2:在Update办法挪用以后,一切的变化都与数据库同步了
在默许情况下,TableAdapter接纳批更新形式,但也撑持DB间接形式。由于我们在创立我们的TableAdapter时的初级选项当选择了“天生拔出,更新,和删除语句”这个选项,ProductsTableAdapter包括了一个Update()办法,该办法完成了批更新形式。详细地说,TableAdapter包括了一个Update()<昀搏B???oЁCODE>办法,能够传进一个强范例的DataSet,大概一个强范例的DataTable,大概一个和多个DataRow。假设你在一入手下手创立TableAdapter时的选项中没有扫除“天生DB间接办法(GenerateDBDirectMethods)”复选框的话,DB间接模式也会经由过程Insert(),Update()和Delete()办法来完成。
这两种数据修正形式都利用了TableAdapter的InsertCommand,UpdateCommand,和DeleteCommand属性来向数据库收回对应的INSERT,UPDATE和DELETE命令。你能够在DataSet计划器里点击TableAdapter,然后在属性窗口检察和改动InsertCommand,UpdateCommand,和DeleteCommand属性。(确认你选择了TableAdapter,而且ProductsTableAdapter工具是属性窗口中下拉框里被选中的项)
3:TableAdapter包括InsertCommand,UpdateCommand,和DeleteCommand等属性
想检察或修改这些数据库命令的属性的话,点击CommandText子属性,这会启动对应的查询天生器。
4:在查询天生器里设置拔出,更新,删除语句
上面的编码例子树模了怎样利用批更新形式来把没被停止的,且库存即是或少于25个单位的产物的代价加倍:
C#- NorthwindTableAdapters.ProductsTableAdapterproductsAdapter=newNorthwindTableAdapters.ProductsTableAdapter();//Foreachproduct,doubleitspriceifitisnotdiscontinuedand//thereare25itemsinstockorlessNorthwind.ProductsDataTableproducts=productsAdapter.GetProducts();foreach(Northwind.ProductsRowproductinproducts)if(!product.Discontinued&&product.UnitsInStock<=25)product.UnitPrice*=2;//UpdatetheproductsproductsAdapter.Update(products);
复制代码 上面的编码树模怎样利用DB间接形式删除一个产物,更新一个产物,然后增加一个新的产物:
C#- NorthwindTableAdapters.ProductsTableAdapterproductsAdapter=newNorthwindTableAdapters.ProductsTableAdapter();//DeletetheproductwithProductID3productsAdapter.Delete(3);//UpdateChai(ProductIDof1),settingtheUnitsOnOrderto15productsAdapter.Update("Chai",1,1,"10boxesx20bags",18.0m,39,15,10,false,1);//AddanewproductproductsAdapter.Insert("NewProduct",1,1,"12tinspercarton",14.95m,15,0,10,false);
复制代码 创立自界说的拔出,更新,删除办法
用DB间接法天生的Insert(),Update(),和Delete()办法偶然候会感到有点不便利,出格是当数据表有很多字段的时分。看一下后面这个编码例子,没有IntelliSense的帮助的话,不是很分明Products表的哪一个字段对应Update()和Insert()办法中的哪一个输出参数。偶然候我们只需更新一到二个字段大概必要一个自界说的Insert()办法,这个办法必要前往刚拔出的纪录的IDENTITY(自增)的字段值。
要创立如许的自界说办法,回到DataSet计划器。在TableAdapter上按右鼠标,选择“增加查询”,然后回到TableAdapter设置导游。在第二屏上,我们能够指明要天生的查询的范例。让我们天生一个增加新的product(产物)纪录,然后前往新增加纪录的ProductID值的办法。因而,选择天生一个插进(INSERT)型查询。
5:创立一个给Products表增加新纪录的办法
下一个屏显现InsertCommand的CommandText属性。在查询语句前面,增加一个SELECTSCOPE_IDENTITY()的查询,这查询将前往以后统一个操纵局限内插进IDENTITY字段的最初谁人identity值。(详见手艺文档中关于SCOPE_IDENTITY()的内容和为何你应当利用SCOPE_IDENTITY()而不是@@IDENTITY)。确认在增加SELECT语句前,你在INSERT语句前面添一个分号。
6:增加查询前往SCOPE_IDENTITY()值
最初,把这个新办法定名为InsertProduct。
7:放办法名字设成InsertProduct
当你前往DataSet计划器时,你将看到ProductsTableAdapter多了一个新的方法,InsertProduct。假如对应Products表的每一个字段,这个新的办法没有对应的参数的话,十分大概的缘故原由是,你忘了给INSERT语句的开头增加一个分号(semi-colon)。从头配置InsertProduct办法,确认在INSERT和SELECT语句间有个分号。
在默许情况下,拔出办法挪用的长短查询(non-query)办法,意即,他们只前往受影响的纪录数。可是,我们想要让InsertProduct办法前往一个查询前往的值,而不是受影响的纪录数。这能够把InsertProduct办法的ExecuteMode属性改成Scalar(标量)来完成。
8:把ExecuteMode属性改成Scalar
上面的编码树模怎样利用这个新的InsertProduct办法:
C#- NorthwindTableAdapters.ProductsTableAdapterproductsAdapter=newNorthwindTableAdapters.ProductsTableAdapter();//Addanewproductintnew_productID=Convert.ToInt32(productsAdapter.InsertProduct("NewProduct",1,1,"12tinspercarton",14.95m,10,0,10,false));//Onsecondthought,deletetheproductproductsAdapter.Delete(new_productID);
复制代码 效率会有不少的变化。而实际上java是基于堆栈机器来设计,这和我们常见的基于寄存器的本地机器是差异比较大的。总体来说,这是一种虚拟机的设计思路。 |
|