实现数据查询,添加,删除,修改各项功能

业务逻辑层:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using 实体类_数据访问类练习.App_Code; namespace 实体类_数据访问类练习
{
class Program
{
static void Main(string[] args)
{
for (; ; )
{
Console.WriteLine("请输入您要选择的操作:1、查询 2、添加 3、删除 4、修改 0、退出 ");
string operate = Console.ReadLine();
//查询
if (operate == "")
{
Console.WriteLine("");
Console.Write("请输入您要查询的用户名(查询所有人员信息请输入*,退出请输入0。):");
string operate_select = Console.ReadLine();
if (operate_select == "*")
{
//完整查询操作,创建泛型数组引用UsersDate的Select方法
List<Users> list = new UsersData().Select();
//List<Users> list = new List<Users>();
//UsersData ud = new UsersData();
//list = ud.Select(); //遍历数组
Console.WriteLine("");
Console.WriteLine("============================数据信息==============================");
Console.WriteLine("序号\t用户名\t密码\t昵称\t性别\t民族\t班级\t生日");
foreach (Users uuu in list)
{
//Console.WriteLine(uuu.Code + "\t" + uuu.Name + "\t" + uuu.Password + "\t" + uuu.Nick + "\t" + (uuu.Sex ? "男" : "女") + "\t" + uuu.Nation + "\t" + uuu.Class + "\t" + Convert.ToDateTime(uuu.Birthday).ToShortDateString());
Console.WriteLine(uuu.Code + "\t" + uuu.Name + "\t" + uuu.Password + "\t" + uuu.Nick + "\t" + uuu.SexStr + "\t" + uuu.NationName + "\t" + uuu.ClassName + "\t" + uuu.BirthdayStr);
Console.WriteLine("");
}
}
else if (operate_select == "")
{
break;
}
else
{ //完整查询操作,创建泛型数组引用UsersDate的Select方法
List<Users> list = new UsersData().Select(operate_select);
//List<Users> list = new List<Users>();
//UsersData ud = new UsersData();
//list = ud.Select(); //遍历数组
Console.WriteLine("");
Console.WriteLine("============================数据信息==============================");
Console.WriteLine("序号\t用户名\t密码\t昵称\t性别\t民族\t班级\t生日");
foreach (Users uuu in list)
{
//Console.WriteLine(uuu.Code + "\t" + uuu.Name + "\t" + uuu.Password + "\t" + uuu.Nick + "\t" + (uuu.Sex ? "男" : "女") + "\t" + uuu.Nation + "\t" + uuu.Class + "\t" + Convert.ToDateTime(uuu.Birthday).ToShortDateString());
Console.WriteLine(uuu.Code + "\t" + uuu.Name + "\t" + uuu.Password + "\t" + uuu.Nick + "\t" + uuu.SexStr + "\t" + uuu.NationName + "\t" + uuu.ClassName + "\t" + uuu.BirthdayStr);//引用扩展属性 Console.WriteLine("");
}
}
} //添加用户操作
else if (operate == "")
{
Console.WriteLine("");
Users user = new Users();
Console.Write("请输入要添加的用户名:");
user.Name = Console.ReadLine();
Console.Write("请输入要添加的密码:");
user.Password = Console.ReadLine();
Console.Write("请输入要添加的昵称:");
user.Nick = Console.ReadLine();
Console.Write("请输入要添加的性别:");
user.Sex = Convert.ToBoolean(Console.ReadLine());
Console.Write("请输入要添加的民族:");
user.Nation = Console.ReadLine();
Console.Write("请输入要添加的班级:");
user.Class = Console.ReadLine();
Console.Write("请输入要添加的生日:");
user.Birthday = Convert.ToDateTime(Console.ReadLine());
if (new UsersData().Insert(user))//数据访问类中insert方法的返回值
{
Console.WriteLine("添加成功!");
}
else
{
Console.WriteLine("添加失败!"); }
Console.WriteLine(""); } //删除用户操作
else if (operate == "")
{
Console.WriteLine("");
Console.Write("请输入你要删除的用户名:");
string operate_delete = Console.ReadLine();//用户操作
//判断是否插寻到此用户信息,返回TRUE表示有此用户信息
if (new UsersData().select(operate_delete))
{
Console.WriteLine("查询到此用户信息,是否删除(Y/N):");
string yn = Console.ReadLine();//用户操作
if (yn.ToUpper() == "Y")
{
//判断删除此用户信息是否成功,返回TRUE表示删除成功
if (new UsersData().Delete(operate_delete))
{
Console.WriteLine("删除成功!");
}
//返回false表示删除失败
else
{
Console.WriteLine("删除失败!!");
}
}
else
{
Console.WriteLine("删除操作去取消!!");
}
}
//判断是否插寻到此用户信息,返回false表示无此用户信息
else
{
Console.WriteLine("未查询到此用户!!");
}
Console.WriteLine("");
} //修改用户信息操作
else if (operate == "")
{
Console.WriteLine("");
for (; ; )
{
Console.Write("请输入要修改的用户名(输入0退出修改返回上一级):");
string operate_updata = Console.ReadLine();
if(operate_updata=="")
{
break;
}
//查询是否有此用户,返回TRUE表示有此用户
if (new UsersData().select(operate_updata))
{ Console.WriteLine("查询到此用户信息,是否修改(Y/N):");
string yn = Console.ReadLine();//用户操作
if (yn.ToUpper() == "Y")
{
Console.WriteLine ("请选择:*、修改用户所有信息;1、修改用户密码;2、修改用户昵称;3、修改用户性别;4、修改用户民族;5、修改用户班级;6、修改用户生日;0、结束修改");
string updata_opt = Console.ReadLine();//用户操作
//修改用户所有信息
if(updata_opt=="*")
{
Users us = new Users();
Console.Write("请输入要修改的密码:");
us.Password = Console.ReadLine();
Console.Write("请输入要修改的昵称:");
us.Nick = Console.ReadLine();
Console.Write("请输入要修改的性别:");
us.Sex = Convert.ToBoolean(Console.ReadLine());
Console.Write("请输入要修改的民族:");
us.Nation = Console.ReadLine();
Console.Write("请输入要修改的班级:");
us.Class = Console.ReadLine();
Console.Write("请输入要修改的生日:");
us.Birthday = Convert.ToDateTime(Console.ReadLine());
if (new UsersData().Update(us))
{
Console.WriteLine("修改成功!!");
}
else
{
Console.WriteLine("修改失败!!");
}
}
//修改用户密码
else if(updata_opt=="")
{ Users us = new Users();
Console.Write("请输入要修改的密码:");
us.Password = Console.ReadLine();
if (new UsersData().Update1(us))
{
Console.WriteLine("修改成功!!");
}
else
{
Console.WriteLine("修改失败!!");
}
}
//修改用户昵称
else if (updata_opt == "")
{ Users us = new Users();
Console.Write("请输入要修改的昵称:");
us.Nick = Console.ReadLine();
if (new UsersData().Update2(us))
{
Console.WriteLine("修改成功!!");
}
else
{
Console.WriteLine("修改失败!!");
}
}
//修改性别
else if (updata_opt == "")
{ Users us = new Users();
Console.Write("请输入要修改的性别:");
us.Sex = Convert.ToBoolean(Console.ReadLine());
if (new UsersData().Update3(us))
{
Console.WriteLine("修改成功!!");
}
else
{
Console.WriteLine("修改失败!!");
}
}
//修改民族
else if (updata_opt == "")
{ Users us = new Users();
Console.Write("请输入要修改的民族:");
us.Nation= Console.ReadLine();
if (new UsersData().Update4(us))
{
Console.WriteLine("修改成功!!");
}
else
{
Console.WriteLine("修改失败!!");
}
}
//修改班级
else if (updata_opt == "")
{ Users us = new Users();
Console.Write("请输入要修改的班级:");
us.Class = Console.ReadLine();
if (new UsersData().Update5(us))
{
Console.WriteLine("修改成功!!");
}
else
{
Console.WriteLine("修改失败!!");
}
}
//修改生日
else if (updata_opt == "")
{ Users us = new Users();
Console.Write("请输入要修改的生日:");
us.Birthday = Convert.ToDateTime(Console.ReadLine());
if (new UsersData().Update6(us))
{
Console.WriteLine("修改成功!!");
}
else
{
Console.WriteLine("修改失败!!");
}
}
//退出修改操作
else
{
break;
}
}
else
{
Console.WriteLine("修改操作去取消!!");
}
}
//查询是否有此用户,返回false表示无此用户
else
{
Console.WriteLine("未查询到此用户!!");
}
}
Console.WriteLine("");
}
//结束操作,退出
else
{
break;
}
Console.WriteLine(""); }
Console.ReadLine();
}
}
}

