ADO.Net——数据库操作类

Posted 这都不是事

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ADO.Net——数据库操作类相关的知识,希望对你有一定的参考价值。

操作数据类

避免代码重用、造对象太多、不能分工开发

利用面向对象的方法,把数据访问的方式优化一下,利用封装类

 

一般封装成三个类:

1.数据连接类 提供数据连接对象

需要引用命名空间: using System.Data.SqlClient;

例:

public class DBConnect
    {
        private static string connstring = "server=.;database=mydb;user=sa;pwd=123";

        public static SqlConnection Conn      //利用静态的方法 通过某个对象或方法可以获取到连接对象
        {
            get {   //只读属性
                return new SqlConnection(connstring);
            }
        }
    }

 

2.实体类 根据数据库中的表来做

比如Nation表 就建一个Nation类

表名=类名;     封装的字段=表里面的属性

例:

public class Nation
    {
        private string code;

        public string Code
        {
            get { return code; }
            set { code = value; }
        }
        private string name;

        public string Name
        {
            get { return name; }
            set { name = value; }
        }
    }

3.数据访问类 实现对表的各种操作 增删改查

需要引用命名空间: using System.Data.SqlClient;

查询所有数据返回的是一个集合利用List<写存放数据的类型> 泛型集合(广泛利用于集合里面存对象)

例:

 

//主要实现对Nation表的各种操作(增删改查)
    public class NationDA
    {
        private SqlConnection _conn; //连接对象
        private SqlCommand _cmd; //命令对象
        private SqlDataReader _dr; //读取器对象

        //构造方法来初始化连接对象 命令对象
        public NationDA()
        {
            _conn = DBConnect.Conn; //对连接对象进行初始化
            _cmd = _conn.CreateCommand(); //对命令对象进行初始化
        }

        //添加数据的方法
        public bool Add(string code,string name)
        {
            _cmd.CommandText = "insert into Nation values(@code,@name)";
            _cmd.Parameters.AddWithValue("@code",code);
            _cmd.Parameters.AddWithValue("@name",name);

            _conn.Open();
            int n = _cmd.ExecuteNonQuery();
            _conn.Close();

            if (n > 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        //查询所有数据的方法
        public List<Nation> Select()
        {
            _cmd.CommandText = "select * from Nation";
            _conn.Open();
            _dr = _cmd.ExecuteReader();
           
            //定义一个空的集合
            List<Nation> list = new List<Nation>();

            if (_dr.HasRows)
            {
                while (_dr.Read())
                {
                    //造一个Nation对象
                    Nation data = new Nation();
                    data.Code = _dr[0].ToString();
                    data.Name = _dr[1].ToString();

                    //扔到集合里面
                    list.Add(data);
                }
            }
            _conn.Close();
            return list;
        }
        //根据条件查询的方法
        public List<Nation> Select(string code)
        {
            _cmd.CommandText = "select * from Nation where Code=@code";
            _cmd.Parameters.Clear();
            _cmd.Parameters.AddWithValue("@code",code);
            _conn.Open();
            _dr = _cmd.ExecuteReader();


            //定义一个空的集合
            List<Nation> list = new List<Nation>();

            if (_dr.HasRows)
            {
                while (_dr.Read())
                {
                    //造一个Nation对象
                    Nation data = new Nation();
                    data.Code = _dr[0].ToString();
                    data.Name = _dr[1].ToString();

                    //扔到集合里面
                    list.Add(data);
                }
            }

            _conn.Close();
            return list;
        }

        //删除方法
        public bool Delete(string code)
        {
            _cmd.CommandText = "delete from Nation where Code=@code";
            _cmd.Parameters.Clear();
            _cmd.Parameters.AddWithValue("@code",code);

            _conn.Open();
            int n = _cmd.ExecuteNonQuery();
            _conn.Close();

            if (n > 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        //修改方法
        public bool Update(string code,string name)
        {
            _cmd.CommandText = "update Nation set Name=@name where Code=@code";
            _cmd.Parameters.Clear();
            _cmd.Parameters.AddWithValue("@code",code);
            _cmd.Parameters.AddWithValue("@name",name);

            _conn.Open();
            int n = _cmd.ExecuteNonQuery();
            _conn.Close();

            if (n > 0)
            {
                return true;
            }
            else
            {
                return false;
            }

        }
        
        public string NationName(string code)
        {
            _cmd.CommandText = "select Name from Nation where Code=@code";
            _cmd.Parameters.AddWithValue("@code",code);

            _conn.Open();
            _dr = _cmd.ExecuteReader();


            if (_dr.HasRows)
            {
                _dr.Read();
                return _dr[0].ToString();
            }
            else
            {
                return "汉族";
            }

            _conn.Close();

        }
    }
View Code

 

查看元素使用foreach遍历集合

※foreach里面不能加减任何一个元素,但可以修改数据

例:

Console.WriteLine("请输入代号:");
            string code = Console.ReadLine();

            List<Nation> list = da.Select(code);

            foreach (Nation data in list)
            {
                Console.WriteLine(data.Code + "--" + data.Name);
            }

 

以上是关于ADO.Net——数据库操作类的主要内容,如果未能解决你的问题,请参考以下文章

c#编写的代码用:linq和传统的ado.net哪个好,出错少,哪个更快,对服务器的负担最小

由于C#中ADO.NET对Oracle的命名空间引用时提示过时,为此想用Linq对数据库的连接等操作(见补充)

ADO.Net 数据库访问技术

使用ADO.NET查询和操作数据

ADO.Net创建数据模型和数据访问类及泛型集合

想请问一下Adp.net与Ado.net Entity Framework、NHibernate性能对比