ADO.NET(完整修改和查詢、實體類,數據訪問類)


一、完整修改和查詢

在編寫c#語句時需考慮到用戶體驗,例如在編寫修改語句時,需要考慮到輸入的內容在數據庫中是否能夠找到。

中間變量運用

1、先查

2、執行操作

完整修改語句:

 bool has = false;

            Console.Write("請輸入要修改的用戶名:");
            string Uname = Console.ReadLine();
//到數據庫中查詢輸入的用戶名是否存在
            SqlConnection conn = new SqlConnection("server=.;database=Data0720;user=sa;pwd=123");//連接數據庫
            SqlCommand cmd = conn.CreateCommand();//數據庫操作
            cmd.CommandText = "select *from Users where UserName='" + Uname + "'";
            conn.Open();//打開數據庫
            SqlDataReader dr = cmd.ExecuteReader();
            if (dr.HasRows)
            {
                has = true;
            }
            conn.Close();//關閉數據庫

            if (has)
            {
                Console.WriteLine("已經查到[" + Uname + "]用戶信息,請進行修改");
                Console.Write("請輸入修改后的密碼:");
                string Pwd = Console.ReadLine();
                Console.Write("請輸入修改后的昵稱:");
                string Nname = Console.ReadLine();
                Console.Write("請輸入修改后的性別:");
                string Sex = Console.ReadLine();
                Console.Write("請輸入修改后的生日:");
                string Birthday = Console.ReadLine();
                Console.Write("請輸入修改后的民族:");
                string Nation = Console.ReadLine();

                //@key  占位符  
                cmd.CommandText = " update Users set PassWord=@pwd,NickName=@nname,Sex=@sex,Birthday=@bir,Nation=@nat where UserName=@uname;";
                cmd.Parameters.Clear();
                cmd.Parameters.Add("@pwd", Pwd);
                cmd.Parameters.Add("@nname",Nname);
                cmd.Parameters.Add("@sex", (Sex=="")?"1":"0");
                cmd.Parameters.Add("@bir", Birthday);
                cmd.Parameters.Add("@nat", Nation);
                cmd.Parameters.Add("@uname", Uname);

                conn.Open();
                cmd.ExecuteNonQuery();
                conn.Close();
                Console.WriteLine("修改完畢!");
            }
            else
            {
                Console.WriteLine("未查到[" + Uname + "]用戶信息,請確認用戶名輸入是否正確!");
            }

完整刪除語句:

bool has = false;

            Console.Write("請輸入要刪除的用戶名:");
            string Uname = Console.ReadLine();
//查詢要刪除的用戶名在數據庫中是否存在
            SqlConnection conn = new SqlConnection("server=.;database=Data0720;user=sa;pwd=123");
            SqlCommand cmd = conn.CreateCommand();
            cmd.CommandText = "select *from Users where UserName='" + Uname + "'";
            conn.Open();
            SqlDataReader dr = cmd.ExecuteReader();
            if (dr.HasRows)
            {
                has = true;
            }
            conn.Close();

            if (has)
            {
                Console.WriteLine("已經查到[" + Uname + "]用戶信息,是否確定要刪除嗎?(Y/N):");
                string u = Console.ReadLine();
                if (u.ToUpper() == "Y")//確定刪除
                {
                    cmd.CommandText = "delete from Users where UserName='" + Uname + "'";
                    conn.Open();
                    cmd.ExecuteNonQuery();
                    conn.Close();
                    Console.WriteLine(Uname + "刪除成功!");
                }
            }
            else
            {
                Console.WriteLine("未查到[" + Uname + "]用戶信息,請確認用戶名輸入是否正確!");
            }

二、SQL數據庫字符串注入攻擊

需要使用cmd.Parameters這個集合
占位符: @key 代表這個位置用這個占位符占住了

arameters這個集合中將此占位符所代表的數據補全

cmd.Parameters.Clear(); --添加占位符數據之前,要清空此集合
cmd.Parameters.Add("@pwd", Pwd); --占位符內容填充
cmd.Parameters.Add("@nname",Nname);
cmd.Parameters.Add("@sex", (Sex=="男")?"1":"0");
cmd.Parameters.Add("@bir", Birthday);
cmd.Parameters.Add("@nat", Nation);
cmd.Parameters.Add("@uname", Uname);

三、實體類,數據訪問類

1.實體類:封裝
封裝一個類,類名與數據庫表名一致
成員變量名與列名一致,多一個下划線
成員變量封裝完的屬性,就會與數據表中的列名一致

每一行數據都可以存成一個對象,操作這個對象,就相當於對某一行數據進行整體操作

2.數據訪問類:

就是將對數據庫的一些操作,單獨寫到一個類中,封成一些方法,等待調用

結構看起來會非常清晰。

