DataSet操作数据库

DataSet操作数据库
________________________________________________________________________________________________________

SqlConnection thisConnection = new SqlConnection(@"Data Source=(local);Integrated Security=SSPI;Initial Catalog=数据库名");
thisConnection.Open();//打开数据库连接
SqlDataAdapter 适配器一 = new SqlDataAdapter("select * from 顾客", thisConnection);
DataSet thisDataSet = new DataSet();//数据集
适配器一.Fill(thisDataSet, "表名");//填充数据集
thisDataSet.Tables["表名"].Rows[0]["列名"]="更新";//在内存中更新数据
thisAdapter.Update(thisDataSet, "表名");//更新数据库
thisConnection.Close();//关闭数据库连接
********************************************************************************************************

ADO.net的主要对象元素:_______________________________________________________________________________________________________
1.添加记录 (添加行)
  添加记录首先需要声明两个变量 DataTable ,DataRow
  其中DataTable需要实例化到具体的数据集中的某个table
  DataRow = DataTable.NewRow()  声明为Table的新Row
  再对DataRow进行赋值,调用DataTable.Rows.Add(DataRow)即可
            DataColumn[] keys = new DataColumn[1];
            keys[0] = thisDataSet.Tables["表名"].Columns["列名"];


________________________________________________________________________________________________________
2.删除纪录 
  如下 DataTable.Rows[5].Delete(); 
  推想:应该可以这样,首先申明一个变量 DataRow[] objRows 用来存储要删除的行
  objRows = DataTable.Select("查询条件");
  thisDataSet.Tables["表名"].PrimaryKey = keys;//设置主键,可以定义多个主键,无非就是keys[0]、key[1]、key[2]...多定义几个就可以了
  DataRow findRow = thisDataSet.Tables["表名"].Rows.Find("列数据");//查找行,这种方法只能用于查找主键,也就是在表中惟一地标识行的值或值集合

  if (findRow == null)
  {
    Console.WriteLine("未找到,将添加行");
    DataRow thisRow = thisDataSet.Tables["表名"].NewRow();
    thisRow["列名"] = "新数据";
    thisDataSet.Tables["表名"].Rows.Add(thisRow);//添加行
  }
  else if (findRow != null)
{
    Console.WriteLine("找到,将删除行");
    findRow.Delete();
  }
  thisAdapter.Update(thisDataSet, "表名");//更新数据库

________________________________________________________________________________________________________
3.修改纪录 (编辑行)
  首先声明一个变量 DataRow[] objRows用来存储要编辑的行
  objRows = DataTable.Select("查询条件"); 
  如果是一行,可以这样 objRows = DataTable.Rows[3];
  再对其进行修改 如 objRows[0][FIELD1]=""  objRows[0][FIELD2]=""
            thisDataSet.Tables["表名"].Rows[0]["列名"] = "更新";//在内存中更新数据
            thisAdapter.Update(thisDataSet, "表名");//更新数据库

实际上Delete()等方法并不执行删除等操作,它仅仅标记要删除的行,在Rows集合中的每一个DateRow对象都有RowState,它跟踪记录此行是被删除、添加、修改,还是不变,实际上在此中的操作全部在内存中进行,而Update()方法才真正更新数据库。Delete()方法将行的RowState设置为Deleted,然后Update()就在数据库中将在Rows集合中标记为Deleted的所有行删除。
Visual Studio.NET在线文档会提示您在执行Delete()方法之后调用DataSet的AcceptChanges()方法;但是,这仅能删除DataSet中的行,却不影响数据库中的行,因为Update()仅影响在Rows集合中找到的行,遗漏的行将被忽略掉。如果希望在数据库中删除行,则不要在调用Update()之前调用AcceptChanges()方法。
这个问题也适用于Remove()方法;仅当希望从DataSet的Rows集合中,而不是数据库中删除行时才调用它。

________________________________________________________________________________________________________
3.表查询
            DataRow[] 权限清单Row = this.superCargoDataSet.Tables["权限清单"].Select("操作员ID=" + 操作员ID);
------------------------
            OleDbCommand thisCommand=thisConnection.CreateCommand(); //
            thisCommand.CommandText="Select * FROM 表名";
            OleDbDataReader thisReader=thisCommand.ExecuteReader();
            while(thisReader.Read())
            {
            Console.WriteLine("/t{0}/t{1}",thisReader["ID"],thisReader["TheName"]);
            }
            thisReader.Close();


            /*--------------前提--------------*/
            SqlDataAdapter thisAdapter = new SqlDataAdapter("select * from 表名", thisConnection); //适配器
            SqlCommandBuilder thisBuilder = new SqlCommandBuilder(thisAdapter);//将命令构造器与适配器关联,用于自动生成SQL语句
            DataSet thisDataSet = new DataSet();//数据集
            thisAdapter.Fill(thisDataSet, "表名");//填充数据集
            Console.WriteLine("输出数据:{0}", thisDataSet.Tables["表名"].Rows[0]["列名"]);//输出数据


________________________________________________________________________________________________________
5.创建表关系
            SqlDataAdapter 适配器一 = new SqlDataAdapter("select * from 顾客", thisConnection);
            SqlDataAdapter 适配器二 = new SqlDataAdapter("select * from 订单明细", thisConnection);
            适配器一.Fill(thisDataSet, "顾客");//填充
            适配器二.Fill(thisDataSet, "订单明细");//填充
            //创建关系
            DataRelation 关系 = thisDataSet.Relations.Add("顾客和订单", thisDataSet.Tables["顾客"].Columns["顾客ID"], thisDataSet.Tables["订单明细"].Columns["顾客ID"]);//父列必须位于子列之前
            //在这以后加一句  顾客和订单.Nested=true;  将会在以后的WriteXml()方法中,将子表记录嵌套在文件中,如将在输出XML中将购货明细表输出在购货记录下

            //使用关系
            foreach (DataRow custRow in thisDataSet.Tables["顾客"].Rows)
            {
        Console.WriteLine("顾客ID:"+custRow["顾客ID"]+"  名字:"+custRow["名字"]);
                foreach (DataRow orderRow in custRow.GetChildRows(顾客和订单))
                {
        Console.WriteLine("      订单:"+orderRow["订单内容"]);
                }
            } 
posted @ 2010-07-08 14:21  kevinzhwl  阅读(226)  评论(0编辑  收藏  举报