• ADO.NET中DataSet的应用(读书笔记5)


    一.思维导图

     

    二.知识点

    DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据库,DataSet是不依赖于数据库的独立数据集合。

    命名空间:System.Data

    表示数据在内存中的缓存。

     

    1.在实际应用中,DataSet使用方法一般有三种

    (1) 把数据库中的数据通过DataAdapter对象填充DataSet。

    (2) 通过DataAdapter对象操作DataSet实现更新数据库。

    (3) 把XML数据流或文本加载到DataSet。

    2.属性和方法

    2.1属性

    CaseSensitive 获取或设置一个值,该值指示 DataTable 对象中的字符串比较是否区分大小写。
    Container 获取组件的容器。
    DataSetName 获取或设置当前DataSet的名称
    HasErrors 获取一个值,指示在此DataTable 中的任何 DataSet 对象中是否存在错误
    Tables  获取包含在DataSet 中的表的集合

     

     

    2.2方法

    Clear()

    通过移除所有表中的所有行来清除任何数据的 DataSet。

    Clone()

    复制 DataSet 的结构,包括所有 DataTable 架构、关系和约束。 不要复制任何数据。

    Copy()

    复制该 DataSet 的结构和数据。

    CreateDataReader()

    为每个 DataTableReader 返回带有一个结果集的 DataTable,顺序与 Tables 集合中表的显示顺序相同。

    CreateDataReader(DataTable[])

    为每个 DataTableReader返回带有一个结果集的 DataTable。

    Dispose()

    释放由 MarshalByValueComponent使用的所有资源。

    Equals(Object)

    确定指定的对象是否等于当前对象。

    GetChanges()

    获取 DataSet 的副本,该副本包含自加载以来或自上次调用 AcceptChanges() 以来对该数据集进行的所有更改。

    GetChanges(DataRowState)

    获取由 DataRowState 筛选的 DataSet 的副本,该副本包含上次加载以来或调用 AcceptChanges() 以来进行的所有更改。

    GetType()

    获取当前实例的 Type。

    HasChanges()

    获取一个值,该值指示 DataSet 是否有更改,包括新增行、已删除的行或已修改的行。

    Haschanges(DataRowState)

    获取一个值,该值指示 DataSet 是否有 DataRowState 被筛选的更改,包括新增行、已删除的行或已修改的行。

    Reset()

    清除所有表并从 DataSet 中删除所有关系、外部约束和表。 子类应重写 Reset(),以便将 DataSet还原到其原始状态。

    ToString()

    返回包含 Component 的名称的 String(如果有)。 不应重写此方法。

     

     

     

     

     

     

     

     

     

     

     三.示例代码和效果截图

    示例代码

     1.DataAdapter填充DataSet的过程分为二步:首先通过DataAdapter的SelectCommand属性从数据库中检索出需要的数据。SelectCommand其实是一个Command对象。然后再通过DataAdapter的Fill方法把检索来的数据填充 DataSet。

    1 SqlConnection sqlConnection1 = new SqlConnection ( "Data Source=localhost;IntegratedSecurity=SSPI
    2 ;InitialCatalog=Northwind" ) ;
    3 SqlCommand selectCMD = new SqlCommand ( "SELECT CustomerID , CompanyName FROM Customers" , sqlConnection1 ) ;
    4 SqlDataAdapter sqlDataAdapter1 = new SqlDataAdapter ( ) ;
    5 custDA.SelectCommand = selectCMD ;
    6 sqlConnection.Open ( ) ;
    7 DataSet dsDataSet1 = new DataSet ( ) ;
    8 sqlDataAdapter1.Fill ( dsDataSet1 , "Customers" ) ;
    9 sqlConnection.Close ( ) ;

    2.DataAdapter是通过其Update方法实现以DataSet中数据来更新数据库的。当DataSet实例中包含数据发生更改后,此时调用Update方法,DataAdapter 将分析已作出的更改并执行相应的命令(INSERT、UPDATE 或 DELETE),并以此命令来更新数据库中的数据。

    1 SqlCommandBuilder sqlCommandBuilder1 = new SqlCommandBuilder ( sqlDataAdapter1 ) ;
    2 dsDataSet1.Tables["Customers"].Rows[0].Delete ( ) ;
    3 sqlDataAdapter1.Update ( dsDataSet1 ,"Customers" ) ;
    4 dsDataSet1.Tables["Customers"].AcceptChanges ( ) ;
    1 DataSetds = new DataSet();
    2 DataTabletbl = new DataTable("Customers");
    3 ds.Tables.Add(tbl);
    4 DataSetds = new DataSet();
    5 DataTabletbl = ds.Tables.Add("Customers");

    效果截图

     SqlConnection sqlConnection = new SqlConnection();
                sqlConnection.ConnectionString =
                    "Server=(local);Database=MyHospital;Integrated Security=sspi";
        
                SqlCommand sqlCommand = new SqlCommand();
                sqlCommand.Connection = sqlConnection;
                sqlCommand.CommandText =                                                                  
                    "SELECT Lyl*IndPrice AS Useprice FROM medicineBuy where CONVERT(varchar(10),datepart(yy,Lydate))+'年'+ CONVERT(varchar(10),datepart(mm,Lydate))+'月'=CONVERT(VARCHAR(30),@date);"                                                              //该命令分别查询所有院系、专业、班级,查询结果将返回多张表;
                    + "SELECT Num*IndPrice AS TotalInprice FROM orders where CONVERT(varchar(10),datepart(yy,OrderDate))+'年'+ CONVERT(varchar(10),datepart(mm,OrderDate))+'月'=CONVERT(VARCHAR(30),@date) AND State=1;"
                    + "SELECT Num*IndPrice AS cancal FROM orders where CONVERT(varchar(10),datepart(yy,OrderDate))+'年'+ CONVERT(varchar(10),datepart(mm,OrderDate))+'月'=CONVERT(VARCHAR(30),@date) AND State=1 AND cancel=1;";
                sqlCommand.Parameters.AddWithValue("@date", this.cmb_date.Text.ToString());
                SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();                                        
                sqlDataAdapter.SelectCommand = sqlCommand;                                                     
                DataSet dataSet = new DataSet();                                                        
                sqlConnection.Open();                                                                         
                sqlDataAdapter.Fill(dataSet);                                                               
                sqlConnection.Close();                                                                       
                DataTable UsepriceTable = dataSet.Tables[0];                                                  
                DataTable TotalInpriceTable = dataSet.Tables[1];                                                       
                DataTable cancalTable = dataSet.Tables[2];
                this.Monthbuy.Text = UsepriceTable.Compute("SUM(Useprice)", "").ToString();
                this.MonthInput.Text = TotalInpriceTable.Compute("SUM(TotalInprice)", "").ToString();
                this.MonthCancel.Text = cancalTable.Compute("SUM(cancal)", "").ToString();
  • 相关阅读:
    【STM32F407的DSP教程】第47章 STM32F407的IIR带阻滤波器实现(支持逐个数据的实时滤波)
    【STM32H7的DSP教程】第46章 STM32H7的IIR带通滤波器实现(支持逐个数据的实时滤波)
    【STM32F429的DSP教程】第46章 STM32F429的IIR带通滤波器实现(支持逐个数据的实时滤波)
    【STM32F407的DSP教程】第46章 STM32F407的IIR带通滤波器实现(支持逐个数据的实时滤波)
    嵌入式新闻早班车-第21期
    【STM32H7的DSP教程】第45章 STM32H7的IIR高通滤波器实现(支持逐个数据的实时滤波)
    【STM32F429的DSP教程】第45章 STM32F429的IIR高通滤波器实现(支持逐个数据的实时滤波)
    【STM32F407的DSP教程】第45章 STM32F407的IIR高通滤波器实现(支持逐个数据的实时滤波)
    【第3版emWin教程】第32章 emWin6.x的矢量字体(支持汉字全字库,Unicode编码,QSPI Flash方案)
    【第3版emWin教程】第31章 emWin6.x的全字库的实现(GB2312编码,SPI Flash方案)
  • 原文地址:https://www.cnblogs.com/lidie-/p/9948774.html
Copyright © 2020-2023  润新知