• ADO.NET_C#数据库访问初步认识


    1.ADO.NET:翻译成中文就是C#给我们封装好的访问数据库的方法和步骤,通过他就可以在c#中对数据库的增删改查一系列操作。

    2.ADO.NET的组成:一共分成了两个部分。
    (1)DateSet数据集:相当于一个临时数据库;断开式链接的方式:把数据库数据取到数据集里面,至于数据集和数据库是否链接不必在关心。
    (2).Net Framework:操作数据库数据的一个核心,(增删改查)操作;只读只进方式:想对数据库进行操作,就必须链接数据库。

    3..Net Framework中的四个核心对象
    (1)SqlConnection:负责链接数据库,通过创建SqlConnection对象实现数据库的链接
      A.创建链接对象-----SqlConnection 对象名 = new SqlConnection("server=.表示本地服务器名;database=数据库名;uid=登录名;pwd=密码;");
      B.打开数据库-------对象名.Open();
      C.关闭数据库-------对象名.Close();
    (2)SqlCommand:负责给数据库发送sql语句去执行操作。SqlCommand 对象名 = new SqlCommand("需要发送的增删改查slq语句",连接数据库的对象名);
      A.另外一种发送方式:
        a.创建对象---SqlCommand 对象名 = new SqlCommand();
        b.设置执行的sql语句-----对象名.CommandText="需要执行的sql语句";
        c.设置数据库连接对象----对象名.Connection="连接数据库的对象名";
      B.对象名.ExecuteScalar();----执行查询,得到单行单列,就是查询结果中第一行第一列的值,返回值的类型:Object
      C.对象名.ExecuteNonQuery();--执行(增删改)操作,返回受影响行数。返回值类型:int
      D.对象名.ExecuteReader();----执行查询,得到多行多列的值,返回值类型是结果集:SqlDataReader
    (3)SqlDataReader:负责保存多行多列的查询结果
      A.通过声明SqlDataReader对象来实现查询结果的保存和访问:SqlDataReader 对象名 = .....;
      B.对象名.Read();---每次调用.Read()方法,查询到一行数据结果,如果当前行有数据返回true,没有数据则返回false,变成后指针会移动到下一行的开始。
      C.对象名["列名"]---得到当前指针指向的行中的某一个对应列名的值 或 对象名[索引下标值] 也可以得到 ,下标0开始表示第一个列名
    (4)SqlDataAdapter:负责给数据集DataSet提供数据。称为临时数据库:Tables表集合:Tables[0]得到第一张表,Tables["表名"]得到表名的表,Rows行集合,Columns列集合。
      A.创建对象----SqlDataAdapter 对象名 = new SqlDataAdapter("需要发送的查询的slq语句",连接数据库的对象名);
      B.给数据集DataSet填充数据---对象名.Fill();

    DataSet的构成:DataSet数据集,临时表;Tables:表集合;Rows:行集合;Columns:列集合;
    
    //创建一个数据集
    DataSet ds = new DataSet();
    
    //创建一个表
    DataTable dt1 = new DataTable("userInfo");
    
    //创建列
    DataColumn c1 = new DataColumn("ID",typeof(int));
    DataColumn c2 = new DataColumn("Name",typeof(string));
    
    //将列添加到表格中
    dt1.Columns.Add(c1);
    dt1.Columns.Add(c2);
    
    //创建数据行
    DataRow dr1 = dt1.NewRow();
    dr1["ID"] = 1;
    dr1["Name"] = "张三";
    
    DataRow dr2 = dt1.NewRow();
    dr1["ID"] = 2;
    dr1["Name"] = "李四";
    
    //将行添加到表里
    dt1.Rows.Add(dr1);
    dt1.Rows.Add(dr2);
    
    //将表添加到数据集里
    ds.Tables.Add(dt1);
    
    //绑定到控件中
    this.dgvInfo.DataSource = ds.Tables["userInfo"];

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    4.通过c#查询数据库单行单列的操作步骤
    (1)导入命名空间链接数据库SqlConnection对象所在的命名空间:using System.Data.SqlClient;
    (2)创建数据库链接对象:SqlConnection conn = new SqlConnection("server=.;database=数据库名;uid=登录名;pwd=密码;");
    (3)打开数据库:conn.Open();
    (4)定义变量存放sql语句:string sql = "一条查询的slq语句";
    (5)创建数据库操作对象:SqlCommand comm = new SqlCommand(sql,conn);
    (6)调用方法,执行sql保存返回值:object obj = comm.ExecuteScalar();
    (7)处理方法的返回值:控件名.属性名 = obj;
    (8)关闭数据库释放空间:conn.Close();

         /// <summary>
            /// 查询单行单列,根据姓名查询年龄
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void button2_Click(object sender, EventArgs e)
            {
                SqlConnection conn = new SqlConnection("server=.;database=Oc;uid=sa;pwd=123456");//链接数据库
                conn.Open();
    
                var sql = string.Format("select age from userinfo where name='{0}'", textBox5.Text); //Format【格式的意思】Parse解析,类型类型转化
                SqlCommand comm = new SqlCommand(sql, conn);//把sql语句发送给数据库,
    
                object obj = comm.ExecuteScalar(); //调用方法,查询单行单列返回的是object类型
    
                textBox6.Text = obj + "";  //显示数据;这种方法转成字符串类型或者用 变量名.ToString();
    
                conn.Close();
            }

    5.通过c#属性数据库的(增删改)操作
    (1)导入命名空间链接数据库SqlConnection对象所在的命名空间:using System.Data.SqlClient;
    (2)创建数据库链接对象:SqlConnection conn = new SqlConnection("server=.;database=数据库名;uid=登录名;pwd=密码;");
    (3)打开数据库:conn.Open();
    (4)定义变量存放sql语句:string sql = "一条需要执行增删改的slq语句";
    (5)创建数据库操作对象:SqlCommand comm = new SqlCommand(sql,conn);
    (6)调用方法,执行sql保存返回值:int count = comm.ExecuteNonQuery();
    (7)处理方法的返回值:if(count>0){...成功...}else{...失败...}
    (8)关闭数据库释放空间:conn.Close();

            /// <summary>
            /// 添加
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void button3_Click(object sender, EventArgs e)
            {
                SqlConnection conn = new SqlConnection("server=.;database=Oc;uid=sa;pwd=123456");//链接数据库
                conn.Open();
    
                var sql = string.Format("insert into userinfo values('{0}','{1}',{2})", textBox2.Text, textBox3.Text, textBox4.Text); //Format【格式的意思】Parse解析,类型类型转化
                SqlCommand comm = new SqlCommand(sql, conn);//把sql语句发送给数据库,
    
                int row = comm.ExecuteNonQuery(); //调用方法,返回int,受影响的行数
    
                if (row == 1)
                {
                    MessageBox.Show("添加成功");
                }
                else {
                    MessageBox.Show("添加失败");
                }
                conn.Close();
            }

    6.通过c#查询数据库多行多列的操作步骤
    (1)导入命名空间链接数据库SqlConnection对象所在的命名空间:using System.Data.SqlClient;
    (2)创建数据库链接对象:SqlConnection conn = new SqlConnection("server=.;database=数据库名;uid=登录名;pwd=密码;");
    (3)打开数据库:conn.Open();
    (4)定义变量存放sql语句:string sql = "一条查询的slq语句";
    (5)创建数据库操作对象:SqlCommand comm = new SqlCommand(sql,conn);
    (6)调用方法,执行sql保存返回值:SqlDataReader dr = comm.ExecuteReader();
    (7)处理方法的返回值:if/while(dr.Read()){ 控件名.属性名 = dr["列名"].ToString();}
    (8)关闭SqlDataReader对象:dr.Close();
    (9)关闭数据库释放空间:conn.Close();

         public void sjk()
            {
                SqlConnection conn = new SqlConnection("server=.;database=Oc;uid=sa;pwd=123456");//链接数据库
                conn.Open();//打开数据库
    
                var sql = "select * from userinfo";
                SqlCommand comm = new SqlCommand(sql, conn);//负责执行数据库操作,把sql语句发送给数据库
    //用SqlDataReader对象来存放数据结果,他提供了read()方法获取数据库指针,每次调用read()方法,查询到行数据,指针会自动向下移动一行,继续查询,
                SqlDataReader reader = comm.ExecuteReader(); //存放的是SqlCommand提供的ExecuteReader方法
    
                if (reader.Read())//Read【识别,阅读到,查阅到】如果查阅到数据,该方法会返回一个true或false值,来表示指针指向当前行中是否有数据;
                {
                    textBox1.Text = reader["id"].ToString(); //SqlDataReader还提供了 对象名["列名"]--得到指针指向这行某个列的值
                    textBox2.Text = reader[1].ToString();//或者是列的编号,比如这里可以写reader[1].ToString();
                    textBox3.Text = reader["sex"].ToString();
                    textBox4.Text = reader["age"].ToString();
    
                    listBox1.Items.Add(reader["name"].ToString());//由于下一个reader.Read()从下一个读取,所以这里要加一句第一条数据
                }
    
                while (reader.Read()) {
                    listBox1.Items.Add(reader["name"].ToString());
                }
    
                reader.Close();//关闭对象,不关闭这些对象,在后面打开会被占用; 关闭是释放空间
                conn.Close();//关闭数据库
            }

    7.给DataGridView控件添加数据的一个步骤:他需要用到临时数据库的基本结构【DateSet】
    (1)导入命名空间链接数据库SqlConnection对象所在的命名空间:using System.Data.SqlClient;
    (2)创建数据库链接对象:SqlConnection conn = new SqlConnection("server=.;database=数据库名;uid=登录名;pwd=密码;");//由于是断开式链接就不需要调用Open和Close两个方法了
    (4)定义变量存放sql语句:string sql = "需要发送的slq语句";
    (5)创建适配器对象:SqlDataAdapter sda = new SqlDataAdapter(sql,conn);
    (6)创建数据集对象:DateSet ds = new DateSet();
    (7)调用方法,给数据集填充数据:sda.Fill(ds,"取临时表名");
    (8)将数据显示到控件:控件名.DataScourse = ds.Tables["表名/索引值"]

            public void Datagridview() 
            {
                SqlConnection conn = new SqlConnection("server=.;database=Oc;uid=sa;pwd=123456");//链接数据库
                var sql = "select * from userinfo";
    
                SqlDataAdapter sda = new SqlDataAdapter(sql, conn);//创建配置器对象,负责记载数据到DataSet,负责给数据集DataSet提供数据的
    
                DataSet ds = new DataSet();//创建数据集对象,作用是临时数据库,断开式访问数据库,表集合:Tables[0]得到第一个表,Tables["userinfo1"]得到表名的表
    
                sda.Fill(ds, "userinfo1"); //调用Fill方法负责给数据集DataSet提供数据,临时数据库那么这里就是添加临时表的意思
    
                dataGridView1.DataSource = ds.Tables["userinfo1"]; //数据绑定给控件
    
                conn.Close();
            }

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  • 相关阅读:
    数据处理:并行和性能 狼人:
    GTK+3.0终发布:诸多新特性亮相 狼人:
    微软:Windows 7 SP1将于本月正式发布 狼人:
    程序员的进化 狼人:
    TDD并不是看上去的那么美 狼人:
    Bing API 将新增 Bing 空间数据服务 狼人:
    微软产品组里的十一类人 狼人:
    Windows Phone 7“芒果”更新带来浏览器重大升级:IE Mobile 9 狼人:
    UI前沿技术:XNA颜色滚动程序 狼人:
    传递拷贝php 数组 传递 引用
  • 原文地址:https://www.cnblogs.com/longxinyv/p/12171507.html
Copyright © 2020-2023  润新知