zoukankan      html  css  js  c++  java
  • 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["订单内容"]);
                    }
                } 
  • 相关阅读:
    CF Round 594
    [转载]CSP-J/S 第一轮知识点选讲
    10.17 模拟赛
    10.16 模拟赛
    10.15模拟赛
    10.14模拟赛
    10.12 模拟赛
    Peaks Gym 100365H
    手写Bitset优化
    Sums gym100753M
  • 原文地址:https://www.cnblogs.com/kevinzhwl/p/3878914.html
Copyright © 2011-2022 走看看