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();

            }
        }


  • 相关阅读:
    数组的操作
    数据类型的判断
    插入排序法
    数组
    文件路径
    POJ 1149 PIGS(最大流)
    POJ 2186 Popular Cows(强联通+缩点)
    POJ 1463 Strategic game(二分图最大匹配)
    POJ 2761 Feed the dogs(平衡树or划分树or主席树)
    POJ 2528 Mayor's posters(线段树)
  • 原文地址:https://www.cnblogs.com/likaixuan/p/4495451.html
Copyright © 2011-2022 走看看