实体类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
namespace 实体类_数据访问类练习.App_Code
{
public class Users
{
SqlConnection conn = null;
SqlCommand comm = null;
public Users()
{
conn = new SqlConnection("server=.;database=Data1128;user=sa;pwd=123");
comm = conn.CreateCommand();
} private int _Code;
/// <summary>
/// code
/// </summary>
public int Code
{
get { return _Code; }
set { _Code = value; }
}
private string _Name;
/// <summary>
/// 用户名
/// </summary>
public string Name
{
get { return _Name; }
set { _Name = value; }
}
private string _Password;
/// <summary>
/// 密码
/// </summary>
public string Password
{
get { return _Password; }
set { _Password = value; }
}
private string _Nick;
/// <summary>
/// 昵称
/// </summary>
public string Nick
{
get { return _Nick; }
set { _Nick = value; }
}
private bool _Sex;
/// <summary>
/// 性别
/// </summary>
public bool Sex
{
get { return _Sex; }
set { _Sex = value; }
}
/// <summary>
///性别的扩展属性
/// </summary>
public string SexStr
{
get
{
return _Sex ? "男" : "女";
}
}
private string _Nation;
/// <summary>
/// 民族
/// </summary>
public string Nation
{
get { return _Nation; }
set { _Nation = value; }
}
/// <summary>
/// 民族的扩展属性
/// </summary>
public string NationName
{
get
{
string end = "未填写";
comm.CommandText = "select *from Nation where nationcode=@a";
comm.Parameters.Clear();
comm.Parameters.AddWithValue("@a", _Nation);
conn.Open();
SqlDataReader dr = comm.ExecuteReader();
if (dr.HasRows)
{
dr.Read();
end = dr["nationname"].ToString();
}
conn.Close();
return end;
} } private string _Class;
/// <summary>
/// 班级
/// </summary>
public string Class
{
get { return _Class; }
set { _Class = value; }
}
/// <summary>
/// 班级的扩展属性
/// </summary>
public string ClassName
{
get
{
string end = "未填写";
comm.CommandText = "select *from Class where classcode=@a";
comm.Parameters.Clear();
comm.Parameters.AddWithValue("@a", _Class);
conn.Open();
SqlDataReader dr = comm.ExecuteReader();
if (dr.HasRows)
{
dr.Read();
end = dr["classname"].ToString();
} conn.Close(); return end;
}
} private DateTime _Birthday;
/// <summary>
/// 生日
/// </summary>
public DateTime Birthday
{
get { return _Birthday; }
set { _Birthday = value; }
}
/// <summary>
/// 生日的扩展属性
/// </summary>
public string BirthdayStr
{
get
{
return _Birthday.ToString("yyyy年MM月dd日");
}
}
}
}

