ADO.NET数据访问技术和简单的添加数据合查询演示

版权声明:Copyright:@@个人所有 https://blog.csdn.net/y20_20/article/details/90724090

ADO.NET数据访问技术和简单的添加数据演示

目录

一、ADO.NET的优点
二、应用程序端连接数据库的一些对象
三、SQL语句插入数据示例
四、带参数的SQL语句插入数据示例
五、利用带参数的存储过程插入数据示例

一、ADO.NET的优点

1、优点:.NET平台提供一系列数据访问对象,开发者利用这些对象可以在应用程序端很轻松的完成对数据库的操作
2、面向的数据库: SQLserver,MySQL,Oracle,access,Excel等

二、应用程序端连接数据库的一些对象

1、数据库连接的一些基本问题:

  1. 我们要连接的数据库在哪里?数据库的服务器或者IP地址(IP或者服务器名称)
  2. 我们要连接的数据库时哪一个?数据库的名称(database)
  3. 找到数据库在哪里后,应该怎么连接?通过账号 和密码连接(userID和password)

2、对这些问题的组织方式: 将这些问题统一拼接成字符串即可。样式:
string connString=@"Server=CHINA-20181227Q\server;DataBase=SMDB;User Id = sa; Password=123456";
3、ADO.NET提供的一些对象
1、connection(SQLconnection)对象: 连接数据库

  1. connectionString属性:将连接字符串给这个属性
  2. open():打开数据库连接方法
  3. close():关闭数据库连接方法

2、command(SQLcommand)对象: 发送和执行命令

  1. commandText属性=SQL语句或者存储过程名称
  2. connection连接对象=所创建的连接对象
  3. 方法:ExecuteNonQuery():执行增、删、改操作,返回的是受影响的行数。结果>=1表示成功;结果=0表示不执行;结果=-1表示出错
  4. 方法:ExecuteScalar():查询单一结果,单行当列,返回的是对象类型(有可能为itn,也有可能为字符串类型等)
  5. 方法:ExecuteReader():查询一个还没有读取数据的结果集,用Read()方法看看有没有查到 数据,用NextResult()方法看是否还存在下一个结果集,返回的类型是 SqlDataReader类型。
  6. DataSet数据集对象
  7. DataAdapter对象

三、SQL语句插入数据示例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//引入操作数据库所需要的命名空间
using System.Data;
using System.Data.SqlClient;

namespace text2
{
    class Program
    {
        //连接字符串
        private static readonly string connString=@"Server=CHINA-20181227Q\server;DataBase=SMDB;User Id = sa; Password=123456";

        /// <summary>
        /// 主方法,程序的入口
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            //TestConnectionDB();
            //Console.WriteLine(Insert().ToString());
            //Query();
            //Query1();
            //InsertByParam();
            InsertByProcedure();
            Console.ReadKey();
        }

        /// <summary>
        /// 测试连接对象是否打开的方法
        /// </summary>
        public static void TestConnectionDB()
        {
            SqlConnection conn = new SqlConnection(connString);
            conn.Open();
            if (conn.State == ConnectionState.Open)//判断数据库的连接状态是否是打开的
                Console.WriteLine("数据库已经连接对象已经打开");
            conn.Close();
            if (conn.State == ConnectionState.Closed)//判断数据库的连接状态是否是关闭的
                Console.WriteLine("数据库连接已经关闭!");

        }

        //向数据库中插入数据的方法
        public static int Insert()
        {
            SqlConnection conn = new SqlConnection(connString);
            string sql = "insert into Students(studentName,gender,birthday,age,studentidno,classid) values('张贱人','女','1998-02-10',18,123456789987654321,2)";
            SqlCommand cmd = new SqlCommand(sql,conn);
            conn.Open();
            int result= cmd.ExecuteNonQuery();
            conn.Close();
            return result;
        }
	}
}


查询一个结果集合两个(多个)结果集的方法:

  /// <summary>
        /// 查询一个结果集方法
        /// </summary>
        public static void Query()
        {
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = conn;
            cmd.CommandText = "select studentname,age,classid from students";
            conn.Open();
            SqlDataReader objReader = cmd.ExecuteReader();
            //循环读取
            while (objReader.Read())
            {
                Console.WriteLine($"{objReader["studentname"]}\t{objReader["age"]}\t{objReader["classid"]}");
            }
            objReader.Close();
            conn.Close();
        }

        /// <summary>
        /// 查询多个结果集的方法
        /// </summary>
        public static void Query1()
        {
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = conn;
            cmd.CommandText = "select studentname,age,classid from students;select studentaddress,gender from students";
            conn.Open();
            SqlDataReader objReader = cmd.ExecuteReader();
            //循环读取
            Console.WriteLine("----------------------------第一个结果集的内容-----------------------------------------------");
            while (objReader.Read())
            {
                Console.WriteLine($"{objReader["studentname"]}\t\t{objReader["age"]}\t\t{objReader["classid"]}");
            }
            //判断下一条SQL语句是否有数据
            if (objReader.NextResult())
            {
                Console.WriteLine("----------------------------------下一个结果集读取的内容:----------------------------------------");
                while (objReader.Read())
                {
                    Console.WriteLine($"{objReader["studentaddress"]}\t\t{objReader["gender"]}");
                }
            }
            objReader.Close();
            conn.Close();
        }

