仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1160|回复: 7
打印 上一主题 下一主题

[学习教程] MSSQL网站制作之利用ADO.NET轻松利用数据库(二)

[复制链接]
小妖女 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:33:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
每个Rows_log_event中包含event_type,可选值为WRITE_ROWS_EVENT、UPDATE_ROWS_EVENT、DELETE_ROWS_EVENT。从宏名字就能看出用途。ado|数据|数据库
起首,ADO.NET中利用了DataAdapter来处置与数据库的联机与脱机。事先开辟职员计划了DataAdapter是为了可以处置脱机数据,便利操纵,关于这一点,只需挪用其Fill()办法便可,这时候会在DataSet中创立一个新的名为“Table“的DataTable.要从头指命名可用DataAdapter.Fill(DataSet,“Tabelname“)。此时connection也封闭了。DataAdapter既能够用来提交查询,并将了局存储到DataSet中,也能够用来向数据库传送变动。仅仅利用其Update办法便可到达向数据库提交存储地DatSet中的变动。

DataAdapter将查询的了局存储在DataSet或DataTable工具中,当实行这一历程的时分,DataAdapter利用了一个Command来与数据库通信,并在外部利用了DataReader来猎取查询了局,最初才将了局复制到DataSet新行中往。这也是Fill的历程。假如有两个DataAdapter工具,都利用不异的Connection工具,在创立的时分就会创立两个Connection工具,而不是统一个,这类情形的办理计划是:


SqlConnectioncon=newSqlConnection("server=localhost;database=Northwind;Trusted_Connection=Yes;")
SqlDataAdapterda=newSqlDataAdapter("selectCategoryID,DescriptionfromCategories",con);
SqlDataAdapterda=newSqlDataAdapter("selectCategoryID,DescriptionfromCustomers",con);

而不是将查询字符串,独自写成一行。

偶然候大概其实不但愿DataSet中的架构与数据库中的架构不异,这类情形的办理计划之一是能够接纳别号的办法,即selectidasProductID,amountasProductAmountfromproduct;别的一种办理计划就是利用DataAdapter供应的TableMappings汇合机制,经由过程它就能够将查询了局映照到DataSet布局中,这类办法更便利,更天真。TableMappings属性前往一个DataTableMappingsCollection工具,个中包括了一组DataTableMappings,只需DataSet中响应的表称号与数据库中的表名不异,便可以利用它来创立一个映照(DataSet中能够有多个表)。TableMappings里另有一个ColumnMappings属性,其用法与TableMappings类似。其道理是DataAdapter从数据库读取数据后,使用DataReader从了局会合猎取列称号,有一点出格要注重,即只能猎取列称号而没法猎取表称号,DataAdapter事前假定表称号为Table,接着碰到映照语句则举行表映照。不说了,看代码:

DataColumnMappingcolMap;
SqlConnectioncon=newSqlConnection("server=localhost;database=Northwind;Trusted_Connection=Yes;");
SqlDataAdapterda=newSqlDataAdapter("selectCategoryID,DescriptionfromCategories",con);
DataSetds=newDataSet();

DataTableMappingtblMap=da.TableMappings.Add("Table","Ca");//这里Table为关头,映照表名为Ca

colMap=tblMap.ColumnMappings.Add("CategoryID","ID");//映照列表
colMap=tblMap.ColumnMappings.Add("Description","形貌");
//Response.Write(tblMap.DataSetTable.ToString());
da.Fill(ds);
DataTabledt=ds.Tables["Ca"];//这里是映照后的表名,假如仍为数据库的表名,则有效,出格注重
this.DataGrid1.DataSource=dt;
this.DataGrid1.DataBind();

运转代码后就会发明DataGrid1上的列名为ID和形貌(^_^)

(注:利用DataTableMapping之前要前导进名空间System.Data.Common;)

还可使用AddRange办法来简化表和列的映照:(一些代码同下面)

