ado增删改查的几种方式

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;//包含数据集/数据表/数据行... 类
using System.Data.SqlClient;//包含 连接/命令/适配器/读取器 类


namespace Ado_netPractise
{
    class Program
    {
        static void Main(string[] args)
        {
            //TestConnection();
            //AddRecord();
            //DelRecord();
            //SoftDelRecord();
            //QuerySingle();
            //QueryList();
            //QueryListByGet();
            //QueryListByAdapter();
            //QueryListByProc();
            QueryListProc3();
            Console.Read();
        }
        //server 指定要连接的数据库所在的服务器IP;database 要连接的数据库;windows集成身份验证=true
        static string conStr = @"server=.;database=SimpleArticle;Integrated Security=True;";


        #region 1.测试连接通道
        /// <summary>
        /// 测试连接通道
        /// </summary>
        public static void TestConnection()
        {
            //1.连接通道的连接字符串
            //string conStr = @"server=.;database=SimpleArticle;Integrated Security=True;";
            //2.连接通道对象
            SqlConnection conn = new SqlConnection(conStr);
            //3.打开通道
            conn.Open();
            //4.关闭通道
            conn.Close();


            //SqlConnection conn2 = new SqlConnection();
            //conn2.ConnectionString = conStr;


            Console.WriteLine("连接对象新建操作成功~~~~:)");
        }
        #endregion


        #region 2.新增记录
        /// <summary>
        /// 新增记录
        /// </summary>
        public static void AddRecord()
        {
            int res = -1;//准备接受新增受影响的行数
            string sqlCon = "server=.;database=SimpleArticle;Integrated Security=True;";
            //1.新建连接通道
            SqlConnection conn = new SqlConnection();
            //2.手动为连接通道对象指定连接字符串
            conn.ConnectionString = sqlCon;
            //3.准备新增的sql命令
            string sqlStr = "insert into Book(b_cid,b_title,b_content,b_author,b_money,b_isdel) values(2,'没有控件的ASP.NET','内容','未知',10,0)";
            //4.新建命令对象(工人),并且告诉他要走哪条路(conn)去做什么事情(sqlStr)
            SqlCommand cmd = new SqlCommand(sqlStr, conn);
            //cmd.CommandText = sqlStr;
            //cmd.Connection = conStr;
            //5.打开连接通道
            conn.Open();
            //6.调用方法去数据库执行sql语句
            res = cmd.ExecuteNonQuery();//执行非查询语句,此方法负责 增删改,返回受影响行数(int)
            //7.关闭连接通道
            conn.Close();
            if (res > 0)
            {
                Console.WriteLine("新增成功啦~~:)");
            }
            else
            {
                Console.WriteLine("新增失败啦~~:(");
            }
        } 
        #endregion


        #region 3.删除记录
        /// <summary>
        /// 删除记录
        /// </summary>
        public static void DelRecord()
        {
            int res = -1;//准备接受新增受影响的行数
            string sqlCon = "server=.;database=SimpleArticle;Integrated Security=True;";
            //1.新建连接通道
            SqlConnection conn = new SqlConnection(sqlCon);
            //3.准备新增的sql命令
            string sqlStr = "delete book where b_id=34";
            //4.新建命令对象(工人),并且告诉他要走哪条路(conn)去做什么事情(sqlStr)
            SqlCommand cmd = new SqlCommand(sqlStr, conn);
            //5.打开连接通道
            conn.Open();
            //6.调用方法去数据库执行sql语句
            res = cmd.ExecuteNonQuery();//此方法负责 增删改,返回受影响行数(int)
            //7.关闭连接通道
            conn.Close();
            if (res > 0)
            {
                Console.WriteLine("删除成功啦~~:)");
            }
            else
            {
                Console.WriteLine("删除失败啦~~:(");
            }
        }
        #endregion


        #region 4.软删除记录 -- 更新语句
        /// <summary>
        /// 软删除记录
        /// </summary>
        public static void SoftDelRecord()
        {
            int res = -1;//准备接受新增受影响的行数
            string sqlCon = "server=.;database=SimpleArticle;Integrated Security=True;";
            //1.新建连接通道
            SqlConnection conn = new SqlConnection();
            //2.手动指定连接字符串
            conn.ConnectionString = sqlCon;
            //3.准备新增的sql命令
            string sqlStr = "update book set b_isdel=1 where b_cid=2";//删除是true(1),没删除是false(0)
            //4.新建命令对象(工人),并且告诉他要走哪条路(conn)去做什么事情(sqlStr)
            SqlCommand cmd = new SqlCommand(sqlStr, conn);
            //5.打开连接通道
            conn.Open();
            //6.调用方法去数据库执行sql语句
            res = cmd.ExecuteNonQuery();//此方法负责 增删改,返回受影响行数(int)
            //7.关闭连接通道
            conn.Close();
            if (res > 0)
            {
                Console.WriteLine("软删除记录成功啦~~:)");
            }
            else
            {
                Console.WriteLine("软删除记录失败啦~~:(");
            }
        }
        #endregion


