《讲数据库编程》PPT课件.ppt

上传人:w****2 文档编号:16968848 上传时间:2020-11-05 格式:PPT 页数:34 大小:1.55MB
收藏 版权申诉 举报 下载
《讲数据库编程》PPT课件.ppt_第1页
第1页 / 共34页
《讲数据库编程》PPT课件.ppt_第2页
第2页 / 共34页
《讲数据库编程》PPT课件.ppt_第3页
第3页 / 共34页
资源描述:

《《讲数据库编程》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《讲数据库编程》PPT课件.ppt(34页珍藏版)》请在装配图网上搜索。

1、数据库基础知识 数据库访问技术 ADO.NET数据库访问 上页 下页 节 末页 结束 8.1 数据库基础知识 基本概念 :数据库 关系模型 表 主关键字 MS SQL Server + MS Access + MySql + Oracle SQL语句 :增删改查 SELECT * FROM Contact WHERE(Sex=True) ORDER BY Name ASC INSERT INTO Contact(Name,Sex) Values(Mary,false); UPDATE Contact SET BirthDate=1980/2/2 WHERE Name=Mary DELETE F

2、ROM Contact Where Name=Mary; 上页 下页 节 末页 结束 存储过程 CREATE PROCEDURE UpDateContactByName(Name) AS UPDATE Contact SET Contact.BirthDate = 1982/5/6 WHERE (Contact.Name)=Name) Go 上页 下页 节 末页 结束 8.2 数据库访问技术 RDBMS Directory Service RDBMS Email ODBC OLE DB ADO VC+ VB Delphi ADO.NET作用与 ADO相同 ,但与 .NET FrameWork无

3、缝 集成 ,能访问 XML,提供断开式的数据访问模型 上页 下页 节 末页 结束 8.3 ADO.NET数据库访问 ADO.NET组成 :分 .NET数据提供程序和 DataSet两部分 ,前者用 以实现各类数据操作,后者是 ADO.NET断开式数据访问模型 的核心 ,依靠 DataAdapter类与数据库通信 . .NET Framework数据提供程序的具体实现 有两个 ,分别是 SQL Server .NET数据提供程序和 OLE DB.NET数据提供程序 ,前者 可高效访问 SQL Server7.0以上版本的数据库 ,后者更通用 DataBase XML .NET Data Prov

4、ider Connection Command DataReader DataAdapter DataSet DataTable DataColumn DataRow DataRelation Constraint 上页 下页 节 末页 结束 使用两种 .NET Data Provider访问数据库 SQL Server .NET Data Provider (访问 SQL Server 7.0数据库 ) OLE DB .net Data Provider (如访问 MS Access数据库 ) 命名空间 using System.Data.SqlClient; using System.Da

5、ta.OleDb; 实例化连接 SqlConnection conn=new SqlConnection(); OleDbConnection conn = new OleDbConnection(); 连接字符串 与连接的创 建与打开 (串有多种 形式 ,可借 助 .udl生成) string connStr= “Data Source=(local); Initial Catalog=students; user Id=sa; password=123”; string connStr = Provider=Microsoft.Jet.OLEDB.4.0; Data Source= ; c

6、onnStr+=“Datastudents.mdb; conn.ConnectionString = connStr; conn.open(); 实例化命令 执行命令 返回数据流 SqlCommand cmd = conn.CreateCommand(); OleDbCommand cmd = conn.CreateCommand(); cmd.CommandType=CommandType.Text; /StoreProcedure cmd.CommandText = Select ID,sName from student; SqlDataReader rd = cmd.ExecuteRe