3.三層開發:
界面層 - UI層
業務邏輯層 - C#代碼部分
數據訪問層 - 實體類和數據訪問類

 //實體類
public  class stu
    {
        private string _xuehao;
      /// <summary>
      /// 學號
      /// </summary>
        public string Xuehao
        {
            get { return _xuehao; }
            set { _xuehao = value; }
        }

        private string _name;
      /// <summary>
      /// 學生姓名
      /// </summary>
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }
        private bool _sex;
      /// <summary>
      /// 性別
      /// </summary>
        public bool Sex
        {
            get { return _sex; }
            set { _sex = value; }
        }
        private string _banji;
      /// <summary>
      /// 班級
      /// </summary>
        public string Banji
        {
            get { return _banji; }
            set { _banji = value; }
        }
        private DateTime _bir;
      /// <summary>
      /// 出生年月
      /// </summary>
        public DateTime Bir
        {
            get { return _bir; }
            set { _bir = value; }
        }
//數據訪問類
  public  class studata
    {
      SqlConnection conn = null;//數據連接與操作
        SqlCommand cmd = null;

        public studata()//構造函數
        {
            conn = new SqlConnection("server=.;database=new01;user=sa;pwd=123");
            cmd = conn.CreateCommand();
        }
      /// <summary>
      /// 查詢數據庫
      /// </summary>
      public void Select()
      {
          cmd.CommandText = "select *from stu";//查詢語句
          conn.Open();//打開數據庫
          SqlDataReader dr = cmd.ExecuteReader();//調用此方法用來查詢 
          while (dr.Read())
          {
              Console.WriteLine(dr["xuehao"] + "\t" + dr["name"] + "\t" + ((bool)dr["sex"] ? "" : "") + "\t" + dr["banji"] + "\t" + Convert.ToDateTime(dr["bir"]).ToString("yyyy-MM-dd"));
          }
          conn.Close();//關閉數據庫
      }
      /// <summary>
      /// stu表添加方法
      /// </summary>
      /// <param name="s">要添加到數據庫的stu對象</param>
      public void insert(stu s)
      {
          cmd.CommandText = "insert into stu values(@xuehao,@name,@sex,@banji,@bir)";
          cmd.Parameters.Clear();//清空此集合
          cmd.Parameters.AddWithValue("@xuehao",s.Xuehao);
          cmd.Parameters.AddWithValue("@name", s.Name);
          cmd.Parameters.AddWithValue("@sex", s.Sex );
          cmd.Parameters.AddWithValue("@banji", s.Banji);
          cmd.Parameters.AddWithValue("@bir", s.Bir);
          conn.Open();
          cmd.ExecuteNonQuery();
          conn.Close();
      }
      /// <summary>
      /// 查詢是否存在
      /// </summary>
      /// <param name="xuehao"></param>
      /// <returns></returns>
      public stu select(string xuehao)
      {
          stu s = null;
          cmd.CommandText = "select *from stu where xuehao=@a";
          cmd.Parameters.Clear();
          cmd.Parameters.Add("@a", xuehao);
          conn.Open();
          SqlDataReader dr = cmd.ExecuteReader();
          if(dr.HasRows)
          {
              dr.Read();
              s = new stu();
              s.Xuehao=dr["xuehao"].ToString();
              s.Name=dr["name"].ToString();
              s.Banji = dr["banji"].ToString();
              s.Sex = Convert.ToBoolean(dr["sex"]);
              s.Bir = Convert.ToDateTime(dr["bir"]);
          }
          conn.Close();
          return s;

      }
      /// <summary>
      /// 修改
      /// </summary>
      /// <param name="s">要修改到數據庫的stu對象</param>
      public void update(stu s)
      {
          cmd.CommandText = "update stu set name=@name,sex=@sex,banji=@banji,bir=@bir where xuehao=@xuehao";
          cmd.Parameters.Clear();//清空此集合
          cmd.Parameters.AddWithValue("@xuehao", s.Xuehao);
          cmd.Parameters.AddWithValue("@name",s.Name);
          cmd.Parameters.AddWithValue("@sex", s.Sex);
          cmd.Parameters.AddWithValue("@banji", s.Banji);
          cmd.Parameters.AddWithValue("@bir",s.Bir);
          conn.Open();
         cmd.ExecuteNonQuery();
          conn.Close();
      }
      /// <summary>
      /// 刪除
      /// </summary>
      /// <param name="xuehao"></param>
      /// <returns></returns>
      public bool delete(string xuehao)
      {
          bool delOK = false;
          cmd.CommandText = "delete from stu where xuehao =@a";
          cmd.Parameters.Clear();
          cmd.Parameters.Add("@a", xuehao);
          conn.Open();
          try
          {
              cmd.ExecuteNonQuery();
              delOK = true;
          }
          catch { }

          conn.Close();
          return delOK;
      }
    }