        #region 5.查询单个值
        /// <summary>
        /// 5.查询单个值
        /// </summary>
        public static void QuerySingle()
        {
            SqlConnection con = new SqlConnection(conStr);
            //string sqlStr = "select count(*) from Book";
            string sqlStr = "select * from Book";
            SqlCommand cmd = new SqlCommand(sqlStr, con);
            con.Open();
            //调用此方法,获得查询语句在数据库执行后得到的结果集的第一个单元格的值,返回类型是object
            object obj = cmd.ExecuteScalar();
            con.Close();
            Console.WriteLine(obj.ToString());
        } 
        #endregion


        //6.查询多行数据
        //数据读取器通过连接通道在数据库中维护一个结果集,每次执行Read()方法去数据库的这个结果集中拿取下一行数据
        #region 6.1查询多行数据--DataReader,逐行读取,通过下标访问列
        /// <summary>
        /// 6.1查询多行数据--DataReader,逐行读取,通过下标访问列
        /// </summary>
        public static void QueryListByDrIndex()
        {
            SqlConnection con = new SqlConnection(conStr);
            string sqlStr = "select * from Book";
            SqlCommand cmd = new SqlCommand(sqlStr, con);
            con.Open();
            //调用此方法 获得一个 读取器对象
            SqlDataReader dr = cmd.ExecuteReader();
            if (dr.HasRows)//如果结果集有数据行,则为true,否则为false
            {
                while (dr.Read())//read方法,如果读到下一行数据,则返回true,而且dr本身就等于那一行数据
                {
                    Console.WriteLine(dr[0].ToString() + "_" + dr[1].ToString() + "_" + dr[2].ToString());
                }
            }
            else Console.WriteLine("无数据");
            dr.Close();//关闭读取器
            con.Close();//关闭连接通道
        } 
        #endregion


        #region 6.1查询多行数据--DataReader,逐行读取,通过结果集的列名访问数据
        /// <summary>
        /// 6.1查询多行数据--DataReader,逐行读取,通过结果集的列名访问数据
        /// </summary>
        public static void QueryListByColName()
        {
            SqlConnection con = new SqlConnection(conStr);
            string sqlStr = "select * from Book";
            SqlCommand cmd = new SqlCommand(sqlStr, con);
            con.Open();
            //调用此方法 获得一个 读取器对象
            SqlDataReader dr = cmd.ExecuteReader();
            if (dr.HasRows)
            {
                while (dr.Read())//read方法,如果读到下一行数据,则返回true,而且dr本身就等于那一行数据
                {
                    Console.WriteLine(dr["b_id"].ToString() + "_" + dr["b_title"].ToString() + "_" + dr["b_cid"].ToString());
                }
            }
            else Console.WriteLine("无数据");
            dr.Close();
            con.Close();
        } 
        #endregion


        #region 6.3查询多行数据--DataReader,逐行读取,通过结果集的列名访问数据
        /// <summary>
        /// 6.3查询多行数据--DataReader,逐行读取,通过Get—方法
        /// </summary>
        public static void QueryListByGet()
        {
            SqlConnection con = new SqlConnection(conStr);
            string sqlStr = "select * from Book";
            SqlCommand cmd = new SqlCommand(sqlStr, con);
            con.Open();
            //调用此方法 获得一个 读取器对象
            SqlDataReader dr = cmd.ExecuteReader();
            if (dr.HasRows)
            {
                while (dr.Read())//read方法,如果读到下一行数据,则返回true,而且dr本身就等于那一行数据
                {
                    Console.WriteLine(dr.GetInt32(0) + "_{0}_" + dr.GetString(2) + "_" + dr.GetInt32(1),"占位符");
                    //object o = dr.GetValue(0);//以object方式拿出数据
                    //Console.WriteLine(o.ToString());
                    //dr.GetOrdinal("b_cid");//传入列名,找到它在结果集中的下标
                }
            }
            else Console.WriteLine("无数据");
            dr.Close();
            con.Close();
        }
        #endregion


        //7.使用适配器读取数据


        #region 7.1使用适配器填充数据集
        /// <summary>
        /// 7.1使用适配器填充数据集
        /// </summary>
        public static void QueryListByAdapter()
        {
            SqlConnection conn = new SqlConnection(conStr);
            string sqlStr = "select * from book";
            //创建适配器对象,告诉它要做什么事情,走哪条路去
            SqlDataAdapter da = new SqlDataAdapter(sqlStr, conn);//不需要代码打开和关闭连接通道
            //创建数据集对象(程序端的临时数据库)
            DataSet ds = new DataSet();
            //调用fill方法,填充数据集。(先去数据库查询结果集,并把结果集返回赋值给数据集。)
            da.Fill(ds);
            //获得数据集中的第一张表
            DataTable dt = ds.Tables[0];
            //循环数据表中的每一行
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                DataRow dr = dt.Rows[i];//将循环到的行拿出来给dr对象
                //通过下标获得者一行的某列的值
                Console.WriteLine(dr[0].ToString() + " __ " + dr["b_title"]);
            }
        }
        #endregion


