• ADO.NET的SqlDataAdapterhe和DataSet的学习


    学习是一个日积月累的过程,加油,Kencery

    1. DataSet

    (1) DataSet就相当于一个离线的数据库,他可以将你数据库中的数据全部读取到内存中

    (2) 几乎数据库有什么,DataSet就有什么

     (3) 手写一个DataSet 

     1     static void Main(string[] args)
     2 
     3             {
     4 
     5                    //DataSet 相当于一个离线的数据库
     6 
     7                    DataSet ds = new DataSet("HYLDataSet");  //相当于数据库的名称
     8 
     9                    //创建一个DataTable
    10 
    11                    DataTable dt=new DataTable("HYL");
    12 
    13                    //将数据表添加到数据库
    14 
    15                    ds.Tables.Add(dt);
    16 
    17                    //设计数据库表的时候需要设计什么?,与设计数据表一样,开始创建列,并且将列要加到Table中
    18 
    19                    DataColumn col1=new DataColumn("Id",typeof(int));
    20 
    21                    //主键字段要自增
    22 
    23                    col1.AutoIncrement=true;
    24 
    25                    col1.AutoIncrementSeed=1;
    26 
    27                    col1.AutoIncrementStep=1;
    28 
    29                    //第二列
    30 
    31                    DataColumn col2=new DataColumn("Name",typeof(string));
    32 
    33                    // 将字段加到数据表中
    34 
    35                    //dt.Columns.Add(col1);
    36 
    37                    //dt.Columns.Add(col2);
    38 
    39                    dt.Columns.AddRange(new DataColumn[] { col1, col2 });
    40 
    41                    //添加数据,就是创建一行
    42 
    43                    for (int i = 0; i < 10; i++)
    44 
    45                    {
    46 
    47                            DataRow r1 = dt.NewRow();
    48 
    49                            r1["name"] = "韩迎龙" + i;
    50 
    51                            dt.Rows.Add(r1);
    52 
    53                    }
    54 
    55                    //将表输出成XML
    56 
    57                    ds.WriteXml("xml.xml");
    58 
    59             }
    1. SqlDataAdapter适配器

    (1)作用就是将数据库中的数据读取出来变成一个DataSet

     1    static void Main(string[] args)
     2 
     3         {
     4 
     5             //先new一个DataSet和一个SqlDataAdapter
     6 
     7             DataSet ds = new DataSet("itheima");
     8 
     9             string sql = "select * from Person0917";
    10 
    11             string connStr = @"server=HYL;database=itheima;uid=sa;pwd=saa";
    12 
    13             SqlDataAdapter sa = new SqlDataAdapter(sql, connStr);
    14 
    15             //调用Fill方法读取数据
    16 
    17             sa.Fill(ds);
    18 
    19             ds.WriteXml("HYLXML.xml");
    20 
    21         }等同于
    22 
    23             string sql = "select * from Person0917";
    24 
    25             string connStr = @"server=HYL;database=itheima;uid=sa;pwd=saa";
    26 
    27             using (SqlConnection conn = new SqlConnection(connStr))
    28 
    29             {
    30 
    31                    DataSet ds = new DataSet();
    32 
    33                    SqlDataAdapter sa = new SqlDataAdapter(sql, conn);
    34 
    35                    sa.Fill(ds);
    36 
    37                    ds.WriteXml("HYL1.xml");
    38 
    39             }

         (2)SqlDataAdapter对象的构造方法,可以提供SQL语句与连接字符串

         (3)实际上SqlDataAdapter是对前面Connection,Command,DataReader等对象的一个封装,其内部还是有哪些对象实现的,

            可以使用Reflect查看。

         (4)SqlDataAdapter也是需要访问数据库的,它同样包含非托管资源

                using (SqlDataAdapter sa = new SqlDataAdapter(sql, conn))

                       {

                       }

         (5)SqlDataAdapter的构造函数提供一个SQL语句与一个连接字符串,就知道这个SqlDataAdapter能做什么?

            SqlDataAdapter由SQL语句与连接字符串决定唯一决定的

                1)SQL语句决定了SqlDataAdapter能做什么

                2)连接字符串决定了SqlDataAdapter在什么地方去做

    1. 利用DataSet和SqlDataAdapter绑定数据

    (1) 介绍SqlDataAdapter与DataSet的目的就是为了实现数据的绑定

    (2)实现数据的绑定(Winform)

                1)提供DataGridView控件

                2)将数据放到DataSet中

                3)使用DataSource属性

     1    private void btnShow_Click(object sender, EventArgs e)
     2 
     3                    {
     4 
     5                           //得到DataSet
     6 
     7                           string sql = @" select stuId, stuName, stuSex, stuBirthdate, stuStudydate, stuAddress, stuEmail, stuPhone, stuIsDel, stuInputtime
     8 
     9                                         from Student
    10 
    11                                         where stuIsDel=0";
    12 
    13                           String connStr = @"server=HYL;database=testDataBase; uid=sa;pwd=saa";
    14 
    15                           DataSet ds = new DataSet();
    16 
    17                           using (SqlDataAdapter sa = new SqlDataAdapter(sql, connStr))
    18 
    19                           {
    20 
    21                                  sa.Fill(ds);
    22 
    23                           }
    24 
    25                           dgvData.DataSource = ds.Tables[0];
    26 
    27                           //固定前两列
    28 
    29                           dgvData.Columns[1].Frozen = true;
    30 
    31                    }    
    1. 利用DataSet和SqlDataAdapter修改数据
     1  public partial class Form1 : Form
     2 
     3             {
     4 
     5                    public Form1()
     6 
     7                    {
     8 
     9                           InitializeComponent();
    10 
    11                    }
    12 
    13                    string sql = @" select stuId, stuName, stuSex, stuBirthdate, stuStudydate, stuAddress, stuEmail, stuPhone, stuIsDel, stuInputtime
    14 
    15                                         from Student
    16 
    17                                         where stuIsDel=0";
    18 
    19                    String connStr = @"server=HYL;database=testDataBase; uid=sa;pwd=saa";
    20 
    21                    SqlDataAdapter sa;  
    22 
    23                    private void btnShow_Click(object sender, EventArgs e)
    24 
    25                    {
    26 
    27                           //得到DataSet
    28 
    29                           DataSet ds = new DataSet();
    30 
    31                           sa= new SqlDataAdapter(sql, connStr);
    32 
    33                           sa.Fill(ds); ;
    34 
    35                           dgvData.DataSource = ds.Tables[0];
    36 
    37                           //固定前两列
    38 
    39                           dgvData.Columns[1].Frozen = true;
    40 
    41                    }
    42 
    43  
    44 
    45                    private void btnUpdate_Click(object sender, EventArgs e)
    46 
    47                    {
    48 
    49                           //怎么更新?只用调用Adapter的Update方法即可
    50 
    51                           //SqlDataAdapter对象需要释放资源,但是读取与更新是同一个SqlDataAdapter
    52 
    53                       //数据库知不知道你更新的是什么?
    54 
    55                           //使用SqlCommandBuilder
    56 
    57                           //这个对象可以根据你的SqlDataAdapter对象声称对应的增删改查
    58 
    59                           //删除数据的时候,如果数据有主外键约束,需要先删除外键表中的数据,才能删除主键表中的数据
    60 
    61                           if (sa != null)
    62 
    63                           {
    64 
    65                                  //必须要添加
    66 
    67                                  SqlCommandBuilder scb = new SqlCommandBuilder(sa);
    68 
    69                                  sa.Update((DataTable)dgvData.DataSource);
    70 
    71                           }
    72 
    73                           MessageBox.Show("更新完成");
    74 
    75                    }
    76 
    77             }

     (2)使用上面的方法将不会释放SqlDataAdapter对象在内存重的数据

                private void btnUpdate_Click(object sender, EventArgs e)

            {

                //怎么更新?只用调用Adapter的Update方法即可

                //SqlDataAdapter对象需要释放资源,但是读取与更新是同一个SqlDataAdapter

               //数据库知不知道你更新的是什么?

                //使用SqlCommandBuilder

                //这个对象可以根据你的SqlDataAdapter对象声称对应的增删改查

                //删除数据的时候,如果数据有主外键约束,需要先删除外键表中的数据,才能删除主键表中的数据

                 string sql = @" select stuId, stuName, stuSex, stuBirthdate, stuStudydate, stuAddress, stuEmail, stuPhone, stuIsDel, stuInputtime

                        from Student

                        where stuIsDel=0";

                string connStr = @"server=HYL;database=testDataBase; uid=sa;pwd=saa";

                using (SqlDataAdapter sa = new SqlDataAdapter(sql, connStr))

                {

                    //必须要添加

                    SqlCommandBuilder scb = new SqlCommandBuilder(sa);

                    sa.Update((DataTable)dgvData.DataSource);

                }

                MessageBox.Show("更新完成");

            }

    1. 利用DataSet和SqlDataAdapter多条件查询

    (1) 按照姓名查询

     1        private void btnSelect_Click(object sender, EventArgs e)
     2 
     3         {
     4 
     5             //先根据用户的输入得到查询的Sql语句
     6 
     7             string name = txtName.Text.Trim();
     8 
     9             string sql = @" select stuId, stuName, stuSex, stuBirthdate, stuStudydate, stuAddress, stuEmail, stuPhone, stuIsDel, stuInputtime
    10 
    11                     from Student
    12 
    13                     where stuIsDel=0";
    14 
    15             //判断是否使用精确查找
    16 
    17             if (ckbJingque.Checked)
    18 
    19             {
    20 
    21                 //精确查找
    22 
    23                 sql += " and stuName=@stuName";
    24 
    25             }
    26 
    27             else
    28 
    29             {
    30 
    31                 sql += " and stuName like '%'+@StuName+'%'";
    32 
    33             }
    34 
    35             string connStr = @"server=HYL;database=testDataBase; uid=sa;pwd=saa";
    36 
    37             //得到DataSet
    38 
    39             DataTable dt = new DataTable();
    40 
    41             using (SqlDataAdapter sa = new SqlDataAdapter(sql, connStr))
    42 
    43             {
    44 
    45                 //需要添加参数
    46 
    47                 sa.SelectCommand.Parameters.AddWithValue("@stuName", name);
    48 
    49                 sa.Fill(dt);
    50 
    51                 dgvData.DataSource = dt;
    52 
    53             }
    54 
    55         }

         (2)按照姓名,年龄,性别查询数据

      1         //第一种方法:
      2 
      3                    private void btnSelected_Click(object sender, EventArgs e)
      4 
      5                    {
      6 
      7                           //准备基本的SQL语句和连接字符串
      8 
      9                           string sql = @" select stuId, stuName, stuSex, stuBirthdate, stuStudydate, stuAddress, stuEmail, stuPhone, stuIsDel, stuInputtime
     10 
     11                                         from Student where 1=1";
     12 
     13                           string connStr = @"server=HYL;database=testDataBase; uid=sa;pwd=saa";
     14 
     15                           //定义参数,使用list集合
     16 
     17                           List<SqlParameter> list = new List<SqlParameter>();
     18 
     19                           //准备装配参数
     20 
     21                           if (!string.IsNullOrEmpty(txtUserName.Text.Trim()))
     22 
     23                           {
     24 
     25                                  sql += " and stuName like '%'+@stuName+'%'";
     26 
     27                                  list.Add(new SqlParameter("@stuName", txtUserName.Text.Trim()));
     28 
     29                           }
     30 
     31                           if (!string.IsNullOrEmpty(txtGender.Text.Trim()))
     32 
     33                           {
     34 
     35                                  sql += " and stuSex=@stuSex";
     36 
     37                                  list.Add(new SqlParameter("@stuSex", txtGender.Text.Trim()));
     38 
     39                           }
     40 
     41                           if (!string.IsNullOrEmpty(txtAge.Text.Trim()))
     42 
     43                           {
     44 
     45                                  sql += " and stuBirthdate=@stuBirthdate";
     46 
     47                                  list.Add(new SqlParameter("@stuBirthdate", txtAge.Text.Trim()));
     48 
     49                           }
     50 
     51                           DataTable dt = new DataTable();
     52 
     53                           using (SqlDataAdapter sa = new SqlDataAdapter(sql, connStr))
     54 
     55                           {
     56 
     57                                  sa.SelectCommand.Parameters.AddRange(list.ToArray());
     58 
     59                                  sa.Fill(dt);
     60 
     61                           }
     62 
     63                           dgvData.DataSource = dt;
     64 
     65                    }
     66 
     67             //第二种方法:
     68 
     69                    public Form1()
     70 
     71                    {
     72 
     73                           InitializeComponent();
     74 
     75                           txtName2.Enabled = checkBox1.Checked;
     76 
     77                           txtSex.Enabled = checkBox2.Checked;
     78 
     79                    }
     80 
     81                    private void checkBox1_CheckedChanged(object sender, EventArgs e)
     82 
     83                    {
     84 
     85                           txtName2.Enabled = checkBox1.Checked;
     86 
     87                    }
     88 
     89                    private void checkBox2_CheckedChanged(object sender, EventArgs e)
     90 
     91                    {
     92 
     93                           txtSex.Enabled = checkBox2.Checked;
     94 
     95                    }
     96 
     97                    private void benSelectUserNameAndSex_Click(object sender, EventArgs e)
     98 
     99                    {
    100 
    101                           //准备基本的SQL语句和连接字符串
    102 
    103                           string sql = @" select stuId, stuName, stuSex, stuBirthdate, stuStudydate, stuAddress, stuEmail, stuPhone, stuIsDel, stuInputtime
    104 
    105                                         from Student";
    106 
    107                           String connStr = @"server=HYL;database=testDataBase; uid=sa;pwd=saa";
    108 
    109                           List<string> paralist = new List<string>();
    110 
    111                           List<SqlParameter> sqlList = new List<SqlParameter>();
    112 
    113                           if (checkBox1.Checked)
    114 
    115                           {
    116 
    117                                  paralist.Add("stuName=@stuName");
    118 
    119                                  sqlList.Add(new SqlParameter("@stuName", txtName2.Text.Trim()));
    120 
    121                           }
    122 
    123                           if (checkBox2.Checked)
    124 
    125                           {
    126 
    127                                  paralist.Add("stuSex=@stuSex");
    128 
    129                                  sqlList.Add(new SqlParameter("@stuSex", txtSex.Text.Trim()));
    130 
    131                           }
    132 
    133                           if (paralist.Count > 0)
    134 
    135                           {
    136 
    137                                  sql += " where " + string.Join(" and ", paralist.ToArray());
    138 
    139                           }
    140 
    141                           DataTable dt = new DataTable();
    142 
    143                           using (SqlDataAdapter sa = new SqlDataAdapter(sql, connStr))
    144 
    145                           {
    146 
    147                                  sa.SelectCommand.Parameters.AddRange(sqlList.ToArray());
    148 
    149                                  sa.Fill(dt);
    150 
    151                           }
    152 
    153                           dgvData.DataSource = dt;
    154 
    155                    } 
  • 相关阅读:
    Java 引用传递和值传递
    jenkins 自动化部署 spring boot 项目(多图)
    Mybatis学习笔记,持续更新
    ubuntu 安装并远程连接redis
    ubuntu redis 集群安装,超简单多图细腻操作
    ubuntu16.04 的 使用笔记
    阿里云 ubuntu16.04 下 ftp 的快速应用(包罗疑难问题解决方案)
    k8s的#容器镜像
    kubectl命令出现【The connection to the server localhost:8080 was refused
    CIDR无类别域间路由
  • 原文地址:https://www.cnblogs.com/hanyinglong/p/2694531.html
Copyright © 2020-2023  润新知