dataset的用法



1、创建DataSet对象:

DataSet ds = new DataSet("DataSetName");
 

2、查看调用SqlDataAdapter.Fill创建的结构

 

da.Fill(ds,"Orders");

DataTable tbl = ds.Table[0];

foreach(DataColumn col in tbl.Columns)

Console.WriteLine(col.ColumnName);

 

3、查看SqlDataAdapter返回的数据

 

①、DataRow对象

DataTable tbl = ds.Table[0];

DataRow row = tbl.Row[0];

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

 

②、检查存储在DataRow中的数据

DataTable tbl = row.Table;

foreach(DataColumn col in tbl.Columns)

Console.WriteLine(row[col]);

 

4、校验DataSet中的数据

 

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

②、DataTable对象的Constrains集合:UiqueConstraints,Primarykey, ForeignkeyConstraints

通常不必刻意去创建ForeignkeyConstraints,因为当在DataSet的两个DataTable对象之间创建关系时会创建一个。

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

 

5、编写代码创建DataTable对象

 

①创建DataTable对象:

DataTable tbl = new DataTable("TableName");

 

②将DataTable添加到DataSet对象的Table集合

DataSet ds = new DataSet();

DataTable tbl = new DataTable("Customers");

ds.Tables.Add(tbl);

DataSet ds = new DataSet();

DataTable tbl = ds.Tables.Add("Customers");

DataTable对象只能存在于至多一个DataSet对象中。如果希望将DataTable添加到多个DataSet中,就必须使用Copy方法或Clone方法。Copy方法创建一个与原DataTable结构相同并且包含相同行的新DataTable;Clone方法创建一个与原DataTable结构相同,但没有包含任何行的新DataTable。

 

③为DataTable添加列

DataTable tbl = ds.Tables.Add("Orders");

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

col.AllowDBNull = false;

col.MaxLength = 5;

col.Unique = true;

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

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

 

④处理自动增量列

DataSet ds = new DataSet();

DataTable tbl = ds.Tables.Add("Orders");

DataColumn col = 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

DataRow row = 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对象来提交交给数据库的待定的更改。

DataRow rowCustomer;

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

if(rowCustomer == null)

 //没有查找客户

else

{

     rowCustomer["CompanyName"] ="NewCompanyName";

     rowCustomer["ContactName"] ="NewContactName";

}

//推荐使用这种方式

DataRow rowCustomer;

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}\

DataRow rowCustomer;

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

rowCustomer.ItemArray = aCustomer;

 

③处理DataRow的空值

//查看是否为空

DataRow rowCustomer;

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

if(rowCustomer.IsNull("Phone"))

       Console.WriteLine("It''''s Null");

else

       Console.WriteLine("It''''s not Null");

//赋予空值

rowCustomer["Phone"] = DBNull.Value;

 

④删除DataRow

DataRow rowCustomer;

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

rowCustomer.Delete();

 

⑤清除DataRow

DataRow rowCustomer = 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

private void DemonstrateRowState()

{

    // Run a function to create a DataTable with one column.

    DataTable myTable = MakeTable();

    DataRow myRow;

    // Create a new DataRow.

    myRow = myTable.NewRow();

    // Detached row.

    Console.WriteLine("New Row " + myRow.RowState);

    myTable.Rows.Add(myRow);

    // New row.

    Console.WriteLine("AddRow " + myRow.RowState);

    myTable.AcceptChanges();

    // Unchanged row.

    Console.WriteLine("AcceptChanges " + myRow.RowState);

    myRow["FirstName"] = "Scott";

    // Modified row.

    Console.WriteLine("Modified " + myRow.RowState);

    myRow.Delete();

    // Deleted row.

    Console.WriteLine("Deleted " + myRow.RowState);

}

 

⑦检查DataRow中的挂起更改

DataRow rowCustomer;

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

rowCustomer["CompanyName"] = "NewCompanyName";

string strNewCompanyName,strOldCompanyName;

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

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

 

⑧遍历DataSet

foreach(DataTable dt in dataSet.Tables)

foreach(DataRow dr in dt.Rows)

foreach(DataColumn dc in dr.Table.Columns)

Console.WriteLine(dr[dc]);








参考资料:     dataset用法      http://www.studyofnet.com/news/642.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值