7、ader(); OleDbDataReader rd = cmd.ExecuteReader(); 访问数据 while(rd.Read() Cosnsole.Write(reader.GetString(0); 关闭 reader.close(); conn.close(); 上页 下页 节 末页 结束 ADO.NET访问 ACCESS举例 控制台输出数据 using System; using System.Data.OleDb; /人工引入 using System.Data; /人工引入 namespace class Program static void Main(string a

8、rgs) OleDbConnection conn = new OleDbConnection(); string connStr =Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:教学 dotnetContactDb.mdb;Persist Security Info=False; conn.ConnectionString = connStr; conn.Open(); if (conn.State = ConnectionState.Open) Console.WriteLine(ok); OleDbCommand cmd = conn.Cr

9、eateCommand(); cmd.CommandType = CommandType.Text; cmd.CommandText = select * from contact order by Name ASC; OleDbDataReader rd = cmd.ExecuteReader(); while (rd.Read() Console.WriteLine(0,1,2,3 , rd.GetInt32(0), rd.GetString(1) , rd.GetBoolean(2)?男 :女 ,rd.GetDateTime(3).ToShortDateString(); rd.Clos

10、e(); conn.Close(); 上页 下页 节 末页 结束 ADO.NET访问 MS SQL Server数据库举例: SqlConnection conn; SqlDataReader reader; try conn = new SqlConnection(); string connStr = “Data Source=(local);Initial Catalog=students; user Id=bb;password=bb”; /也可用 sa conn.ConnectionString = connStr; conn.Open(); if (conn.State = Con

11、nectionState.Open) MessageBox.Show(接 通 ); SqlCommand cmd = conn.CreateCommand(); cmd.CommandType=CommandType.Text; cmd.CommandText = Select ID,sName from student; reader = cmd.ExecuteReader(); string output; while (reader.Read() output = string.Format(学生 0t学号是 1n, reader.GetString(1), reader.GetInt3

12、2(0); lblOutput.Text = lblOutput.Text + output; catch (Exception ex) MessageBox.Show(“操作 失败 + ex.Message); finally reader.Close(); conn.Close(); 上页 下页 节 末页 结束 再例:注意命令的创建与异常的处理 using System; using System.Data.OleDb; using System.Data; namespace class Program static void Main(string args) string connS

13、tr = Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:教学 dotnetContactDb.mdb;Persist Security Info=False; using(OleDbConnection conn = new OleDbConnection() conn.ConnectionString = connStr; conn.Open(); if (conn.State = ConnectionState.Open) Console.WriteLine(ok); OleDbCommand cmd = new OleDbCommand()

14、; cmd.Connection = conn; cmd.CommandType = CommandType.Text; cmd.CommandText = select * from contact order by Name ASC; OleDbDataReader rd = cmd.ExecuteReader(); while (rd.Read() Console.WriteLine(0,1,2,3,rd.GetInt32(0), rd.GetString(1), rd.GetBoolean(2) ? 男 : 女 , rd.GetDateTime(3).ToShortDateString

15、(); rd.Close(); 上页 下页 节 末页 结束 Command详解 SQL Server Access 通过已存在 数据库连接 实例化命令 SqlCommand cmd = conn.CreateCommand(); OleDbCommand cmd = conn.CreateCommand(); cmd.CommandText = Select ID,sName from student; 用构造函数 实例化命令 对象并赋值 SqlCommand cmd=new SqlCommand(); cmd.Connection=conn; cmd.CommandText=commandS

16、tring; cmd.CommandType=CommandType.Text/StoredProcedure SqlCommand cmd=new SqlCommand(CommandText); SqlCommand cmd=new SqlCommand(CommandText,ConnectionObject); 命令对象的 成员方法 ExecuteNonQuery:插入、更新、删除,不返回结果 ExecuteScalar:执行返回单个值的命令 ExecuteReader:返回一个 DataReader对象 ExecuteXmlReader:返回 XmlReader对象 ,SqlComm

17、and特有 上页 下页 节 末页 结束 向数据库插入一条记录 using System; using System.Data.OleDb; using System.Data; namespace class Program static void Main(string args) string connStr = Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:教学 dotnetContactDb.mdb;Persist Security Info=False; using(OleDbConnection conn = new OleDbCon

18、nection() conn.ConnectionString = connStr; conn.Open(); OleDbCommand cmd = new OleDbCommand(); cmd.Connection = conn; cmd.CommandType = CommandType.Text; cmd.CommandText = INSERT INTO Contact(Name,Sex,BirthDate) Values(Mary,false,1980/5/5); int count = cmd.ExecuteNonQuery(); Console.WriteLine(共 0行被改

19、变 , count); 更新: UPDATE Contact SET telephone=123456789 Where (name=Mary); 删除 : cmd.CommandText = DELETE FROM Contact Where Name=Mary; 上页 下页 节 末页 结束 利用用带参数的 SQL语句 : (处理复杂表和赋变量值更清晰 ) static void Main(string args) string connStr = Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:教学 dotnetContactDb.mdb;Pe

20、rsist Security Info=False; using (OleDbConnection conn = new OleDbConnection() conn.ConnectionString = connStr; conn.Open(); OleDbCommand cmd = new OleDbCommand(); cmd.Connection = conn; cmd.CommandType = CommandType.Text; cmd.CommandText = INSERT INTO Contact(Name,Sex,BirthDate) Values(Name,Sex,Bir

21、thDate); OleDbParameter parms = new OleDbParameter new OleDbParameter(Name,OleDbType.VarChar,50), new OleDbParameter(Sex,OleDbType.Boolean), new OleDbParameter(BirthDate,OleDbType.Date) ; parms0.Value = Mary; parms1.Value = true; parms2.Value = Convert.ToDateTime(“1977/5/6”); /可隐式转换 cmd.Parameters.A

22、ddRange(parms); int count = cmd.ExecuteNonQuery(); Console.WriteLine(共 0行被改变 , count); 上页 下页 节 末页 结束 对比:将文本框中的数据放入 sql语句 cmd.CommandText = INSERT INTO Contact(Name,Sex,BirthDate) Values(+textBox1.Text+,+textBox2.Text+,+textBox3.Text+); 用带参数的 SQL语句更清晰 cmd.CommandText = INSERT INTO Contact(Name,Sex,Bi

23、rthDate) Values(Name,Sex,BirthDate); OleDbParameter parms = new OleDbParameter new OleDbParameter(Name,OleDbType.VarChar,50), new OleDbParameter(Sex,OleDbType.Boolean), new OleDbParameter(BirthDate,OleDbType.Date) ; parms0.Value = textBox1.Text; parms1.Value = Convert.ToBoolean(textBox2.Text); /可隐式转

24、换 parms2.Value = Convert.ToDateTime(textBox3.Text);/可隐式转换 cmd.Parameters.AddRange(parms); 上页 下页 节 末页 结束 DataReader详解 SQL Server Access 数据阅读器 对象的创建 SqlDataReader reader= cmd.ExecuteReader(); OleDbDataReader reader= cmd.ExecuteReader(); 遍历数据阅 读器中的记 录 while(rd.read() rd.getInt32(0); (int)reader0; 或 (in

25、t)reader“ID”; rd.GetInt32(0);rd.GetString(1); rd.GetBoolean(2) ? 男 : 女 , rd.GetDateTime(3).ToShortDateString() (Boolean)rd2) ? 男 : 女 , (DateTime)rd3).ToShortDateString(); rd“Name”; rd“Sex”; /返回 Object类型,需同上进行类型转换 上页 下页 节 末页 结束 关于数据集 DataSet和绑定 前者对于复杂数据库操作不适用,后者 简化了操作,但破坏了三层结构,通常 不提倡使用,自学 上页 下页 节 末页

26、结束 回顾:连接数据库并执行查询命令 using System; using System.Data.OleDb; /自行引入 using System.Data; /自行引入 namespace class Program static void Main(string args) string connStr = Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:教学 dotnetContactDb.mdb;Persist Security Info=False; using(OleDbConnection conn = new OleDbCon

27、nection() conn.ConnectionString = connStr; conn.Open(); if (conn.State = ConnectionState.Open) Console.WriteLine(ok); OleDbCommand cmd = new OleDbCommand(); cmd.Connection = conn; cmd.CommandType = CommandType.Text; cmd.CommandText = select * from contact order by Name ASC; OleDbDataReader rd = cmd.

28、ExecuteReader(); while (rd.Read()/ 实际应先判断是否有行 Console.WriteLine(0,1,2,3,rd.GetInt32(0), rd.GetString(1), rd.GetBoolean(2) ? 男 : 女 , rd.GetDateTime(3).ToShortDateString(); rd.Close(); 上页 下页 节 末页 结束 连接数据库并执行增删改命令 using System; using System.Data.OleDb; using System.Data; namespace class Program static

29、void Main(string args) string connStr = Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:教学 dotnetContactDb.mdb;Persist Security Info=False; using(OleDbConnection conn = new OleDbConnection() conn.ConnectionString = connStr; conn.Open(); OleDbCommand cmd = new OleDbCommand(); cmd.Connection = conn; cm

30、d.CommandType = CommandType.Text; cmd.CommandText = INSERT INTO Contact(Name,Sex,BirthDate) Values(Mary,false,1980/5/5); int count = cmd.ExecuteNonQuery(); Console.WriteLine(共 0行被改变 , count); 更新: UPDATE Contact SET telephone=123456789 Where (name=Mary); 删除 : cmd.CommandText = DELETE FROM Contact Whe

31、re Name=Mary; 上页 下页 节 末页 结束 带参数的 SQL语句 : static void Main(string args) string connStr = Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:教学 dotnetContactDb.mdb;Persist Security Info=False; using (OleDbConnection conn = new OleDbConnection() conn.ConnectionString = connStr; conn.Open(); OleDbCommand cm

32、d = new OleDbCommand(); cmd.Connection = conn; cmd.CommandType = CommandType.Text; cmd.CommandText = INSERT INTO Contact(Name,Sex,BirthDate) Values(Name,Sex,BirthDate); OleDbParameter parms = new OleDbParameter new OleDbParameter(Name,OleDbType.VarChar,50), new OleDbParameter(Sex,OleDbType.Boolean),

33、 new OleDbParameter(BirthDate,OleDbType.Date) ; parms0.Value = Mary; parms1.Value = true; parms2.Value = Convert.ToDateTime(“1977/5/6”); /可隐式转换 cmd.Parameters.AddRange(parms); int count = cmd.ExecuteNonQuery(); Console.WriteLine(共 0行被改变 , count); 上页 下页 节 末页 结束 对比:将文本框中的数据放入 sql语句 cmd.CommandText = I

34、NSERT INTO Contact(Name,Sex,BirthDate) Values(+textBox1.Text+,+textBox2.Text+,+textBox3.Text+); 用带参数的 SQL语句更清晰 cmd.CommandText = INSERT INTO Contact(Name,Sex,BirthDate) Values(Name,Sex,BirthDate); OleDbParameter parms = new OleDbParameter new OleDbParameter(Name,OleDbType.VarChar,50), new OleDbParam

35、eter(Sex,OleDbType.Boolean), new OleDbParameter(BirthDate,OleDbType.Date) ; parms0.Value = textBox1.Text; parms1.Value = Convert.ToBoolean(textBox2.Text); /可隐式转换 parms2.Value = Convert.ToDateTime(textBox3.Text);/可隐式转换 cmd.Parameters.AddRange(parms); 上页 下页 节 末页 结束 三层结构开发: 表现层 (Client): MainForm窗体 ,常用

36、 DataGridView(参 考教材 )或 ListView控件 (参考视频,通过 Columns属性添 加字段名 ,设置 FullRowSelect和 Gridlines为 Ture,设置 View属性为 Details) 业务逻辑层 (Business): ContactBiz类 ,提供静态方法 数据服务层 (DataAccess):ContactDaol类 ,提供静态方法 实体模型类 (Model):ContactInfo类 ,封装各字段 ,对应一行 上页 下页 节 末页 结束 实体类:注意字段、属性修饰符及可空类型 class ContactInfo private int _id;

37、 public int Id /重构 封装字段 get return _id; set _id = value; private string _name; public string Name private bool? _sex; /可空类型,因数据库中此字段可空 public bool? Sex /可空类型 get return _sex; set _sex = value; private DateTime? _birthDate; public DateTime? BirthDate private string _telePhone; /引用类型本身就可为空 public stri

38、ng TelePhone get return _telePhone; set _telePhone = value; 上页 下页 节 末页 结束 数据服务层: class ContactDao private const string CONN_STRING = Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:教学 dotnetContactDb.mdb;Persist Security Info=False; private const string INSERT_STRING= INSERT INTO Contact (Name,Sex,Bi

39、rthDate,TelePhone) Values(Name,Sex,BirthDate,TelePhone); private const string DELETE_STRING =DELETE FROM Contact WHERE ID=ID; private const string UPDATE_STRING = UPDATE Contact SET Name=Name,Sex=Sex,BirthDate=BirthDate ,TelePhone=TelePhone Where ID=ID; private const string SELECT_ALL_STRING = SELEC

40、T * FROM Contact; private const string SELECT_BY_NAME_STRING = SELECT * FROM Contact Where Name=Name; public static int InsertInfo(ContactInfo contactInfo) public static int DeleteInfo(int Id) public static int UpdateInfo(ContactInfo contactInfo) public static IList GetAllContact() public static ILi

41、st GetByName(string name) 上页 下页 节 末页 结束 public static int InsertInfo(ContactInfo contactInfo) using (OleDbConnection conn = new OleDbConnection() conn.ConnectionString = CONN_STRING; conn.Open(); OleDbCommand cmd = new OleDbCommand(); cmd.Connection = conn; cmd.CommandType = CommandType.Text; cmd.Co

42、mmandText = INSERT_STRING; OleDbParameter parms = new OleDbParameter new OleDbParameter(Name,OleDbType.VarChar,50), new OleDbParameter(Sex,OleDbType.Boolean), new OleDbParameter(BirthDate,OleDbType.Date), new OleDbParameter(TelePhone,OleDbType.VarChar,50) ; parms0.Value = contactInfo.Name; parms1.Is

43、Nullable = true; if (contactInfo.Sex.HasValue) parms1.Value = contactInfo.Sex; else parms1.Value = DBNull.Value; parms2.IsNullable = true; if (contactInfo.BirthDate.HasValue) parms2.Value = contactInfo.BirthDate; else parms2.Value = DBNull.Value; parms3.IsNullable = true; if (String.IsNullOrEmpty(co

44、ntactInfo.TelePhone) parms3.Value = DBNull.Value; else parms3.Value = contactInfo.TelePhone; cmd.Parameters.AddRange(parms); return (cmd.ExecuteNonQuery(); 上页 下页 节 末页 结束 public static int DeleteInfo(int Id) using (OleDbConnection conn = new OleDbConnection() conn.ConnectionString = CONN_STRING; conn

45、.Open(); OleDbCommand cmd = new OleDbCommand(); cmd.Connection = conn; cmd.CommandType = CommandType.Text; cmd.CommandText = DELETE_STRING; OleDbParameter parms = new OleDbParameter new OleDbParameter(ID,OleDbType.Integer) ; parms0.Value = Id; cmd.Parameters.AddRange(parms); return(cmd.ExecuteNonQue

46、ry(); 上页 下页 节 末页 结束 public static IList GetAllContact() List contactList=new List(); using (OleDbConnection conn = new OleDbConnection() conn.ConnectionString = CONN_STRING; conn.Open(); OleDbCommand cmd = new OleDbCommand(); cmd.Connection = conn; cmd.CommandType = CommandType.Text; cmd.CommandText

47、 = SELECT_ALL_STRING; using (OleDbDataReader rd = cmd.ExecuteReader() if (rd.HasRows) while (rd.Read() ContactInfo contactInfo = featch(rd); contactList.Add(contactInfo); return contactList; private static ContactInfo featch(OleDbDataReader rd) ContactInfo contactInfo = new ContactInfo(); contactInf

48、o.Id=rd.GetInt32(0); contactInfo.Name=rd.GetString(1); if (!rd.IsDBNull(2) contactInfo.Sex = rd.GetBoolean(2); if (!rd.IsDBNull(3) contactInfo.BirthDate = rd.GetDateTime(3); if (!rd.IsDBNull(4) contactInfo.TelePhone = rd.GetString(4); return contactInfo; 上页 下页 节 末页 结束 业务逻辑层: class ContactBiz public

49、static int InsertInfo(ContactInfo contactInfo) return ContactDao.InsertInfo(contactInfo);/之 前应判断是否 重名 public static int DelteInfo(int Id) return ContactDao.DeleteInfo(Id); public static int UpdateInfo(ContactInfo contactInfo) return ContactDao.UpdateInfo(contactInfo); public static IList GetAllConta

50、ct() return ContactDao.GetAllContact(); public static IList GetByName(string name) return (ContactDao.GetByName(name); 上页 下页 节 末页 结束 表现层:控制台界面,测试使用 static void Main(string args) ContactInfo contactInfo = new ContactInfo(); contactInfo.Name = Mary; contactInfo.Sex = true; contactInfo.BirthDate= Conve

51、rt.ToDateTime(1987/5/6); contactInfo.TelePhone=13216540231 ; int result = ContactBiz.InsertInfo(contactInfo); Console.WriteLine(插入 0行 , result); Console.WriteLine(删除 0行 ,ContactBiz.DelteInfo(16); / Console.WriteLine(更新 0行 , ContactBiz.UpdateInfo(contactInfo); List contactList = (List)ContactBiz.GetA

52、llContact(); foreach (ContactInfo contact in contactList) Console.WriteLine(0 1 2 3 4 ,contact.Id,contact.Name,contact.Sex,contact.BirthDate,contact.TelePhone); contactList = (List) ContactBiz.GetByName(Mary); foreach (ContactInfo contact in contactList) Console.WriteLine(0 1 2 3 4, contact.Id,conta

53、ct.Name,contact.Sex,contact.BirthDate,contact.TelePhone); 上页 下页 节 末页 结束 表现层: Windows窗体界面 菜单 :可继续添加分组管理等项 DataGridView控件 :RowHeadersVisible+ SelectionMode +ReadOnly +DataSource+Rows+ Columns 外观属性 :见 P279,如交替行等 事件 :RowsAdded RowsRemoved RowEnter RowLeave 上页 下页 节 末页 结束 主窗体加载: private void Form1_Load(ob

54、ject sender, EventArgs e) LoadAllToView(); private void LoadAllToView() List contactList = new List(); contactList = (List)ContactBiz.GetAllContact(); dataGridView1.DataSource = contactList; 上页 下页 节 末页 结束 添加联系人:联系人信息编辑窗体 public partial class EditContactForm : Form private ContactInfo contact; intern

55、al ContactInfo Contact get return contact; set contact = value; private void submitButton_Click(object sender, EventArgs e) /此处应验证输入有效性,自行添加 this.contact=new ContactInfo(); this.contact.Name=textBox1.Text; this.contact.Sex=comboBox1.SelectedIndex=0?true:false; this.contact.BirthDate=dateTimePicker1.

56、Value; this.contact.TelePhone=textBox2.Text; this.DialogResult = DialogResult.OK; 上页 下页 节 末页 结束 添加联系人:主窗体菜单 private void newContactMenuItem_Click(object sender, EventArgs e) EditContactForm dlg = new EditContactForm(); dlg.Text = 添加联系人 ; if (dlg.ShowDialog() = DialogResult.OK) /此处应验证输入有效性 ContactBiz

57、.InsertInfo(dlg.Contact); LoadAllToView(); /性能低 ,可单独添加一行 ,但无 Id DataGridViewRow row = new DataGridViewRow(); row.CreateCells(dataGridView1); row.Cells1.Value = dlg.Contact.Name; row.Cells2.Value = dlg.Contact.Sex; row.Cells3.Value = dlg.Contact.BirthDate; . dataGridView1.Rows.Add(row); 上页 下页 节 末页 结束 联系人管理: 删除、更新类似添加 更新 :再定义一个窗体专门显示查找结果,或者 以 MessageBox的方式给出结果 上页 下页 节 末页 结束 查看

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!