zoukankan      html  css  js  c++  java
  • 数据访问-----ADO.NET 小结和练习

    ADO.NET
    两个命名空间,三个类。
    一、两个命名空间:
    using System.Data;
    using System.Data.SqlClient;

    二、三个类:
    SqlConnection    SqlCommand    SqlDataReader

    (一)SqlConnection链接类
    1.构造
    链接字符串的写法:server=服务器IP或服务器名;database=数据库名;uid=用户名;pwd=密码
    server=.;database=mydb;uid=sa;pwd=123
    Data Source=.;Initial Catalog=mydb;Persist Security Info=True;User ID=sa;Password=***********

    SqlConnection conn = new SqlConnection();
    SqlConnection conn = new SqlConnection("链接字符串");

    2.属性
    ConnectionString:string,链接字符串

    3.方法
    Open()
    Close()
    CreateCommand()

    (二)SqlCommand命令类
    1.构造
    SqlCommand cmd = new SqlCommand(["Sql语句",链接对象,事务对象]);
    SqlCommand cmd = conn.CreateCommand();
    2.属性
    CommandText:string 要执行的SQL语句或存储过程的名子
    Connection:SqlConnection 指定通过哪个链接访问数据库
    Parameters:SqlParameterCollection类型 ,指定Sql文本中的变量的值。 AddWithValue("名","值")
    CommandType:CommandType枚举类型,指定CommandText中是SQL语句(Text),还是存储过程(StoredProcedure)。例:SQL存储过程语句:
    CREATE PROCEDURE UP_INFO_DELETE
        @code varchar(50)
    AS
    BEGIN
        delete from Work where InfoCode=@code
        delete from Family where InfoCode=@code
        delete from Info where Code=@code
    END
    GO

    Transaction:SqlTransaction类型,执行命令时需要的事务对象
    3.方法
    ExecuteNonQuery()
    ExecuteReader()
    ExecuteScalar()

    (三)SqlDataReader读取器类
    1.构造
    注意:不能直接new出来。只有唯一的一种生成方式
    SqlDataReader dr = cmd.ExecuteReader();
    2.属性
    HasRows:bool,检查是否查出数据来了。
    3.方法
    Read():bool,读取数据,读取成功为true,否则为false
    4.语法
    while(dr.Read())
    {
        dr[索引号]
        dr["列名"]
    }


    三、事务
    ACID 原子性,一致性,隔离性,持久性
    (一)链接内的事务
    1.创建事务对象。使用链接对象的BeginTransaction()
    SqlTransaction trans = conn.BeginTransaction();
    注意:必须在链接打开的时候创建事务。
    2.把事务对象挂到命令对象上
    cmd.Transaction = trans;
    3.执行命令,提交与回滚事务
    trans.Commit()    //一般放在try块中
    trans.Rollback()    //一般放在catch块中

    (二)跨链接的事务 TransactionScope对象。
    1.启动服务:DTC 分布式事务协调器。
    2.引用事务程序集。在解决方案管理器中,右键添加引用。System.Transactions
    3.使用using System.Transactions 把命名空间导进来。
    4.使用TransactionScope类来控制事务。
            using (TransactionScope ts = new TransactionScope())
                {
                    DeleteWork("p001");
                    DeleteFamily("p001");
                    DeleteInfo("p001");
                    ts.Complete();    //必须。它是用来提交事务的。
                }//都执行或正确,事务提交,成功运行,否则事务回滚,恢复到修改前的状态。

    简单举例:
    class Program
        {
            public const string CONNECTIONSTRING = "server=.;database=mydb;uid=sa;pwd=5587725";
            static void Deleteinfo(string code)
            {
                SqlConnection conn = new SqlConnection(CONNECTIONSTRING);
                try
                {
                    conn.Open();
                    SqlCommand cmd = conn.CreateCommand();
                    cmd.CommandText = "UP_INFO_DELETE";
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.Clear();
                    cmd.Parameters.AddWithValue("@code",code);
                    cmd.ExecuteNonQuery();
                }
                finally
                {
                    conn.Close();
                }
               
                
            }
            static void Main(string[] args)
            {
                using (TransactionScope ts = new TransactionScope())
                {
                    Deleteinfo("p003");
                    ts.Complete();

                }
            }
        }


    1.造DBConnection
        做一个链接字符串的常量
    2.造实体类
        把数据库的表封装类,把表的字段都封状成成员变量和属性
    3.造数据访问类
        a.声明三个成员:SqlConnection,SqlCommand,SqlDataReader
        b.在构造函数中,把SqlConnection和SqlCommand实例化。
        c.做一系列的增、删、改、查的方法。
    4.Main函数
        (1)。
        a.调用数据访问类,获得数据。
        b.在界面上使用for显示出来。
        (2)。
        a.从界面上获得输入的数据,存在变量中。
        b.调用数据访问类,把变量传进相应的增删改的方法中去,实现数据库相应操作。

    练习1:mydb数据库中Nation(民族)表的增删改查
    class DBconnection
        {
            public const string CONNECTIONSTRING = "server=.;database=mydb;uid=sa;pwd=5587725";
        }

     //实体类
        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; }
            }
        }

     //数据访问类---增删改查
        class NationDA
        {
            //定义类里面的三个字段
            private SqlConnection _Conn;
            private SqlCommand _Cmd;
            private SqlDataReader _DR;
            //构造函数
            public NationDA()
            {
                _Conn = new SqlConnection(DBconnection.CONNECTIONSTRING);
                _Cmd = _Conn.CreateCommand();
            }
            //查询
            public Nation Select(string code)
            {
                _Cmd.CommandText = "select * from Nation where code=@code";
                _Cmd.Parameters.Clear();
                _Cmd.Parameters.AddWithValue("@code",code);
                try
                {
                    _Conn.Open();
                    _DR = _Cmd.ExecuteReader();
                    if (_DR.Read())
                    {
                        Nation data = new Nation();
                        data.Code = _DR["Code"].ToString();
                        data.Name = _DR["Name"].ToString();
                        return data;
                    }
                    else
                    {
                        return null;
                    }
                }
                finally
                {
                    _Conn.Close();
                }
            }
            public List<Nation> Select()
            {
                List<Nation> list = new List<Nation>();
                _Cmd.CommandText = "select * from Nation";
                try
                {
                    _Conn.Open();
                    _DR = _Cmd.ExecuteReader();
                    while (_DR.Read())
                    {
                        Nation data = new Nation();
                        data.Code = _DR["Code"].ToString();
                        data.Name = _DR["Name"].ToString();
                        list.Add(data);
                    }
                }
                finally
                {
                    _Conn.Close();
                }

                return list;
            }
            //插入(增加)
            public void Insert(string code,string name)
            {
                _Cmd.CommandText = "insert into Nation values(@code,@name)";
                _Cmd.Parameters.Clear();
                _Cmd.Parameters.AddWithValue("@name", name);
                _Cmd.Parameters.AddWithValue("@code", code);
                try
                {
                    _Conn.Open();
                    _Cmd.ExecuteNonQuery();
                }
                finally
                {
                    _Conn.Close();
                }

            }
            //更改
            public void Update(string code,string name)
            {
                _Cmd.CommandText = "update Nation set name=@name where code=@code;";
                _Cmd.Parameters.Clear();
                _Cmd.Parameters.AddWithValue("@name",name);
                _Cmd.Parameters.AddWithValue("@code",code);
                try
                {
                    _Conn.Open();
                    _Cmd.ExecuteNonQuery();
                }
                finally
                {
                    _Conn.Close();
                }
            }
            //删除
            public void Delete(string code)
            {
                _Cmd.CommandText = "delete from Nation where code=@code";
                _Cmd.Parameters.Clear();
                _Cmd.Parameters.AddWithValue("@code",code);
                try
                {
                    _Conn.Open();
                    _Cmd.ExecuteNonQuery();
                }
                finally
                {
                    _Conn.Close();
                }
            }
        }

    class Program
        {
            //界面
            static void Main(string[] args)
            {
                List<Nation> list = new NationDA().Select();
                for (int i = 0; i < list.Count; i++)//数组中长度用.length,集合中长度用.count
                {
                    Console.WriteLine(list[i].Code+" "+list[i].Name);
                }
                Console.ReadKey();
            }
        }

    练习2:mydb数据库中Info表的增删改查()
    注意:要调用NationDA中的select ,需要放在同一个项目下。
     class DBconnection
        {
            public const string CONNECTIONSTRING = "server=.;database=mydb;uid=sa;pwd=5587725";
        }

     //实体类
        class info
        {
            private string _Code;

            public string Code
            {
                get { return _Code; }
                set { _Code = value; }
            }
            private string _Name;

            public string Name
            {
                get { return _Name; }
                set { _Name = value; }
            }
            private bool _Sex;

            public bool Sex
            {
                get { return _Sex; }
                set { _Sex = value; }
            }
            private string _Nation;

            public string Nation
            {
                get { return _Nation; }
                set { _Nation = value; }
            }
            private DateTime _Birthday;

            public DateTime Birthday
            {
                get { return _Birthday; }
                set { _Birthday = value; }
            }
        }

     //数据访问类
        class infoDA
        {
            private SqlConnection _Conn;
            private SqlCommand _Cmd;
            private SqlDataReader _DR;
            //构造函数
            public infoDA()
            {
                _Conn = new SqlConnection(DBconnection.CONNECTIONSTRING);
                _Cmd = _Conn.CreateCommand();
            }
            //增
            public void Insert(string code,string name,bool sex,string nation, DateTime birthday )
            {
                _Cmd.CommandText = "insert into info values(@code,@name,@sex,@natiao,@birthday)";
                _Cmd.Parameters.Clear();
                _Cmd.Parameters.AddWithValue("@code",code);
                _Cmd.Parameters.AddWithValue("@name",name);
                _Cmd.Parameters.AddWithValue("@sex", sex);
                _Cmd.Parameters.AddWithValue("@nation", nation);
                _Cmd.Parameters.AddWithValue("@birthday", birthday);
                try
                {
                    _Conn.Open();
                    _Cmd.ExecuteNonQuery();
                }
                finally
                {
                    _Conn.Close();
                }
               
            }
            //删
            public void Delete(string code)
            {
                _Cmd.CommandText = "delete from info where code=@code";
                _Cmd.Parameters.Clear();
                _Cmd.Parameters.AddWithValue("@code",code);
                try
                {
                    _Conn.Open();
                    _Cmd.ExecuteNonQuery();
                }
                finally
                {
                    _Conn.Close();
                }
            }
            //改
            public void Update(string code, string name, bool sex, string nation, DateTime birthday)
            {
                _Cmd.CommandText = "update info set code=@code,name=@name,sex=@sex,nation=@nation,birthday=@birthday where code=@code";
                _Cmd.Parameters.Clear();
                _Cmd.Parameters.AddWithValue("@code", code);
                _Cmd.Parameters.AddWithValue("@name", name);
                _Cmd.Parameters.AddWithValue("@sex", sex);
                _Cmd.Parameters.AddWithValue("@nation", nation);
                _Cmd.Parameters.AddWithValue("@birthday", birthday);
                try
                {
                    _Conn.Open();
                    _Cmd.ExecuteNonQuery();
                }
                finally
                {
                    _Conn.Close();
                }

            }
            //查
            public info Select(string code)
            {
                _Cmd.CommandText = "select * from info where code=@code";
                _Cmd.Parameters.Clear();
                _Cmd.Parameters.AddWithValue("@code",code);
                try
                {
                    _Conn.Open();
                    _DR = _Cmd.ExecuteReader();
                    if (_DR.Read())
                    {
                        info data = new info();
                       data.Code = _DR["Code"].ToString();
                        data.Name = _DR["Name"].ToString();
                        data.Sex = Convert.ToBoolean(_DR["Sex"]);
                        data.Nation = _DR["Nation"].ToString();
                        data.Birthday = Convert.ToDateTime(_DR["Birthday"]);
                        return data;
                    }
                    else
                    {
                        return null;
                    }
                }
                finally
                {
                    _Conn.Close();
                }
            }
            public List<info> Select()
            {
                List<info> list =new List<info>();
                _Cmd.CommandText = "select * from info";
                try
                {
                    _Conn.Open();
                    _DR = _Cmd.ExecuteReader();
                    while (_DR.Read())
                    {
                        info data = new info();
                        data.Code = _DR["Code"].ToString();
                        data.Name = _DR["Name"].ToString();
                        data.Sex = Convert.ToBoolean(_DR["Sex"]);
                        data.Nation = _DR["Nation"].ToString();
                        data.Birthday = Convert.ToDateTime(_DR["Birthday"]);
                        list.Add(data);
                    }
                }
                finally
                {
                    _Conn.Close();
                }
                return list;
            }

        }

     class Program
        {
           
            static void Main(string[] args)
            {
                List<info> list = new infoDA().Select();
                for (int i = 0; i < list.Count; i++)
                {
                    info data = list[i];
                    Console.Write(data.Code+" ");
                    Console.Write(data.Name + " ");
                    Console.Write(data.Sex?"男":"女" +" ");
                    Console.Write(new NationDA().Select(data.Nation).Name + " ");
                    Console.Write(data.Birthday.ToString("yyy年MM月dd日") + " ");

                }
                Console.ReadKey();

            }
        }


  • 相关阅读:
    HDU 3572 Task Schedule(拆点+最大流dinic)
    POJ 1236 Network of Schools(Tarjan缩点)
    HDU 3605 Escape(状压+最大流)
    HDU 1166 敌兵布阵(分块)
    Leetcode 223 Rectangle Area
    Leetcode 219 Contains Duplicate II STL
    Leetcode 36 Valid Sudoku
    Leetcode 88 Merge Sorted Array STL
    Leetcode 160 Intersection of Two Linked Lists 单向链表
    Leetcode 111 Minimum Depth of Binary Tree 二叉树
  • 原文地址:https://www.cnblogs.com/likaixuan/p/4495451.html
Copyright © 2011-2022 走看看