度量快速开发平台-专业、快速的软件定制快开平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 部件 流程 SQL
查看: 1732|回复: 2
打印 上一主题 下一主题

[分享] C# DataSet和DataTable详解

[复制链接]

542

主题

5916

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
跳转到指定楼层
楼主
发表于 2020-5-5 17:16:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、创建DataSet对象:
  1. DataSet ds = new DataSet("DataSetName");  
复制代码
2、查看调用SqlDataAdapter.Fill创建的结构  
  1. da.Fill(ds,"Orders");   
  2.   
  3. DataTable tbl = ds.Table[0];   
  4.   
  5. foreach(DataColumn col in tbl.Columns)   
  6.   
  7.     Console.WriteLine(col.ColumnName);   
复制代码
3、查看SqlDataAdapter返回的数据  
①、DataRow对象
  1. DataTable tbl = ds.Table[0];   
  2.   
  3. DataRow row = tbl.Row[0];   
  4.   
  5. Console.WriteLine(ros["OrderID"]);
复制代码
②、检查存储在DataRow中的数据  
  1. DataTable tbl = row.Table;   
  2.   
  3. foreach(DataColumn col in tbl.Columns)   
  4.   
  5. Console.WriteLine(row[col]);   
复制代码
③、检查DatTable中的DataRow对象  
  1. foreach(DataRow row in tbl.Rows)   
  2. DisplayRow(row);   
复制代码
4、校验DataSet中的数据  
①、校验DataColumn的属性:ReadOnly,AllowDBNull,MaxLength,Unique  

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

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

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

5、编写代码创建DataTable对象  

①、创建DataTable对象ataTable tbl = new DataTable("TableName");  

②、将DataTable添加到DataSet对象的Table集合  
  1. DataSet ds = new DataSet();   
  2.   
  3. DataTable tbl = new DataTable("Customers");   
  4.   
  5. ds.Tables.Add(tbl);   
  6.   
  7.   
  8.   
  9. DataSet ds = new DataSet();   
  10.   
  11. DataTable tbl = ds.Tables.Add("Customers");   
复制代码

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

③、为DataTable添加列  
  1. DataTable tbl = ds.Tables.Add("Orders");   
  2.   
  3. DataColumn col =tbl.Columns.Add("OrderID",typeof(int));   
  4.   
  5. col.AllowDBNull = false;   
  6.   
  7. col.MaxLength = 5;   
  8.   
  9. col.Unique = true;   
  10.   
  11. tbl.PrimaryKey = new DataColumn[]{tbl.Columns["CustomersID"]};   
复制代码
当设置主键时,AllowDBNull自动设置为False;  

④、处理自动增量列
  1. DataSet ds = new DataSet();   
  2.   
  3. DataTable tbl = ds.Tables.Add("Orders");   
  4.   
  5. DataColumn col = tbl.Columns.Add("OrderID",typeof(int));   
  6.   
  7. col.AutoIncrement = true;   
  8.   
  9. col.AutoIncrementSeed = -1;   
  10.   
  11. col.AutoIncrementStep = -1;   
  12.   
  13. col.ReadOnly = true;   
复制代码
⑤、添加基于表达式的列
  1. tbl.Columns.Add("ItemTotal",typeof(Decimal),"Quantity*UnitPrice");  
复制代码
6、修改DataTable内容  
①、添加新DataRow  

  1. DataRow row = ds.Tables["Customers"].NewRow();   
  2.   
  3.     row["CustomerID"] = "ALFKI";  
  4.   
  5.     ds.Tables["Customers"].Rows.Add(row);   
  6.   
  7.     
  8.   
  9.     object[] aValues ={"ALFKI","Alfreds","Anders","030-22222"};   
  10.   
  11.     da.Tables["Customers"].LoadDataRow(aValues,false);   
  12.   
复制代码
②、修改当前行  

