Ado常用对象

Connection

Connection: 用于连接数据库的对象,表示到数据源的一个唯一的连接。主要是开启程序和数据库之间的连接。没有利用连接对象将数据库打开,是无法从数据库中取得数据的。Close和Dispose的区别,Close以后还可以Open,Dispose以后则不能再用。

Command

Command:主要可以用来对数据库发出一些指令,例如可以对数据库下达查询、新增、修改、删除数据等指令,以及调用存在数据库中的存储过程等。这个对象是架构在Connection 对象上,也就是Command 对象是透过连接到数据源。

DataAdapter

DataAdapter:主要是在数据源以及DataSet 之间执行数据传输的工作,它可以透过Command 对象下达命令后,并将取得的数据放入DataSet 对象中。这个对象是架构在Command对象上,并提供了许多配合DataSet 使用的功能。

DataSet :

DataSet:表示内存中数据的缓存(可以视为一个暂存区),可以把它想像成一个临时的数据库,可以把从数据库中所查询到的数据保留起来,甚至可以将整个数据库显示出来,DataSet是放在内存中的。DataSet 的能力不只是可以储存Table 而已,还可以透过DataAdapter对象取得一些例如主键等的数据表结构,并可以记录数据表间的关联。DataSet 对象可以说是ADO.NET 中重量级的对象,这个对象架构在DataAdapter对象上,本身不具备和数据源沟通的能力;也就是说我们是将DataAdapter对象当做DataSet 对象以及数据源间传输数据的桥梁。DataSet可以存多个表DataTable、DataTableTable包含若干DataRow,而且是断开式的,不用每进行一次操作就对数据库进行更新,从而提高了效率。

DataReader

DataReader:当我们只需要循序的读取数据而不需要其它操作时,可以使用DataReader 对象。DataReader对象只是一次一笔向下循序的读取数据源中的数据,这些数据是存在数据库服务器中的,而不是一次性加载到程序的内存中的,只能[通过游标(游标是处理结果集的一种机制,它可以定位到结果集中的某一行,多数据进行读写,也可以移动游标定位到你所需要的行中进行操作数据。)]读取当前行的数据,而且这些数据是只读的,并不允许作其它的操作。DataReader对象与DataSet最大的不同是有连接式的,每次对数据库进行存取都会影响到数据库。但是DataReader 在读取数据的时候限制了每次只读取一笔,而且只能只读,所以使用起来不但节省资源而且效率很好。并且使用DataReader 对象除了效率较好之外,因为不用把数据全部传回,故可以降低网络的负载。

*总结

ADO.NET 使用Connection 对象来连接数据库,使用Command 或DataAdapter对象来执行SQL语句,并将执行的结果返回给DataReader 或 DataAdapter ,然后再使用取得的DataReader 或DataAdapter 对象操作数据结果。

1、Connection (连接数据库)           --连接对象

2、Command (执行T SQL语句)          -------命名

3、DataAdapter (用户填充DataSet,断开模式)    --数据适配器对象

4、DataReader (读取数据库,一种只读模式,只向前的)    ---数据阅读器

5、DataSet (数据集,好比电脑的内存)   -----数据集

Ado.net常用操作数据库语句(增删改查)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Model;
using System.Data.SqlClient;//引用命名空间
using System.Data;
using Newtonsoft.Json;

namespace DAL
{
    public class UserInfoDAL
    {
        /// <summary>
        /// 验证用户信息
        /// </summary>
        /// <param name="user">用户对象</param>
        /// <returns></returns>
        public bool SelectUser(UserInfo user)
        {
            //1,连接数据库,实例化连接对象
            string constr = @"server=(localdb)\MSSQLLocalDB;database=Nes;uid=sa;pwd=123456";
            SqlConnection conn = new SqlConnection(constr);
            //1,2打开数据库
            conn.Open();
            //2,执行查询的sql命令
            //string sql = "select * from UserInfo where User_Name='" + user.User_Name + "'and User_Pwd='" + user.User_Pwd+"'";
           string sql = string.Format("select * from UserInfo where User_Name={0}& User_Pwd={1}", user.User_Name, user.User_Pwd);

            //2.1实例化命令对象
            SqlCommand cmd = new SqlCommand(sql, conn);
            object result = cmd.ExecuteScalar();     //返回查询结果的第一行第一列
            //2,2关闭连接
            conn.Close();
            //3,判断是否查询到结果成功
            if (result!=null)
            {
                return true;
            }
            else
            {
                return false;
            }

        }