数据访问类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient; namespace 实体类_数据访问类练习.App_Code
{
public class UsersData
{
SqlConnection conn = null;
SqlCommand comm = null;
public UsersData()
{
conn = new SqlConnection("server=.;database=Data1128;user=sa;pwd=123");
comm = conn.CreateCommand();
}
/// <summary>
/// 查询所有数据
/// </summary>
/// <returns></returns>
public List<Users> Select()
{
List<Users> list = new List<Users>();
//comm.CommandText = "select code,usename,password,nick,sex,(select nationname from Nation where nationcode=Users.nation) as 'nation' ,classname as 'class',birthday from Users join Class on Class.classcode=Users.class";
comm.CommandText = "select * from Users";
conn.Open();
SqlDataReader dr = comm.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
Users u = new Users();
u.Code = Convert.ToInt32(dr["Code"]);
u.Name = dr["USENAME"].ToString();
u.Password = dr["Password"].ToString();
u.Nick = dr["Nick"].ToString();
u.Sex = Convert.ToBoolean(dr["Sex"]);
u.Nation = dr["Nation"].ToString();
u.Class = dr["Class"].ToString();
u.Birthday = Convert.ToDateTime(dr["Birthday"]); list.Add(u);
}
}
conn.Close();
return list;
} /// <summary>
/// 查询单个用户的数据
/// </summary>
/// <param name="username"></param>
/// <returns></returns>
public List<Users> Select(string username)
{
List<Users> ulist = new List<Users>();
//comm.CommandText = "select code,usename,password,nick,sex,(select nationname from Nation where nationcode=Users.nation) as 'nation' ,classname as 'class',birthday from Users join Class on Class.classcode=Users.class where usename='" + username + "'";
comm.CommandText = "select *from Users where usename='" + username + "'";
conn.Open();
SqlDataReader dr = comm.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
Users u = new Users();
u.Code = Convert.ToInt32(dr["Code"]);
u.Name = dr["USEName"].ToString();
u.Password = dr["Password"].ToString();
u.Nick = dr["Nick"].ToString();
u.Sex = Convert.ToBoolean(dr["Sex"]);
u.Nation = dr["Nation"].ToString();
u.Class = dr["Class"].ToString();
u.Birthday = Convert.ToDateTime(dr["Birthday"]); ulist.Add(u);
}
}
conn.Close();
return ulist;
}
/// <summary>
/// 将数据添加到Users表中
/// </summary>
/// <param name="us">要添加到表中的Users对象</param>
/// <returns>添加成功返回true,失败返回false</returns>
public bool Insert(Users us)
{
bool ok=false;
int count = ;
comm.CommandText = "insert into Users values(@a,@b,@c,@d,@e,@f,@g)";
comm.Parameters.Clear();
comm.Parameters.AddWithValue("@a",us.Name);
comm.Parameters.AddWithValue("@b", us.Password);
comm.Parameters.AddWithValue("@c", us.Nick);
comm.Parameters.AddWithValue("@d", us.Sex);
comm.Parameters.AddWithValue("@e", us.Nation);
comm.Parameters.AddWithValue("@f", us.Class);
comm.Parameters.AddWithValue("@g", us.Birthday);
try
{
conn.Open();
count = comm.ExecuteNonQuery();
}
catch
{
ok = false;
}
finally
{
conn.Close();
}
if (count > )
ok = true;
else
ok = false;
return ok;
} /// <summary>
/// 完整删除和完整修改中,查询此用户是否存在
/// </summary>
/// <param name="username">要查询的Users对象</param>
/// <returns>返回TRUE表示由此用户</returns>
public bool select(string username)
{
bool has = false;
comm.CommandText = "select *from Users where usename=@a";
comm.Parameters.Clear();
comm.Parameters.AddWithValue("@a",username);
conn.Open();
SqlDataReader dr = comm.ExecuteReader();
if(dr.HasRows)
{
has = true;
}
conn.Close();
return has;
}
/// <summary>
/// 完整删除中查到用户后执行的删除操作
/// </summary>
/// <param name="uname">要删除的Users对象<</param>
/// <returns>返回true表示删除成功</returns>
public bool Delete(string uname)
{
bool have = false;
int count_del = ;
comm.CommandText = "delete from Users where usename=@a";
comm.Parameters.Clear();
comm.Parameters.AddWithValue("@a",uname);
try
{
conn.Open();
count_del = comm.ExecuteNonQuery();
}
catch
{
have = false;
}
finally
{
conn.Close();
}
if (count_del > )
have = true;
return have;
}
/// <summary>
/// 完整修改用户所有信息中查到用户后执行的修改操作
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
public bool Update(Users user)
{
bool ok = false;
int count = ;
comm.CommandText = "update Users set password=@b,nick=@c,sex=@d,nation=@e,class=@f,birthday=@g";
comm.Parameters.Clear();
comm.Parameters.AddWithValue("@b",user.Password);
comm.Parameters.AddWithValue("@c", user.Nick);
comm.Parameters.AddWithValue("@d", user.Sex);
comm.Parameters.AddWithValue("@e", user.Nation);
comm.Parameters.AddWithValue("@f", user.Class);
comm.Parameters.AddWithValue("@g", user.Birthday);
try
{
conn.Open();
count = comm.ExecuteNonQuery();
}
catch
{
ok = false;
}
finally
{
conn.Close();
}
if(count>)
{
ok=true;
}
return ok;
}
/// <summary>
/// 完整修改用户中查到用户后执行的单独修改密码操作
/// </summary>
/// <param name="user1"></param>
/// <returns></returns>
public bool Update1(Users user)
{
bool ok = false;
int count = ;
comm.CommandText = "update Users set password=@b";
comm.Parameters.Clear();
comm.Parameters.AddWithValue("@b", user.Password);
try
{
conn.Open();
count = comm.ExecuteNonQuery();
}
catch
{
ok = false;
}
finally
{
conn.Close();
}
if (count > )
{
ok = true;
}
return ok;
}
/// <summary>
/// 完整修改用户中查到用户后执行的单独修改昵称操作
/// </summary>
/// <param name="user1"></param>
/// <returns></returns>
public bool Update2(Users user1)
{
bool ok = false;
int count = ;
comm.CommandText = "update Users set nick=@b";
comm.Parameters.Clear();
comm.Parameters.AddWithValue("@b", user1.Nick);
try
{
conn.Open();
count = comm.ExecuteNonQuery();
}
catch
{
ok = false;
}
finally
{
conn.Close();
}
if (count > )
{
ok = true;
}
return ok;
}
/// <summary>
/// 完整修改用户中查到用户后执行的单独修改性别操作
/// </summary>
/// <param name="user1"></param>
/// <returns></returns>
public bool Update3(Users user1)
{
bool ok = false;
int count = ;
comm.CommandText = "update Users set sex=@b";
comm.Parameters.Clear();
comm.Parameters.AddWithValue("@b", user1.Sex);
try
{
conn.Open();
count = comm.ExecuteNonQuery();
}
catch
{
ok = false;
}
finally
{
conn.Close();
}
if (count > )
{
ok = true;
}
return ok;
}
/// <summary>
/// 完整修改用户中查到用户后执行的单独修改民族操作
/// </summary>
/// <param name="user1"></param>
/// <returns></returns>
public bool Update4(Users user1)
{
bool ok = false;
int count = ;
comm.CommandText = "update Users set nation=@b";
comm.Parameters.Clear();
comm.Parameters.AddWithValue("@b", user1.Nation);
try
{
conn.Open();
count = comm.ExecuteNonQuery();
}
catch
{
ok = false;
}
finally
{
conn.Close();
}
if (count > )
{
ok = true;
}
return ok;
}
/// <summary>
/// 完整修改用户中查到用户后执行的单独修改班级操作
/// </summary>
/// <param name="user1"></param>
/// <returns></returns>
public bool Update5(Users user1)
{
bool ok = false;
int count = ;
comm.CommandText = "update Users set class=@b";
comm.Parameters.Clear();
comm.Parameters.AddWithValue("@b", user1.Class);
try
{
conn.Open();
count = comm.ExecuteNonQuery();
}
catch
{
ok = false;
}
finally
{
conn.Close();
}
if (count > )
{
ok = true;
}
return ok;
}
/// <summary>
/// 完整修改用户中查到用户后执行的单独修改生日操作
/// </summary>
/// <param name="user1"></param>
/// <returns></returns>
public bool Update6(Users user1)
{
bool ok = false;
int count = ;
comm.CommandText = "update Users set birthday=@b";
comm.Parameters.Clear();
comm.Parameters.AddWithValue("@b", user1.Birthday);
try
{
conn.Open();
count = comm.ExecuteNonQuery();
}
catch
{
ok = false;
}
finally
{
conn.Close();
}
if (count > )
{
ok = true;
}
return ok;
} }
}