修改行的内容逼供内不会自动修改数据库中相应的内容,对行所做的修改被视为是随后将使用SqlDataAdapter对象来提交交给数据库的待定的更改。
  1. DataRow rowCustomer;   
  2.   
  3. rowCustomer = ds.Tables["Custoemrs"].Rows.Find("ANTON");   
  4.   
  5. if(rowCustomer == null)   
  6.   
  7. //没有查找客户   
  8.   
  9. else   
  10.   
  11. {   
  12.   
  13. rowCustomer["CompanyName"] ="NewCompanyName";   
  14.   
  15. rowCustomer["ContactName"] ="NewContactName";   
  16.   
  17. }   
  18.   
  19. //推荐使用这种方式   
  20.   
  21. DataRow rowCustomer;   
  22.   
  23. rowCustomer = ds.Tables["Custoemrs"].Rows.Find("ANTON");   
  24.   
  25. if(rowCustomer == null)   
  26.   
  27. //没有查找客户   
  28.   
  29. else   
  30.   
  31. {   
  32.   
  33. rowCustomer.BeginEdit();   
  34.   
  35. rowCustomer["CompanyName"] ="NewCompanyName";   
  36.   
  37. rowCustomer["ContactName"] ="NewContactName";   
  38.   
  39. rowCustomer.EndEdit();   
  40.   
  41. }   
  42.   
  43. //null表示不修改该列的数据   
  44.   
  45. obejct[] aCustomer ={null,"NewCompanyName","NewContactName",null}   
  46.   
  47. DataRow rowCustomer;   
  48.   
  49. rowCustomer = ds.Tables["Customers"].Rows.Find("ALFKI");   
  50.   
  51. rowCustomer.ItemArray = aCustomer;
复制代码
③、处理DataRow的空值  
  1. //查看是否为空   
  2.   
  3. DataRow rowCustomer;   
  4.   
  5. rowCustomer = ds.Tables["Customers"].Rows.Find("ALFKI");   
  6.   
  7. if(rowCustomer.IsNull("Phone"))   
  8.   
  9. Console.WriteLine("It's Null");   
  10.   
  11. else   
  12.   
  13. Console.WriteLine("It's not Null");   
  14.   
  15. //赋予空值   
  16.   
  17. rowCustomer["Phone"] = DBNull.Value;  
复制代码
④、删除DataRow  
  1. DataRow rowCustomer;   
  2.   
  3. rowCustomer = ds.Tables["Customers"].Rows.Find("ALFKI");   
  4.   
  5. rowCustomer.Delete();
复制代码
⑤、清除DataRow  

  1. DataRow rowCustomer = ds.Tables["Customers"].Rows.Find("ALFKI");   
  2.   
  3. rowCustomer.ItemArray = aCustomer;   
  4.   
  5. da.Tables["Customers"].Remove(rowCustomer);   
复制代码
⑥、使用DataRow.RowState属性 :Unchanged,Detached,Added,Modified,Deleted  

  1. private void DemonstrateRowState()   
  2.   
  3. { // Run a function to create a DataTable with one column. DataTable myTable = MakeTable();DataRow myRow;   
  4.   
  5. // Create a new DataRow. myRow = myTable.NewRow();// Detached row. Console.WriteLine("New Row " + myRow.RowState);   
  6.   
  7. myTable.Rows.Add(myRow);// New row. Console.WriteLine("AddRow " + myRow.RowState);   
  8.   
  9. myTable.AcceptChanges();// Unchanged row. Console.WriteLine("AcceptChanges " + myRow.RowState);   
  10.   
  11. myRow["FirstName"] = "Scott";// Modified row. Console.WriteLine("Modified " + myRow.RowState);   
  12.   
  13. myRow.Delete();// Deleted row. Console.WriteLine("Deleted " + myRow.RowState);}   
复制代码
⑦、检查DataRow中的挂起更改  
  1. DataRow rowCustomer;   
  2.   
  3. rowCustomer = ds.Tables["Customers"].Rows.Find("ALFKI");   
  4.   
  5. rowCustomer["CompanyName"] = "NewCompanyName";   
  6.   
  7. string strNewCompanyName,strOldCompanyName;   
  8.   
  9. Console.WriteLine(rowCustomer["CompanyName",DataRowVersion.Current]);   
  10.   
  11. Console.WriteLine(rowCustomer["CompanyName",DataRowVersion.Original]);  
复制代码


















分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

542

主题

5916

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
沙发
 楼主| 发表于 2020-5-5 17:17:05 | 只看该作者
回复 支持 反对

使用道具 举报

542

主题

5916

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
板凳
 楼主| 发表于 2020-5-7 15:21:59 | 只看该作者
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|重庆度量科技  本站关键词:快速开发平台

GMT+8, 2024-11-27 17:02 , Processed in 0.145812 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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