        //2,插入用户信息
        public bool insertUser(UserInfo user)
        {
            //1,建立和数据库的连接
            //1.1实例化连接对象,连接字符串的设置可以通过实例化对象的时候使用,也可以通过设置属性
              string constr = @"server=(localdb)\MSSQLLocalDB;database=Nes;uid=sa;pwd=123456";//sql server身份验证

            SqlConnection conn = new SqlConnection(constr);
            //1.2打开连接
            conn.Open();
            //2,实例化命令对象
            string sql = "insert into UserInfo values('" + user.User_Name + "','" + user.User_Pwd + "','" + user.User_Tel + "')";
            //string sql2 = string.Format("insert into UserInfo values('{0}', '{1}', '{2}')", user.User_Name, user.User_Pwd, user.User_Tel);
            SqlCommand cmd = new SqlCommand(sql,conn);
            int rs = cmd.ExecuteNonQuery();
             conn.Close();
            //2.1执行完成命令,要关闭连接
            if (rs > 0)
            {
                return true;
            }
            else
            {
                return false;
            }

        }

        //3,查询所有用户信息
        public DataTable SelectAllUser()
        {
            //1,建立和数据库的连接
            //1.1创建连接字符串,连接字符串的设置可以通过实例化对象的时候使用,也可以通过设置属性
            string constr = @"server=(localdb)\MSSQLLocalDB;database=Nes;uid=sa;pwd=123456";//sql server身份验证

            //2,实例化适配器对象
            string sql = "select * from UserInfo";
            //3,利用数据适配器和数据集来进行获取大量数据
            SqlDataAdapter sda = new SqlDataAdapter(sql, constr);
            //4,利用适配器对象来填充数据集(内存)  数据集(dataset) 是数据表(datatable)的集合  表的索引从0开始
            DataSet ds = new DataSet();
            DataTable table = new DataTable();
            sda.Fill(ds);
            ////把datatable序列化成json字符串
            ////string json = JsonConvert.SerializeObject(ds.Tables[0]);
            //List<UserInfo> list = new List<UserInfo>();
            //for (int i = 0; i < table.Rows.Count; i++)
            //{
            //    //int id = table.Rows[i].Field<int>("User_Id");


            //    UserInfo user = new UserInfo();
            //    object[] array = table.Rows[i].ItemArray;
            //    list.Add(user);

            //}
            return ds.Tables[0];
        }

    }
}

删除:delete

        /// <summary>
        /// 删除数据
        /// </summary>
        public static void DelRecord()
        {
            int res = -1;
          string constr = @"server=(localdb)\MSSQLLocalDB;database=Nes;uid=sa;pwd=123456";//sql server身份验证
            SqlConnection conn = new SqlConnection();
            conn.ConnectionString = sqlCon;
            string sqlStr = "delete book where b_id=18";
            SqlCommand cmd = new SqlCommand(sqlStr, conn);
            conn.Open();
            res = cmd.ExecuteNonQuery();
            conn.Close();
            //2.1执行完成命令,要关闭连接
            if (rs > 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

更新数据:update

        /// <summary>
        /// 软删除
        /// </summary>
        public static void SoftDelRecord()
        {
            int res = -1;
           string constr = @"server=(localdb)\MSSQLLocalDB;database=Nes;uid=sa;pwd=123456";//sql server身份验证
            SqlConnection conn = new SqlConnection();
            conn.ConnectionString = sqlCon;
            string sqlStr = "update book set b_isdel=1 where b_cid=103";
            SqlCommand cmd = new SqlCommand(sqlStr, conn);
            conn.Open();
            res = cmd.ExecuteNonQuery();
            conn.Close();
            //2.1执行完成命令,要关闭连接
            if (rs > 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

查询操作:(控制台)select

(1)SqlCommand查询单个值 这里是参考CSDN

用ExecuteScalar()方法  ,返回单个值(Object)(查询结果第一行第一列的值)

   public static void QuerySingle()
        {
            SqlConnection conn = new SqlConnection(sqlCon);
            string sqlStr = "select * from book";
            SqlCommand cmd = new SqlCommand(sqlStr, conn);
            conn.Open();
            //返回的是查询结果集第一单元格的值,返回的是object类型
            object obj = cmd.ExecuteScalar();
            conn.Close();
            Console.WriteLine(obj.ToString());
        }

(2)SqlCommand查询多行

用ExecuteReader()方法

       /// <summary>
        /// 查询多行数据---DataReader逐行读取,每次读一行
        /// </summary>
        public static void QueryList()
        {
            SqlConnection con = new SqlConnection(sqlCon);
            string sqlStr = "select * from book";
            SqlCommand cmd = new SqlCommand(sqlStr, con);
            con.Open();
            SqlDataReader dr = cmd.ExecuteReader();
            if (dr.HasRows)
            {
                while (dr.Read())//dr每read()一次就读取一行
                {
 
                    //read()后,dr就是一行数据
                    object o = dr["b_title"];
                    for (int i = 0; i < dr.FieldCount; i++)
                    {
                        Console.Write(dr[i].ToString() + "\t");
                        int a = dr.GetInt32(0);
 
                    }
                    Console.Write("\n");
 
 
                }
                // Console.WriteLine("有数据");
            }
            else
            {
                Console.WriteLine("无数据");
            }
        }

这里不做过多介绍,主要是为了方便自己的复习。如果需要详细(这里只做了演示)Demo链接: https://www.lanzous.com/ib4mdyj 如果有其他不理解自行百度

上述方法还有很多地方可以优化