        //7.2使用适配器填充数据表
        #region 7.2使用适配器填充数据表
        /// <summary>
        /// 7.2使用适配器填充数据表
        /// </summary>
        public static void QueryListByAdapter2()
        {
            SqlConnection conn = new SqlConnection(conStr);
            string sqlStr = "select * from book";
            //创建适配器对象,告诉它要做什么事情,走哪条路去
            SqlDataAdapter da = new SqlDataAdapter(sqlStr, conn);//不需要代码打开和关闭连接通道
            //创建数据表对象
            DataTable dt = new DataTable();
            //调用fill方法,填充数据集。(先去数据库查询结果集,并把结果集返回赋值给数据集。)
            da.Fill(dt);
            //循环数据表中的每一行
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                DataRow dr = dt.Rows[i];//将循环到的行拿出来给dr对象
                //通过下标获得者一行的某列的值
                Console.WriteLine(dr[0].ToString() + " __ " + dr["b_title"]);
            }
        }
        #endregion


        //8.调用存储过程


        //8.1调用存储过程
        public static void QueryListByProc()
        {
            SqlConnection conn = new SqlConnection(conStr);
            SqlCommand cmd = new SqlCommand("usp_GetBookByCateId",conn);
            cmd.CommandType = CommandType.StoredProcedure;//指定 命令类型 为 存储过程
            SqlParameter sp = new SqlParameter();//指定 存储过程 中的 参数
            sp.ParameterName = "@cateId";
            sp.SqlDbType = SqlDbType.Int;
            //sp.Size=4;
            sp.Value = 2;
            cmd.Parameters.Add(sp);//将 参数 对象 加入到命令对象的参数集合中
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            da.Fill(dt);
            foreach (DataRow dr in dt.Rows)
            {
                Console.WriteLine(dr[0].ToString() + " __ "+dr[1].ToString() + " __ " + dr["b_title"]);
            }
        }


        //8.1.1调用含多个参数的存储过程
        #region 8.1.1调用含多个参数的存储过程
        /// <summary>
        /// 8.1.1调用含多个参数的存储过程
        /// </summary>
        public static void QueryListByProc2()
        {
            string sqlCon = "server=.;database=SimpleArticle;Integrated Security=True;";
            SqlConnection conn = new SqlConnection(sqlCon);
            SqlCommand cmd = new SqlCommand("proGetPageData", conn);
            cmd.CommandType = CommandType.StoredProcedure;//指定作为存储过程执行
            //SqlParameter p = new SqlParameter("@aa", SqlDbType.Int);
            //SqlParameter p = new SqlParameter("@aa", 8);
            SqlParameter[] paras ={ 
                new SqlParameter("@pageIndex", SqlDbType.Int,4),
                new SqlParameter("@pageSize", SqlDbType.Int,4)
            };
            paras[0].Value = 1;//设置搜索第1页
            paras[1].Value = 3;//设置每页显示3条
            cmd.Parameters.AddRange(paras);//为cmd对象添加 参数数组
            SqlDataAdapter da = new SqlDataAdapter(cmd);//创建 适配器
            DataTable dt = new DataTable();//创建 数据表(程序端)
            da.Fill(dt);
            foreach (DataRow dr in dt.Rows)
            {
                Console.WriteLine(dr[0].ToString() + " -- " + dr[1].ToString() + " -- " + dr[2].ToString());
            }
        } 
        #endregion


        //8.2调用带输出参数存储过程


        #region 8.2调用带输出参数存储过程
        /// <summary>
        /// 8.2调用带输出参数存储过程
        /// </summary>
        public static void QueryListProc3()
        {
            SqlConnection conn = new SqlConnection(conStr);
            SqlCommand cmd = new SqlCommand("proGetPageData2", conn);
            cmd.CommandType = CommandType.StoredProcedure;//指定为存储过程
            SqlParameter[] paras ={ 
                new SqlParameter("@pageIndex",SqlDbType.Int),
                new SqlParameter("@pageSize",SqlDbType.Int),
                new SqlParameter("@pageCount",SqlDbType.Int),
                new SqlParameter("@rowCount",SqlDbType.Int)
            };
            paras[0].Value = 2;//页码
            paras[1].Value = 2;//页容量
            paras[2].Direction = ParameterDirection.Output;//设置参数的输出方向
            paras[3].Direction = ParameterDirection.Output;//设置参数的输出方向
            cmd.Parameters.AddRange(paras);//讲参数加入命令对象
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            da.Fill(dt);
            foreach (DataRow dr in dt.Rows)
            {
                Console.WriteLine(dr[0].ToString() + " -- " + dr[1].ToString() + " -- " + dr[2].ToString());
            }
            int pageCount = Convert.ToInt32(cmd.Parameters[2].Value);
            int rowCount = Convert.ToInt32(cmd.Parameters[3].Value);
            Console.WriteLine("pageCount=" + pageCount + ",rowCount=" + rowCount);
        } 
        #endregion
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值