科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道DataSet对象

DataSet对象

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

DataSet对象可以用来存储从数据库查询到的数据结果,由于它在获得数据或更新数据后立即与数据库断开,所以程序员能用此高效地访问和操作数据库。

作者:ghost 来源:CSDN 2007年9月24日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)

下面的代码讲述了如何综合地使用DataTable、DataColumn和DataRow对象进行数据库操作。
private void DemonstrateRowBeginEdit()
{
//创建DataTable对象
DataTable table = new DataTable("table1");
   
//创建DataColumn对象,并设置其属性为Int32类型
DataColumn column=new DataColumn("col1",Type.GetType("System.Int32"));       
    //添加Column到dataTable中
table.Columns.Add(column);
    // 使用for循环,创建5个DataRow对象并添加到DataTable中
    DataRow newRow;
    for(int i = 0;i<5; i++)
    {
        // RowChanged event will occur for every addition
        newRow= table.NewRow();
        newRow[0]= i;
        table.Rows.Add(newRow);
    }   
// 使用dataTable的AcceptChanges方法,将更改提交到数据库中
    table.AcceptChanges();
    // 开始操作DataRow中的每个对象
    foreach(DataRow row in table.Rows)
    {
        //使用BeginEdit方法开始操作
        row.BeginEdit();
        row[0]=(int) row[0]+10;
    }
    table.Rows[0].BeginEdit();
    table.Rows[1].BeginEdit();
    table.Rows[0][0]= 100;
    table.Rows[1][0]=100;
    try
    {
        // 终止对DataRow对象进行操作
        table.Rows[0].EndEdit();
        table.Rows[1].EndEdit();
    }
    catch(Exception e)
    {
        //出错处理
        Console.WriteLine("Exception of type {0} occurred.",
            e.GetType());
    }
}
上述代码的主要业务逻辑如下:
(1) 创建DataTable和DataColumn类型的对象,并把DataColumn对象的数据类型设置成System.Int32。也就是说,使用该DataColumn对象可以对应地接收int类型的字段数据。
(2) 把DataColumn对象添加到DataTable中。
(3) 依次创建5个DataRow对象,同时通过for循环给其赋值。完成赋值后,将这5个DataRow对象添加到DataTable中。
(4) 使用AcceptChanges方法,实现DataColumn和DataRow对象的更新。
(5) 使用BeginEdit方法,开始编辑DataRow对象,使用EndEdit方法来表示编辑结束。
使用DataTable、DataColumn和DataRow对象访问数据的一般方式有以下几种。
(1) 使用Table名和Table索引来访问DataTable。为了提高代码的可读性,推荐使用Table名的方式来访问Table。代码如下:
DataSet ds = new DataSet();
DataTable dt = new DataTable("myTableName");
//向DataSet的Table里添加一个dataTable
ds.Tables.Add(dt);
//访问dataTable
//1 通过表名访问,推荐使用
ds.Tables["myTableName"].NewRow();
//2 通过索引访问,索引值从0开始,不推荐使用
ds.Tables[0].NewRow();
(2) 使用Rows属性访问数据记录,例如:
foreach(DataRow row in table.Rows)
{
    row[0]=(int) row[0]+10;
}
(3) 使用Rows属性,访问指定行的指定字段,例如:
//首先为DataTable对象创建一个数据列
DataTable table = new DataTable("table1");
DataColumn column = new
        DataColumn("col1",Type.GetType("System.Int32"));
table.Columns.Add(column);
// 其次为DataTable添加行数据
newRow= table.NewRow();
newRow[0]= 10;
table.Rows.Add(newRow);
//设置索引行是0,列名是col1的数据
table.Rows[0]["col1"]= 100;
//设置索引行是0,索引列是0的数据,这种做法不推荐
//table.Rows[0][0]= 100;
(4) 综合使用DataRow和DataColumn对象访问DataTable内的数据。从以下代码可以看出,DataTable对象中的Rows属性对应于它的DataRow对象,而Columns属性对应于DataColumn。
foreach(DataRow dr in dt.Rows)
{
    foreach(DataColumn dc in dt.Columns)
    {
//用数组访问数据
dr[dc] = 100;
    } 
}
4  使用DataSet对象访问数据库
当对DataSet对象进行操作时,DataSet对象会产生副本,所以对DataSet里的数据进行编辑操作不会直接对数据库产生影响,而是将DataRow的状态设置为added、deleted或changed,最终的更新数据源动作将通过 DataAdapter对象的update方法来完成。
DataSet对象的常用方法如下。
Ü  void AcceptChanges():该方法用来提交DataSet里的数据变化。
Ü  void clear():该方法用来清空DataSet里的内容。
Ü  DataSet copy():该方法把DataSet的内容复制到其他DataSet中。
Ü  DataSet GetChanges():该方法用来获得在DataSet里已经被更改后的数据行,并把这些行填充到Dataset里返回。
Ü  bool HasChanges():如果DataSet在创建后或执行AcceptChanges后,其中的数据没有发生变化,返回True,否则返回False。
Ü  void RejectChanges():该方法撤销DataSet自从创建或调用AcceptChanges方法后的所有变化。
DataSet对象一般是和DataAdapter 对象配合使用。下面的代码演示了如何综合使用DataSet和DataAdapter 对象访问数据库。
//省略获得连接对象的代码
//创建DataAdatper
string sql = " select * from user";
SqlDataAdapter sda = new SqlDataAdapter(sql,conn)
//创建并填充DataSet
DataSet ds = new DataSet();
sda.fill(ds,”user”);
//给DataSet创建一个副本,操作对副本进行,以免因误操作而破坏数据
DataSet dsCopy = ds.Copy();
DataTable dt = ds.Table["user"];
//对DataTable中的DataRow和DataColumn对象进行操作
//最后将更新提交到数据库中
sda.update(ds, "user");
上述代码的主要业务流程如下。
(1) 创建DataAdapter和DataSet对象,并用DataAdapter的SQL语句生成的表填充到DataSet的DataTable中。
(2) 使用DataTable对表进行操作,例如做增、删、改等动作。
(3) 使用DataAdapter的update语句将更新后的数据提交到数据库中。
另外,上述代码在操作DataSet前,为DataSet创建了一个副本,用来避免误操作。


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1687028

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章