.......
DataTableMappingtblMap=da.TableMappings.Add("Table","Ca");DataColumnMapping[]colMapArray=newDataColumnMapping[]{newDataColumnMapping("CategoryID","产品号"),newDataColumnMapping("Description","形貌")};tblMap.ColumnMappings.AddRange(colMapArray);
......

这类映照干系只能从数据库中读取展现给用户,假如要将映照后的Table的变动提交给数据库,这时候库发明个中列与库中列分歧,便会产生非常,DataAdapter同时也供应了MissingMappingAction属性来处置。

DataAdapter1.MissingMappingAction=MissingMappingAction.Passthrough/Ignore/Error

它承受MissingMappingAction的列举值,Passthrough这个值暗示假如在库中找不到与DataSet中不异列的话,就将此列映照到库中,Ignore列举值暗示疏忽示呈现的列,Error暗示找不到响应的列则抛出非常。

分页:

分页在使用中是常有的事,而DataAdapter自己也供应了分页的复杂功效,如:DataAdapter1.Fill(dataset,startrow,rownum,“tablename“)这类功效用于数据量较小的查询就能够,但当有大批数据的时分,就会发明这类分页的成绩的存在。它的道理是假设有一百行数据,分红十页,每页十行,当猎取每页的时分,前往前10行,再接着,第二页,删除前10行而猎取接下的10行,在这一次中,只是为了猎取10行数据,但数据库却前往了20行,依此类推,第10页的时分就会前往100行,而DataAdapter自己就帮我们删除90行,由于我们看上往前往的仍是10行,这类功能太低。因而本篇持续先容别的一种功能较高的分页办法。实践上这类分页办法是将上一页最初一行的键值存储上去,间接在SQL语句中就过滤失落了,不象后面那种到DataAdapter这边才过滤失落。例:

con=newSqlConnection("server=localhost;database=Northwind;Trusted_Connection=Yes;");
da=newSqlDataAdapter("selecttop50CustomerID,CompanyNamefromCustomerswhere CustomerID>BOTTM",con);
ds=newDataSet();
da.Fill(ds,"Categories");
this.DataGrid1.DataSource=ds.Tables["Categories"];this.DataGrid1.DataBind();
con.Close();

这里假设上一页最初一个键值为”BOTTM”,能够将它用参数替换失落,如许就查出了在BOTTM以后的50行。这类办法完成复杂效力也高。
InnoDB数据表的索引,与InnoDB数据表相比,在InnoDB数据表上,索引对InnoDB数据表的重要性要大得多。在InnoDB数据表上,索引不仅会在搜索数据记录时发挥作用,还是数据行级锁定机制的苊、基础。
若天明 该用户已被删除
沙发
发表于 2015-1-19 16:25:29 | 只看该作者
Mirror可以算是SQLServer的Dataguard了。但是能不能被大伙用起来就不知道了。
小魔女 该用户已被删除
板凳
发表于 2015-1-28 08:28:59 | 只看该作者
其中最有名的应该是row_number了。这个终于解决了用临时表生成序列号的历史,而且SQLServer2005的row_number比Oracle的更先进。因为它把Orderby集成到了一起,不用像Oracle那样还要用子查询进行封装。
深爱那片海 该用户已被删除
地板
发表于 2015-2-5 20:14:32 | 只看该作者
不过话说回来了,绝大多数的性能优化准则与对sqlserver存储的结构理解息息相关
金色的骷髅 该用户已被删除
5#
发表于 2015-3-3 21:06:52 | 只看该作者
where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
因胸联盟 该用户已被删除
6#
发表于 2015-3-11 13:47:10 | 只看该作者
一个百万级别的基本信息表A,一个百万级别的详细记录表B,A中有个身份证id,B中也有身份id;先要找出A中在B的详细记录。
爱飞 该用户已被删除
7#
发表于 2015-3-18 21:23:33 | 只看该作者
我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过!
再见西城 该用户已被删除
8#
发表于 2015-3-26 18:53:30 | 只看该作者
对一张百万级别的表建游标,同时又没有什么过滤条件,取得游标效率是如果直接SQL查询百万条数据;如果再对每条记录做处理,耗时将更长。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 19:44

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表