因胸联盟 发表于 2015-1-16 22:33:01

MSSQL网页编程之浅谈DataSet

因此,我们的第一个“米”,就是二进制日志binlog必须是rowbased的。在rowbase下,二进制日志binlog同时记录了更新前后的整行记录。
   DataSet是ADO.NET开辟职员为便利数据处置开辟出来的,是数据的汇合,是为办理DataReader的缺点计划的,DataReader数据处置速率快,但它是只读的, 并且一旦移到下一行,就不克不及检察上一行的数据,DataSet则能够自在挪动指针。DataSet的数据是与数据库断开的。DataSet还可用于多层使用程序中,假如使用程序运转在两头层的营业工具中来会见数据库,则营业工具需将脱机数据布局传送给客户使用程序。

  DataSet的功效:扫瞄、排序、搜刮、过滤、处置分级数据、缓存变动等。还能够与XML数据交换。DataSet中可包含多个DataTable,可将多个查询布局存到一个DataSet中,便利操纵,而DataTable中又包含多个DataRow、DataColumn,可经由过程这些DataRow、DataColumn来检察、操纵个中的数据,而需将操纵了局前往给数据库的话,则能够挪用DataAdapter的Update办法。

  DataSet的操纵:
DataSetds=newDataSet();
DataTabledt=newDataTable("newTable");
ds.Tables.Add(dt);DataSetds=newDataSet();
DataTabledt=ds.Tables.Add("newTable");
上述两种办法都能够在DataSet中增加一个DataTable,看必要而举行选择。增加DataTable后,需向个中增加行和列。
DataSetds=newDataSet();
DataTabledt=ds.Tables.Add("newTables");
DataColumncol=dt.Columns.Add("newColumn",typeof(int));
col.AllowDBNull=false;
col.MaxLength=4;
col.Unique=true;

上述代码向DataSet中的DataTable中增加名为”newColumn”,范例为int且不为空,最年夜长度为4和独一性为真的列。
dt.PrimaryKey=newDataColumn[]{dt.Columns["ID"]}
这段代码是持续下面代码的,为一个DataTable中增加一个主键列,主键列是一个数据组,若有多个主键,只需在数组中增加一个列便可。以下:
dt.PrimaryKey=newDataColumns[]{dt.Columns["OrderID"],dt.Columns["ProductID"]}
增加外键:
ForeignKeyConstraintfk;
fk=newForeignKeyConstraint(ds.Tables["Customers"].Columns["CustomerID"],ds.Tables["Orders"].Columns["CustomerID"]);
ds.Tables["Orders"].Constraints.Add(fk);
//上述代码假设已为Cusomers表和Orders创立了主键,此句为增加外键束缚。
上述是依据Customers表和Orders表的CustomerID来创立束缚。

上面先容修正DataRow中的内容:
DataRowdr=ds.Tables["Customer"].Rows.Find("ANTON");
if(dr==null)

else
{
dr.BeginEdit();
dr["CompanyName"]="newValue";
dr["ContactName"]="newValue2";
dr.EndEdit();
}
//下面代码经由过程Row汇合的Find办法来在DataTable中的行举行定位,找到"ANTON"行,再修正"ANTON"行中CompanyName列和ContactName列的值。经由过程BeginEdit和EndEdit来缓存对行的修正,还可挪用CancelEdit为作废修正。
判别某列是不是为空值:
DataRowdr=ds.Tables["Customers"].Rows.Find("aaa");
if(dr.IsNull("ContactName");
..
else
dr["ContactName"]=DBNull.Value
//这里判别ContactName列是不是为空,假如不是则为其赋空值,呵,很无厘头的做法,这里只为演示为列赋空值的做法。
删除DataRow:

有两种办法能够删除DataRow,Delete办法和Remove办法和RemoveAt办法。其区分是Delete办法实践上不是从DataTable中删撤除一行,而是将其标记为删除,仅仅是做个暗号,而Remove办法则是真实的从DataRow中删除一行,RemoveAt办法是基本行的索引来删除。列:
DataRowdr=ds.Tables["table"].Rows.Find("a");
ds.Tables["table"].Remove(dr);

ds.Tables["table"].Remove(index);
//dr为"a"地点的行,查出后将其删除,index为"a"地点的索引号。关于DataSet中的其用法,参照MSDN根据Ambrose所说,Sakila来自一种叫SiSwati的斯威士兰方言,也是在Ambrose的家乡乌干达附近的坦桑尼亚的Arusha的一个小镇的名字。

透明 发表于 2015-1-19 16:25:45

分区表是个亮点!从分区表也能看出微软要做大作强SQLServer的信心。资料很多,这里不详细说。但是重点了解的是:现在的SQLServer2005的表,都是默认为分区表的。因为它要支持滑动窗口的这个特性。这种特性对历史数据和实时数据的处理是很有帮助的。

乐观 发表于 2015-1-27 10:12:27

多加的系统视图和实时系统信息这些东西对DBA挑优非常有帮助,但是感觉粒度还是不太细。

飘灵儿 发表于 2015-2-5 07:00:22

分区表效率问题肯定是大家关心的问题。在我的试验中,如果按照分区字段进行的查询(过滤)效率会高于未分区表的相同语句。但是如果按照非分区字段进行查询,效率会低于未分区表的相同语句。

老尸 发表于 2015-2-11 08:00:50

只能告诉你,学好数据库语言和原理,多见识几种数据库软件,比一棵树上吊死要好。

小女巫 发表于 2015-3-2 00:18:12

总感觉自己还是不会SQL

不帅 发表于 2015-3-11 01:27:53

你可以简单地认为适合的就是好,不适合就是不好。

小魔女 发表于 2015-3-17 18:09:49

入门没那么困难,精通没那么容易

海妖 发表于 2015-3-24 18:34:00

一直以来个人感觉SQLServer的优化器要比Oracle的聪明。SQL2005的更是比2k聪明了不少。(有次作试验发现有的语句在200万级时还比50万级的相同语句要快show_text的一些提示没有找到解释。一直在奇怪。)
页: [1]
查看完整版本: MSSQL网页编程之浅谈DataSet