• 简单了解Ado.net(下)


    通过上一篇文章,对Ado.net有了基本的了解,今天来看另外两个类:SqlDataAdapter,DataTable。

    SqlDataAdapter表示用于填充 System.Data.DataSet 和更新 SQL Server 数据库的一组数据命令和一个数据库连接。

    DataTable 是在内存中开辟一块空间存储一个表,是属于程序的。

    首先创建一个winForm程序,界面如下:

     

    一个button控件和dataGridView控件。

    下面先来看一下DataTable是怎样存储数据的。

    首先先创建:DataTable dt = new DataTable();//定义成类字段,使每个方法都能使用

    下面代码放到Form_Load中

    dt.Columns.Add("id", typeof(int));//往dt中添加列,构建表结构,后面的参数需要转换为type类型

    dt.Columns.Add("name", typeof(string));

    dt.Columns.Add("sex", typeof(int));//性别有时候在数据库存储类型是Bit类型,0或1

    dt.Columns.Add("age", typeof(int));

    dt.Columns.Add("price", typeof(double));

    dt.Columns.Add("quantity", typeof(int));

    dt.Columns.Add("sum", typeof(double), "price*quantity");//后面可以跟表达式

    dt.Columns.Add("性别", typeof(string), "IIF(sex=1,'男',IIF(sex=0,'女','人妖'))");//IIF函数与三目运算符类似,很少用

    dt.Rows.Add(1, "张三", 1, 23, 35.5, 3);

    dt.Rows.Add(1, "李四", 2, 23, 35.5, 3);

    dataGridView1.DataSource = dt;//绑定数据

    看一下执行结果:

     

    dataGridView也可以绑定连接泛型集合、数组等。看一下它是怎么绑定集合的,首先创建一个类:

        class Person

        {

            public int ID

            {

                get;

                set;

            }

            public string Name

            {

                get;

                set;

            }

            public int Age

            {

                get;

                set;

            }

    }

    看一下怎样绑定

         Person per1 = new Person();

          per1.ID = 1;

          per1.Name = "张三";

          per1.Age = 23;

          Person per2 = new Person();

          per2.ID = 2;

          per2.Name = "李四";

          per2.Age = 25;

          List<Person> pers = new List<Person>();

          pers.Add(per1);

          pers.Add(per2);

          dataGridView1.DataSource = pers;

    执行结果:

     

    好了,看到这里,对DataTable、dataGridView有了基本的了解。

    先来做SqlDataAdapter的查询

    SqlDataAdapter da;//定义成类字段

    string constring = "server=.;database=persondb;uid=sa;pwd=sa";//连接字符串,定义成类字段

    下面的语句是放到Form_Load中

    string sql = "select *from persons";

    da = new SqlDataAdapter(sql, constring);//会自动连接数据库,并且内部实现了关闭连接

    da.Fill(dt);//往表中填充数据及表结构

    SqlCommandBuilder cmder = new SqlCommandBuilder(da);//自动生成单表命令,根据DataTable的行状态的更改与关联的 SQL Server 数据库的更改相协调

    dataGridView1.DataSource = dt;

    看一下执行结果:

     

    我们来看到用SqlDataAdapter、DataTable得到的数据,是服务器一次性全部送过来的表。 而

    SqlDataReader读数据时,服务器是根据dr的read()来送数据,每read()一次,服务器返回一行数据,返回来的数据放到一个object数组中。

    接下来做增删改,相对于SqlConnection来说就很简单了

    只在保存操作中写一行代码就足够了:

    da.Update(dt);//为指定 DataTable中每个已插入、已更新或已删除的行调用相应的 INSERT、UPDATE 或 DELETE 语句。表中必须有主键

    然后直接在dataGridView进行操作,下面看一下具体怎样操作

     

    然后保存,

     

    去数据库中看一下有没有添加成功

    我们看到,”鬼脚七”成功添加。

    再来修改,将“鬼脚七“改为”七匹狼“

    然后保存,去数据库看一下有没有修改成功:

     

    修改成功。

    在删除它,点中这一行,按Del键删除,并保存,再到数据库看有没有删除成功:

     

    删除成功。

    到这里基本就把SqlDataAdapter、DataTable介绍完毕,欢迎感兴趣的朋友和我交流。

    __喜欢的朋友别忘了推荐下,这里先谢了。。 ——我打远古走来,抖一身秦风汉雨,过一程唐关明月。累了,卧一卧高山大川。醒了,嗅一嗅明月星空。
  • 相关阅读:
    【http】使用浏览器Cache和http状态码304实现的客户端缓存
    delegate与模式
    用Delegate绕开频繁反射的又一个简单高效的方法
    直接调用、委托与反射调用的性能区别
    Lambda表达式的非Linq用法
    泛型+反射+特性=以静制动
    绕开频繁反射
    不要用错单例模式
    活用接口——反例:MultiKeyDictionary
    jQuery框架总体分析
  • 原文地址:https://www.cnblogs.com/yunfeiyang/p/2067302.html
Copyright © 2020-2023  润新知