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;
foreach(DataColumncolintbl.Columns)
Console.WriteLine(col.ColumnName);
3、检察SqlDataAdapter前往的数据
①、DataRow工具
DataTabletbl=ds.Table;
DataRowrow=tbl.Row;
Console.WriteLine(ros["OrderID"]);
②、反省存储在DataRow中的数据
DataTabletbl=row.Table;
foreach(DataColumncolintbl.Columns)
Console.WriteLine(row);
③、反省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 having子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having条件显示特定的组,也可以使用多个分组标准进行分组。 如果你是从“学习某一种数据库应用软件,从而获得应聘的资本和工作机会”的角度来问的话。 如果你是从“学习某一种数据库应用软件,从而获得应聘的资本和工作机会”的角度来问的话。 一个百万级别的基本信息表A,一个百万级别的详细记录表B,A中有个身份证id,B中也有身份id;先要找出A中在B的详细记录。 总感觉自己还是不会SQL 所以你总能得到相应的升级版本,来满足你的需求。 varchar(max)\\\\nvarchar(max)类型的引入大大的提高了编程的效率,可以使用字符串函数对CLOB类型进行操作,这是一个亮点。 所以你总能得到相应的升级版本,来满足你的需求。
页:
[1]