四、带参数的SQL语句插入数据示例

 public static void InsertByParam()
        {
            //带参数的SQL语句,防范SQL注入攻击
            string sql = "insert into Students(studentName,gender,birthday,age,studentidno,classid) values(@studentName,@gender,@birthday,@age,@studentidno,@classid)";


            //要添加的数据(可以是表单获取的,也可以是窗体控件获取的)
            string studentName = "山运维";//参数不能为空,并且不能出现多参数和少参数的情况
            string gender = "男";
            DateTime birthday = Convert.ToDateTime("1998-07-21");
            int age = 18;
            string  studentidno = "852074196385201234";
            int classid = 2;

            //将参数放在参数数组中
            SqlParameter[] param = new SqlParameter[]
            {
                new SqlParameter("@studentname",studentName),
                new SqlParameter("@gender",gender),
                new SqlParameter("@birthday",birthday),
                new SqlParameter("@age",age),
                new SqlParameter("@studentidno",studentidno),
                new SqlParameter("@classid",classid)
            };

            Console.WriteLine(Update(sql,param));
        }

 /// <summary>
        /// insert、delete、update统一数据库操作方法
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="param">参数默认值为null</param>
        /// /// <param name="IsProcedure">是否是存储过程</param>
        /// <returns></returns>
        public static int  Update(string sql,SqlParameter[] param=null,bool IsProcedure=false)
        {
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand(sql,conn);

            if (IsProcedure)//判断传递进来的是否是存储过程
            {
                cmd.CommandType = CommandType.StoredProcedure;
            }

            if (param != null)
            {
                cmd.Parameters.AddRange(param);//如果这条语句没加,可能提示参数错误问题
            }
            conn.Open();
            int result= cmd.ExecuteNonQuery();
            conn.Close();
            return result;
        }

五、利用带参数的存储过程插入数据示例
数据库端创建存储过程:

--创建一个存储过程
if exists(select * from sysobjects where name='usp_InsertStudent')
drop procedure usp_InsertStudent
go
create procedure usp_InsertStudent
--存储过程参数
	@studentName varchar(20),
	@gender char(2),
	@birthday smalldatetime,
	@age int,
	@studentidno numeric(18,0),
	@classid int
as
	insert into Students(studentName,gender,birthday,age,studentidno,classid)
	 values(@studentName,@gender,@birthday,@age,@studentidno,@classid)
go

应用程序代码:

  public static void InsertByProcedure()
        {
            ////带参数的SQL语句,防范SQL注入攻击
            //string sql = "insert into Students(studentName,gender,birthday,age,studentidno,classid) values(@studentName,@gender,@birthday,@age,@studentidno,@classid)";


            //要添加的数据(可以是表单获取的,也可以是窗体控件获取的)
            string studentName = "山运维";//参数不能为空,并且不能出现多参数和少参数的情况
            string gender = "男";
            DateTime birthday = Convert.ToDateTime("1998-07-21");
            int age = 18;
            string studentidno = "852074196385201234";
            int classid = 2;

            //将参数放在参数数组中
            SqlParameter[] param = new SqlParameter[]
            {
                new SqlParameter("@studentname",studentName),
                new SqlParameter("@gender",gender),
                new SqlParameter("@birthday",birthday),
                new SqlParameter("@age",age),
                new SqlParameter("@studentidno",studentidno),
                new SqlParameter("@classid",classid)
            };

            Console.WriteLine(Update("usp_InsertStudent", param, true));
        }

/// <summary>
        /// insert、delete、update统一数据库操作方法
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="param">参数默认值为null</param>
        /// /// <param name="IsProcedure">是否是存储过程</param>
        /// <returns></returns>
        public static int  Update(string sql,SqlParameter[] param=null,bool IsProcedure=false)
        {
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand(sql,conn);

            if (IsProcedure)//判断传递进来的是否是存储过程
            {
                cmd.CommandType = CommandType.StoredProcedure;
            }

            if (param != null)
            {
                cmd.Parameters.AddRange(param);//如果这条语句没加,可能提示参数错误问题
            }
            conn.Open();
            int result= cmd.ExecuteNonQuery();
            conn.Close();
            return result;
        }

六、所有的操作原码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//引入操作数据库所需要的命名空间
using System.Data;
using System.Data.SqlClient;

namespace text2
{
    class Program
    {
        //连接字符串
        private static readonly string connString=@"Server=CHINA-20181227Q\server;DataBase=SMDB;User Id = sa; Password=123456";

        /// <summary>
        /// 主方法,程序的入口
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            TestConnectionDB();
            Console.WriteLine(Insert().ToString());
            Query();
            Query1();
            InsertByParam();
            InsertByProcedure();
            Console.ReadKey();
        }

