我是一个菜鸟,我只是在努力,2021正视自己,面对2021!

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                    } 
posted @ 2012-09-20 00:06  Kencery  阅读(892)  评论(4编辑  收藏  举报
友情链接:初心商城