ado.net 属性扩展 综合练习的更多相关文章

  1. ADO.Net属性扩展

    属性扩展 大体意思:有外键关系时将代号化信息处理成原始文字 如:Info表中的民族列显示的是民族代号处理成Nation表中的民族名称 需要在Info类里面扩展一个显示nation名称的属性 using ...

  2. 【2017-04-21】Ado.Nte属性扩展

    通过对数据库表的封装,对该表的属性进行扩展. 1.例如:表中的性别是bool类,要实现显示给用户看的为“男.女” 2.通过表中的生日datetime类,来实现显示给用户看的年月日,自动计算年龄. 3. ...

  3. ADO SQL属性扩展————多表组合成新的更完整的表

    create database guoji--建立数据库 go use guoji go create table xinxi--建立表一 ( name ), minzu ) ) '); '); ') ...

  4. ADO.NET(查询、属性扩展)

    一.ADO.NET 融合面向对象的查询语句 1.只查询一条数据 //数据访问中的select方法 public stu select(string xuehao) { stu s = null; cm ...

  5. ADO.NET 【属性扩展】性别、年龄、编号

    1.性别属性扩展 private bool _Sex; //成员变量 public bool Sex // 属性 { get { return _Sex; } set { _Sex = value; ...

  6. ADO.NET 数据访问类查询、属性扩展

    今天,我首先在之前所做的人员管理系统的基础上,利用数据访问类进行了所有人员信息的查询. 主程序代码: List<Users> Ulist = new UsersData().Select( ...

  7. YbSoftwareFactory 代码生成插件【十九】:实体类配合数据库表字段进行属性扩展的小技巧

    实体类通常需要和数据库表进行了ORM映射,当你需要添加新的属性时,往往同时也需要在数据库中添加相应的字段并配置好映射关系,同时可能还需对数据访问组件进行重新编译和部署才能有效.而当你开始设计一个通用数 ...

  8. C#-ado.net-属性扩展

    属性扩展 是封装好的类中添加更多属性,此方法可以添加更多的数据运算方法,更灵活便捷 上一篇中介绍的是实体类和数据访问类,实体类封装的内容如下: 执行查询语句后,结果如下: 我们可以看到,性别显示的是t ...

  9. grootJs属性扩展 groot.bindExtend

    index12.html <html><head> <title>grootJs属性扩展 groot.bindExtend</title> <sc ...

随机推荐

  1. ok6410按键中断编程,linux按键裸机

    6410按键中断编程 一.流程分析 外部中断控制寄存器(s3c6410x  359页) 1.EINTxCONy: 外部中断组x的第y个控制器.这个就是设置中断的触发方式.有5种触发方式. 2.EINT ...

  2. Intent传递对象的两种方法(Serializable,Parcelable) (转)

    今天讲一下Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是Bundle.putParcela ...

  3. Android系统架构

    Linux内核层 为Android的各种设备提供了底层驱动 系统运行库层 为Android提供一些底层的库,如数据库.3D绘图等 应用框架层 核心API 应用层 具体的手机application An ...

  4. C#分布式缓存Couchbase使用

    目前C#业界使用得最多的 Cache 系统主要是 Memcached和 Redis. 这两个 Cache 系统可以说是比较成熟的解决方案,也是很多系统当然的选择. 一.简介 目前C#业界使用得最多的 ...

  5. 最值得学习的10个C语言开源项目

    最好别下载最新版,因为代码量比较大,可以下载很早的版本 搜索词:开源 C Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我 ...

  6. 实现窗体随着鼠标移动(控件)--《用delphi开发共享软件》-15.1任务管理器

    private //窗体移动: OldPos,NewPos:TPoint; bMove:Boolean; procedure TForm1.FormMouseDown(Sender: TObject; ...

  7. 使用frameset时的target属性

    http://blog.sina.com.cn/s/blog_8f82e8280101bwx9.html

  8. oracle的内置函数

    1.wmsys.wm_concat   行转列函数 select wmsys.wm_concat(destnumber) from mms_send_his_record group by sendn ...

  9. CF#335 Lazy Student

    Lazy Student time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  10. Learning storm book 笔记8-Log Processing With Storm

    有代码的书籍看起来就是爽,看完顺便跑个demo,感觉很爽! 场景分析 主要是利用apache的访问日志来进行分析统计 如用户的IP来源,来自哪个国家或地区,用户使用的Os,浏览器等信息,以及像搜索的热 ...