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();
        }

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

原文地址:https://www.cnblogs.com/longxinyv/p/12171507.html