        /// <summary>
        /// 测试连接对象是否打开的方法
        /// </summary>
        public static void TestConnectionDB()
        {
            SqlConnection conn = new SqlConnection(connString);
            conn.Open();
            if (conn.State == ConnectionState.Open)//判断数据库的连接状态是否是打开的
                Console.WriteLine("数据库已经连接对象已经打开");
            conn.Close();
            if (conn.State == ConnectionState.Closed)//判断数据库的连接状态是否是关闭的
                Console.WriteLine("数据库连接已经关闭!");

        }

        //向数据库中插入数据的方法
        public static int Insert()
        {
            SqlConnection conn = new SqlConnection(connString);
            string sql = "insert into Students(studentName,gender,birthday,age,studentidno,classid) values('张贱人','女','1998-02-10',18,123456789987654321,2)";
            SqlCommand cmd = new SqlCommand(sql,conn);
            conn.Open();
            int result= cmd.ExecuteNonQuery();
            conn.Close();
            return result;
        }

        /// <summary>
        /// 查询一个结果集方法
        /// </summary>
        public static void Query()
        {
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = conn;
            cmd.CommandText = "select studentname,age,classid from students";
            conn.Open();
            SqlDataReader objReader = cmd.ExecuteReader();
            //循环读取
            while (objReader.Read())
            {
                Console.WriteLine($"{objReader["studentname"]}\t{objReader["age"]}\t{objReader["classid"]}");
            }
            objReader.Close();
            conn.Close();
        }

        /// <summary>
        /// 查询多个结果集的方法
        /// </summary>
        public static void Query1()
        {
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = conn;
            cmd.CommandText = "select studentname,age,classid from students;select studentaddress,gender from students";
            conn.Open();
            SqlDataReader objReader = cmd.ExecuteReader();
            //循环读取
            Console.WriteLine("----------------------------第一个结果集的内容-----------------------------------------------");
            while (objReader.Read())
            {
                Console.WriteLine($"{objReader["studentname"]}\t\t{objReader["age"]}\t\t{objReader["classid"]}");
            }
            //判断下一条SQL语句是否有数据
            if (objReader.NextResult())
            {
                Console.WriteLine("----------------------------------下一个结果集读取的内容:----------------------------------------");
                while (objReader.Read())
                {
                    Console.WriteLine($"{objReader["studentaddress"]}\t\t{objReader["gender"]}");
                }
            }
            objReader.Close();
            conn.Close();
        }

        public static void InsertByParam()
        {
            //带参数的SQL语句,防范SQL注入攻击
            string sql = "insert into Students(studentName,gender,birthday,age,studentidno,classid) values(@studentName,@gender,@birthday,@age,@studentidno,@classid)";


            //要添加的数据(可以是表单获取的,也可以是窗体控件获取的)
            string studentName = "山运维";//参数不能为空,并且不能出现多参数和少参数的情况
            string gender = "男";
            DateTime birthday = Convert.ToDateTime("1998-07-21");
            int age = 18;
            string  studentidno = "852074196385201234";
            int classid = 2;

            //将参数放在参数数组中
            SqlParameter[] param = new SqlParameter[]
            {
                new SqlParameter("@studentname",studentName),
                new SqlParameter("@gender",gender),
                new SqlParameter("@birthday",birthday),
                new SqlParameter("@age",age),
                new SqlParameter("@studentidno",studentidno),
                new SqlParameter("@classid",classid)
            };

            Console.WriteLine(Update(sql,param));
        }

        public static void InsertByProcedure()
        {
            ////带参数的SQL语句,防范SQL注入攻击
            //string sql = "insert into Students(studentName,gender,birthday,age,studentidno,classid) values(@studentName,@gender,@birthday,@age,@studentidno,@classid)";


            //要添加的数据(可以是表单获取的,也可以是窗体控件获取的)
            string studentName = "山运维";//参数不能为空,并且不能出现多参数和少参数的情况
            string gender = "男";
            DateTime birthday = Convert.ToDateTime("1998-07-21");
            int age = 18;
            string studentidno = "852074196385201234";
            int classid = 2;

            //将参数放在参数数组中
            SqlParameter[] param = new SqlParameter[]
            {
                new SqlParameter("@studentname",studentName),
                new SqlParameter("@gender",gender),
                new SqlParameter("@birthday",birthday),
                new SqlParameter("@age",age),
                new SqlParameter("@studentidno",studentidno),
                new SqlParameter("@classid",classid)
            };

            Console.WriteLine(Update("usp_InsertStudent", param, true));
        }

        /// <summary>
        /// insert、delete、update统一数据库操作方法
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="param">参数默认值为null</param>
        /// /// <param name="IsProcedure">是否是存储过程</param>
        /// <returns></returns>
        public static int  Update(string sql,SqlParameter[] param=null,bool IsProcedure=false)
        {
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand(sql,conn);

            if (IsProcedure)//判断传递进来的是否是存储过程
            {
                cmd.CommandType = CommandType.StoredProcedure;
            }

            if (param != null)
            {
                cmd.Parameters.AddRange(param);//如果这条语句没加,可能提示参数错误问题
            }
            conn.Open();
            int result= cmd.ExecuteNonQuery();
            conn.Close();
            return result;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/y20_20/article/details/90724090