//c#代碼部分
 studata sdata = new studata();//實例化studata這個類
            Console.WriteLine("學號" + "\t" + "姓名" + "\t" + "性別" + "\t" + "班級" + "\t" + "生日");
            sdata.Select();
            Console.ReadLine();
            Console.Write("請輸入你想執行的操作(1添加,2修改,3刪除):");
            try//異常保護
            {
                int code = int.Parse(Console.ReadLine());
                if (code == 1 || code == 2 || code == 3)
                {
                    if (code == 1)//添加
                    {
                        stu s = new stu();//實例化
                        string[] x = new string[3];
                        while (true)
                        {
                            Console.Write("請輸入您要輸入的學生學號:");
                            x[0] = Console.ReadLine();
                            if (x[0] == "")
                            {
                                Console.WriteLine("學號不能為空");
                            }
                            else if (x[0].Length != 4 || x[0].StartsWith("S") != true)
                            {
                                Console.WriteLine("學號輸入有誤,必須以S開頭");
                            }
                            else
                            {
                                stu s2 = sdata.select(x[0]);
                                if (s2!=null)
                                {
                                    Console.WriteLine("此學號已經存在,請重新輸入!");
                                }
                                else
                                {
                                    break;
                                }
                            }
                        }
                        s.Xuehao = x[0];
                        Console.Write("請輸入您要輸入的學生姓名:");
                        s.Name = Console.ReadLine();
                        while (true)
                        {
                            Console.Write("請輸入您要輸入的學生性別(false代表女,true代表男):");
                            x[1] = (Console.ReadLine()).ToLower();
                            if (x[1] == "true" || x[1] == "false")
                            {
                                break;
                            }
                            else
                            {
                                Console.WriteLine("性別代碼輸入有誤!");
                            }
                        }
                       s.Sex = Convert.ToBoolean(x[1]);
                        Console.Write("請輸入您要輸入的學生班級:");
                        s.Banji = Console.ReadLine();
                        Console.Write("請輸入您要輸入的學生生日:");
                        s.Bir = Convert.ToDateTime(Console.ReadLine());
                        sdata.insert(s);//調用sdata中的insert方法
                        sdata.Select();//調用sdata中的Select方法
                    }
                //修改
                    else if (code == 2)
                    {
                        stu s = new stu();//實例化
                        Console.Write("請輸入您要修改的學生的學號:");
                        s.Xuehao = Console.ReadLine();
                        //判斷輸入的學號在數據庫中是否存在
                        stu s2 = sdata.select(s.Xuehao);//將輸入的學號調入sdata中的select方法中,並賦值給s2
                        if (s2 != null)
                        {
                            Console.WriteLine("已查到此信息,按任意鍵修改");
                            Console.ReadKey();
                            Console.Write("請輸入您修改后的學生姓名:");
                            s.Name = Console.ReadLine();
                            string[] x = new string[1];
                            while (true)
                            {
                                Console.Write("請輸入您修改后的學生性別(false代表女,true代表男):");
                                x[0] = (Console.ReadLine()).ToLower();
                                if (x[0] == "true" || x[0] == "false")
                                {
                                    break;
                                }
                                else
                                {
                                    Console.WriteLine("性別代碼輸入有誤!");
                                }
                            }
                            s.Sex = Convert.ToBoolean(x[0]);
                            Console.Write("請輸入您修改后的學生班級:");
                            s.Banji = Console.ReadLine();
                            Console.Write("請輸入您修改后的學生生日:");
                            s.Bir = Convert.ToDateTime(Console.ReadLine());
                            sdata.update(s);//調用sdata中的update方法
                            Console.WriteLine("修改成功");
                            sdata.Select();//調用sdata中的Select方法
                        }
                        else
                        {
                            Console.WriteLine("未查到有關信息,請查看是否輸錯");
                        }
                    }
                    else
                    {
                        stu s = new stu(); 
                        Console.Write("請輸入您要刪除的學生的學號:");
                        s.Xuehao = Console.ReadLine();
                        //判斷輸入的學號在數據庫中是否存在
                        stu s2 = sdata.select(s.Xuehao);
                        if (s2 != null)
                        {
                            Console.WriteLine("已查到此信息,請按任意鍵刪除");
                            Console.ReadKey();
                            bool ok = sdata.delete(s.Xuehao);
                            if (ok)
                            {
                                Console.WriteLine("刪除成功!");
                                sdata.Select();
                            }
                            else
                                Console.WriteLine("刪除失敗!");
                        }
                        else
                            Console.WriteLine("未查到有關信息,請查看是否輸錯");
                    }
                }
                else
                {
                    Console.WriteLine("您輸入有誤!");
                }
            }
            catch
            {
                Console.WriteLine("您輸入的不是數字!");
            }
            Console.ReadLine();
簡單學生管理系統

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM