仓酷云

标题: MSSQL网页编程之ADO.NET念书条记系列之------DataSet对... [打印本页]

作者: 若相依    时间: 2015-1-16 22:37
标题: MSSQL网页编程之ADO.NET念书条记系列之------DataSet对...
上面我们说了DML的闪回方案。但对于DDL却无能为力,对于大多数的DDL,即使是rowbase格式,二进制日志binlog中仍只记录语句本身。对于删表操作,只记录一个语句droptablet。仅凭这句话,无法还原表的数据。ado|条记|工具
1、特性先容

1、处置脱机数据,在多层使用程序中很有效。

2、能够在任什么时候候检察DataSet中恣意行的内容,同意修正查询了局的办法。

3、处置分级数据

4、缓存变动

5、XML的完全性:DataSet工具和XML文档几近是可交换的。

2、利用先容

1、创立DataSet工具:DataSetds=newDataSet("DataSetName");

2、检察挪用SqlDataAdapter.Fill创立的布局

da.Fill(ds,"Orders");

DataTabletbl=ds.Table[0];

foreach(DataColumncolintbl.Columns)

Console.WriteLine(col.ColumnName);

3、检察SqlDataAdapter前往的数据

①、DataRow工具

DataTabletbl=ds.Table[0];

DataRowrow=tbl.Row[0];

Console.WriteLine(ros["OrderID"]);

②、反省存储在DataRow中的数据

DataTabletbl=row.Table;

foreach(DataColumncolintbl.Columns)

Console.WriteLine(row[col]);

③、反省DatTable中的DataRow工具

foreach(DataRowrowintbl.Rows)

DisplayRow(row);

4、校验DataSet中的数据

①、校验DataColumn的属性:ReadOnly,AllowDBNull,MaxLength,Unique

②、DataTable工具的Constrains汇合:UiqueConstraints,Primarykey,ForeignkeyConstraints

一般不用决心往创立ForeignkeyConstraints,由于当在DataSet的两个DataTable工具之间创立干系时会创立一个。

③、用SqlDataAdapter.Fill形式来检索形式信息

5、编写代码创立DataTable工具

①、创立DataTable工具:DataTabletbl=newDataTable("TableName");

②、将DataTable增加到DataSet工具的Table汇合

DataSetds=newDataSet();

DataTabletbl=newDataTable("Customers");

ds.Tables.Add(tbl);

 

DataSetds=newDataSet();

DataTabletbl=ds.Tables.Add("Customers");

DataTable工具只能存在于最多一个DataSet工具中。假如但愿将DataTable增加到多个DataSet中,就必需利用Copy办法或Clone办法。Copy办法创立一个与原DataTable布局不异而且包括不异行的新DataTable;Clone办法创立一个与原DataTable布局不异,但没有包括任何行的新DataTable。

③、为DataTable增加列

DataTabletbl=ds.Tables.Add("Orders");

DataColumncol=tbl.Columns.Add("OrderID",typeof(int));

col.AllowDBNull=false;

col.MaxLength=5;

col.Unique=true;

tbl.PrimaryKey=newDataColumn[]{tbl.Columns["CustomersID"]};

当设置主键时,AllowDBNull主动设置为False;

④、处置主动增量列

DataSetds=newDataSet();

DataTabletbl=ds.Tables.Add("Orders");

DataColumncol=tbl.Columns.Add("OrderID",typeof(int));

col.AutoIncrement=true;

col.AutoIncrementSeed=-1;

col.AutoIncrementStep=-1;

col.ReadOnly=true;

⑤、增加基于表达式的列

tbl.Columns.Add("ItemTotal",typeof(Decimal),"Quantity*UnitPrice");

6、修正DataTable内容

①、增加新DataRow

DataRowrow=ds.Tables["Customers"].NewRow();

row["CustomerID"]="ALFKI";

ds.Tables["Customers"].Rows.Add(row);

 

object[]aValues={"ALFKI","Alfreds","Anders","030-22222"};

da.Tables["Customers"].LoadDataRow(aValues,false);

②、修正以后行

修正行的内容逼供内不会主动修正数据库中响应的内容,对行所做的修正被视为是随后将利用SqlDataAdapter工具来提交交给数据库的待定的变动。

DataRowrowCustomer;

rowCustomer=ds.Tables["Custoemrs"].Rows.Find("ANTON");

if(rowCustomer==null)

//没有查找客户

else

{

rowCustomer["CompanyName"]="NewCompanyName";

rowCustomer["ContactName"]="NewContactName";

}

 

//保举利用这类体例

DataRowrowCustomer;

rowCustomer=ds.Tables["Custoemrs"].Rows.Find("ANTON");

if(rowCustomer==null)

//没有查找客户

else

{

rowCustomer.BeginEdit();

rowCustomer["CompanyName"]="NewCompanyName";

rowCustomer["ContactName"]="NewContactName";

rowCustomer.EndEdit();

}

 

//null暗示不修正该列的数据

obejct[]aCustomer={null,"NewCompanyName","NewContactName",null}

DataRowrowCustomer;

rowCustomer=ds.Tables["Customers"].Rows.Find("ALFKI");

rowCustomer.ItemArray=aCustomer;

③、处置DataRow的空值

//检察是不是为空

DataRowrowCustomer;

rowCustomer=ds.Tables["Customers"].Rows.Find("ALFKI");

if(rowCustomer.IsNull("Phone"))

Console.WriteLine("ItsNull");

else

Console.WriteLine("ItsnotNull");

 

//付与空值

rowCustomer["Phone"]=DBNull.Value;

④、删除DataRow

DataRowrowCustomer;

rowCustomer=ds.Tables["Customers"].Rows.Find("ALFKI");

rowCustomer.Delete();

⑤、扫除DataRow

DataRowrowCustomer=ds.Tables["Customers"].Rows.Find("ALFKI");

rowCustomer.ItemArray=aCustomer;

da.Tables["Customers"].Remove(rowCustomer);

大概

ds.Tables["Customers"].RemoveAt(intIndex);

⑥、利用DataRow.RowState属性:Unchanged,Detached,Added,Modified,Deleted

privatevoidDemonstrateRowState()

{
//RunafunctiontocreateaDataTablewithonecolumn.
DataTablemyTable=MakeTable();
DataRowmyRow;

//CreateanewDataRow.
myRow=myTable.NewRow();
//Detachedrow.
Console.WriteLine("NewRow"+myRow.RowState);

myTable.Rows.Add(myRow);
//Newrow.
Console.WriteLine("AddRow"+myRow.RowState);

myTable.AcceptChanges();
//Unchangedrow.
Console.WriteLine("AcceptChanges"+myRow.RowState);

myRow["FirstName"]="Scott";
//Modifiedrow.
Console.WriteLine("Modified"+myRow.RowState);

myRow.Delete();
//Deletedrow.
Console.WriteLine("Deleted"+myRow.RowState);
}

⑦、反省DataRow中的挂起变动

DataRowrowCustomer;

rowCustomer=ds.Tables["Customers"].Rows.Find("ALFKI");

rowCustomer["CompanyName"]="NewCompanyName";

stringstrNewCompanyName,strOldCompanyName;

Console.WriteLine(rowCustomer["CompanyName",DataRowVersion.Current]);

Console.WriteLine(rowCustomer["CompanyName",DataRowVersion.Original]);

3、属性办法事务先容

1、DataSet

①、属性

CaseSensitive:用于把持DataTable中的字符串对照是不是辨别巨细写。

DataSetName:以后DataSet的称号。假如不指定,则该属性值设置为"NewDataSet"。假如将DataSet内容写进XML文件,DataSetName是XML文件的根节点称号。

DesignMode:假如在计划时利用组件中的DataSet,DesignMode前往True,不然前往False。

HasErrors:暗示DataSet中的DataRow工具是不是包括毛病。假如将一批变动提交给数据库并将DataAdapter工具的ContinueUpdateOnError属性设置为True,则在提交变动后必需反省DataSet的HasErrors属性,以断定是不是有更新失利。

NameSpace和Prefix:指定XML定名空间和前缀

Relations:前往一个DataRelationCollection工具。

Tables:反省现有的DataTable工具。经由过程索引会见DataTable有更好的功能。

②、办法

AcceptChanges和RejectChanges:承受或保持DataSet中一切挂起变动。挪用AcceptChanges时,RowState属性值为Added或Modified的一切行的RowState属性都将被设置为UnChanged.任何标志为Deleted的DataRow工具将从DataSet中删除。挪用RejectChanges时,任何标志为Added的DataRow工具将会被从DataSet中删除,其他修正过的DatRow工具将前往前一形态。

Clear:扫除DataSet中一切DataRow工具。该办法比开释一个DataSet然后再创立一个不异布局的新DataSet要快。

Clone和Copy:利用Copy办法会创立与原DataSet具有不异布局和不异行的新DataSet。利用Clone办法会创立具有不异布局的新DataSet,但不包括任何行。

GetChanges:前往与原DataSet工具具有不异布局的新DataSet,而且还包括原DataSet中一切挂起变动的行。

GetXml和GetXmlSchema:利用GetXml办法失掉由DataSet的内容与她的架构信息转换为XML格局后的字符串。假如只但愿前往架构信息,可使用GetXmlSchema。

HasChange:暗示DataSet中是不是包括挂起变动的DataRow工具。

Merge:从另外一个DataSet、DataTable或现有DataSet中的一组DataRow工具载进数据。

ReadXml和WriteXml:利用ReadXml办法从文件、TextReader、数据流大概XmlReader中将XML数据载进DataSet中。

Reset:将DataSet前往为未初始化形态。假如想保持现有DataSet而且入手下手处置新的DataSet,利用Reset办法比创立一个DataSet的新实例好。

③、事务

MergeFailed:在DataSet的Merge办法产生一个非常时触发。

2、DataTable

①、属性

②、办法

③、事务

ColumnChanged:在列的内容被改动以后触发

ColumnChangding:在列的内容被改动之前触发

RowChanged,RowChanging,RowDeleted,RowDeleting。

3、DataColumn

①、属性

4、DataRow

①、属性

HasError:断定行是不是包括毛病。

Item:经由过程指定行的列数,列的称号或DataColumn工具自己,会见列的内容。

ItemArray:猎取或设置行中一切列的值。

RowError:前往一个包括行毛病信息的字符串。

RowState:前往DataRowState列举中的值来暗示行确当前形态。

Table:前往DataRow工具地点的DataTable。

②、办法

AcceptChanges和RejectChanges:提交和保持挂起变动。

BeginEdit、CancelEdit、EndEdit

ClearErrors:扫除DataRow中一切的毛病。

Delete:Delete办法实践上其实不从DataRow表的Row汇合中删除该DataRow。当挪用DataRow工具的Delete办法时,ADO.NET将该行标志为删除,以后挪用SqlDataAdapter工具的Update办法来删除其在数据库中对应的行。

假如但愿完全删除DataRow,能够挪用Delete办法,接着再挪用它的AccepteChanges办法,还可使用DataRowCollection工具的Remove办法完成不异的义务。

 
对于insert操作,只需要把event_type改成DELETE_ROWS_EVENT;对于delete操作,改成WRITE_ROWS_EVENT
作者: 柔情似水    时间: 2015-1-19 19:19
having子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having条件显示特定的组,也可以使用多个分组标准进行分组。
作者: admin    时间: 2015-1-27 15:26
如果你是从“学习某一种数据库应用软件,从而获得应聘的资本和工作机会”的角度来问的话。
作者: 爱飞    时间: 2015-2-5 09:41
如果你是从“学习某一种数据库应用软件,从而获得应聘的资本和工作机会”的角度来问的话。
作者: 老尸    时间: 2015-2-11 08:37
一个百万级别的基本信息表A,一个百万级别的详细记录表B,A中有个身份证id,B中也有身份id;先要找出A中在B的详细记录。
作者: 再现理想    时间: 2015-3-2 03:50
总感觉自己还是不会SQL
作者: 深爱那片海    时间: 2015-3-11 02:14
所以你总能得到相应的升级版本,来满足你的需求。
作者: 灵魂腐蚀    时间: 2015-3-17 19:08
varchar(max)\\\\nvarchar(max)类型的引入大大的提高了编程的效率,可以使用字符串函数对CLOB类型进行操作,这是一个亮点。
作者: 金色的骷髅    时间: 2015-3-24 20:57
所以你总能得到相应的升级版本,来满足你的需求。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2