版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章图书维护
9.1图书维护窗体介绍9.2DataSet对象9.3DataAdapter对象9.4DataTable对象9.5图书维护窗体的实现9.6水晶报表9.7知识拓展9.8习题图书维护窗体实现了对图书信息的增加、删除和修改,窗体如图9-1所示,单击“增加”按钮,弹出如图9-2所示的增加图书窗体。9.1图书维护窗体介绍图9-1图书维护窗体图9-2增加图书窗体
DataSet可以视为一个内存数据库,由许多数据表、数据表联系(Relation)、约束(Constraint)、记录(Row)以及字段(Column)对象的集合所组成。
DataSet的结构与数据库相似,由一个或多个DataTable组成,DataTable相当于数据库中的表。其中列DataColumn与行DataRow分别对应于数据库的字段与数据行。DataSet中的数据存放在DataTable中。DataSet、DataTable的结构如图9-3所示。9.2DataSet对象图9-3DataSet、DataTable的结构
DataSet对象一个重要的特性是离线操作,即从数据库中取回数据,存到DataSet对象中后,程序可以马上断开与数据库的连接,用户可以对内存中DataSet中的数据进行增加、删除等修改,而当需要把改动反映到数据库时,只要重新与数据库建立连接,并利用相应的命令实现更新即可。这意味着程序和数据库的连接时间可以尽可能缩短,减少对数据库服务器资源的占用。由于DataSet对象本身不具备和数据源沟通的能力,因此要修改、更新数据并返回数据源时,需要DataAdapter对象。
DataAdapter提供的是对于数据集的填充和对更新的回传任务,对于DataSet来说,DataAdapter有点像一个搬运工,把数据从数据库“搬运”到DataSet中,DataSet中的数据有了改动的时候,又可以把这些改动“反映”给数据库。而DataAdapter做这件事情,靠的是它所包含的4个Command对象:9.3DataAdapter对象● SelectCommand 用于在数据源中选择记录的SQL命令。
● InsertCommand 用来在数据源中插入新记录的SQL命令。
● UpdateCommand用于更新数据源中记录的SQL命令。
● DeleteCommand 用来从数据集删除记录的SQL命令。
创建DataAdapter一般用以下方式:
SqlDataAdapterda=newSqlDataAdapter(selectSQL,Connection);其中,selectSQL为返回数据集的Select语句,Connection用于指定所用的连接。这种方式等价于另一种常用的DataAdapter创建方式:
SqlDataAdapterda=newSqlDataAdapter(); //创建DataAdapter
SqlCommandcmd=newSqlCommand(selectSQL,conn);//创建Command
da.SelectCommand=cmd; //给DataAdapter的SelectCommand赋值利用DataAdapter对象的Fill方法把数据填充到DataSet。DataAdapter使用的Connection对象并不需先用Open方法打开。调用DataAdapter的Fill方法时,如果Connection没有打开,DataAdapter会自动调用Connection的Open方法;DataAdapter对数据源的操作完毕后,会自动将Connection关闭。如果在执行Fill方法时Connection已打开,在执行完毕后DataAdapter会维持Connection打开状态。
DataTable是构成DataSet最主要的对象,DataTable对象是由DataColumns集合以及DataRows集合所组成的,DataSet的数据就存放在DataTable对象中。DataTable对象的常用属性见表9-1。9.4DataTable对象表9-1DataTable对象的常用属性
DataTable对象的常用方法:
● AcceptChanges 确定DataTable所作的改变。
● Clear 清除DataTable内所有的数据。
● NewRow 增加一笔新的记录。
DataColumn对象就是字段对象,是组成数据表DataTable的基本单位。DataColumn的属性见表9-2。表9-2DataColumn的属性
【例9-1】下面的例子把图书表中的数据取到DataSet中,然后把DataSet中的内容显示出来,运行结果如图9-4所示。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.Data;
usingSystem.Data.SqlClient;//引入数据库相关名称空间
classProgram
{
staticvoidMain(string[]args)
{
SqlConnectionconn=newSqlConnection("server=PC-20101005APPX;database=BookDB;integratedsecurity=true");
SqlDataAdapterda=newSqlDataAdapter("select*from图书表",conn);
DataSetds=newDataSet();
da.Fill(ds);//填充数据到ds
for(inti=0;i<ds.Tables[0].Rows.Count;i++)
{
Console.WriteLine(ds.Tables[0].Rows[i]["图书编号"].ToString()+"\t"+ds.Tables[0].Rows[i]["书名"].ToString());
}
}
}图9-4例9-1运行结果【例9-2】动态生成内存表DataTable,运行结果如图9-5所示。图9-5例9-2运行结果
新建一个Windows项目,从工具栏向窗体拖入一个DataGridView控件;双击窗体,切换到代码窗口,为Form1的Load事件编写如下代码:
privatevoidForm1_Load(objectsender,EventArgse)
{
//创建内存表DataTable
DataTabletable=newDataTable("book");
table.Columns.Add("BookID"); //增加Index列
table.Columns.Add("BookName"); //增加BookName列
DataRowrow=table.NewRow(); //产生一个行DataRow,该行的结构与DataTable的行结构相同
row["BookID"]="C0008";
row["BookName"]="ASP.NET程序设计";
table.Rows.Add(row);
row=table.NewRow();
row["BookID"]="C0009";
row["BookName"]="数据库原理";
table.Rows.Add(row); //把DataRow加入到DataTable
dataGridView1.DataSource=table;
}【例9-3】利用DataSet和DataAdapter实现数据的增、删、改。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.Data;
usingSystem.Data.SqlClient;
classProgram
{
staticvoidMain(string[]args)
{
stringconnStr="server=PC-20101005APPX;database=bookdb;integratedsecurity=true";
SqlConnectionconn=newSqlConnection(connStr);
SqlDataAdapterda=newSqlDataAdapter("select*from图书表",conn);
DataSetds=newDataSet();da.Fill(ds);
//插入新的一行
DataRowdr1=ds.Tables[0].NewRow();
dr1["图书编号"]="88";
dr1["书名"]="ASP.NET项目开发教程";
dr1["作者"]="李四";
ds.Tables[0].Rows.Add(dr1);
//更新第二行
DataRowdr2=ds.Tables[0].Rows[1];
dr2["书名"]="C#经典";
//删除第五行
ds.Tables[0].Rows[2].Delete();
SqlCommandBuildercb=newSqlCommandBuilder(da);
da.Update(ds.Tables[0]);
}
}程序说明:
在上面的程序中,我们调用DataAdapter的Update方法实现对数据库的更新:
da.Update(ds,“Books”);
在处理数据的时候,DataRow对象会自动记录目前记录的状况,只要记录一有改变便做标记。等调用DataAdapter对象的Update方法时,DataAdapter会根据DataSet中数据的增、删、改等情况,使用适当的SQL命令将修改更新至数据源。Update这个方法会检查每一个DataRow的状态,若DataRow是新增加的,该方法就执行Insert的SQL命令;若DataRow被修改过,该方法就执行Update的SQL命令;若DataRow被删除,则执行Delete的SQL命令。那么,实现更新的Insert、Update、Delete这些SQL从哪来呢?DataAdapter中有四个Command对象属性,分别是SelectCommand、InsertCommand、UpdateCommand以及DeleteCommand属性。我们可以预先准备好这几个Command,需要时DataAdapter会自动调用。但我们并未对DataAdapter的几个Command赋值,因为要产生这些Command比较麻烦,系统提供了一个简化的方法,即利用CommandBuilder对象自动构建。本例中对应的实现语句为:
SqlCommandBuildercb=newSqlCommandBuilder(da);
DataSet中的数据必须至少存在一个主键列或唯一列,否则,调用Update()时将产生异常,不会生成自动更新数据库的INSERT、UPDATE或DELETE命令。下面介绍实现图书维护窗体,效果如图9-6所示。
图书维护V1.0的实现步骤如下:
(1)新建一个Windows应用程序BookEdit。
(2)添加一个名为FrmBook的窗体。
(3)如图所示设计FrmBook的窗体界面。9.5图书维护窗体的实现图9-6图书维护窗体设计界面(4)编写FrmBook窗体的代码。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Data.SqlClient;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;
namespaceBook
{
publicpartialclassFrmBook:Form
{publicstaticSqlConnectionconn=newSqlConnection("server=PC-20101005APPX;database=bookdb;integratedsecurity=true");
publicFrmBook()
{
InitializeComponent();
}
//加载数据
privatevoidFrmBook_Load(objectsender,EventArgse)
{
dataGridView1.AutoGenerateColumns=true;
panel3.BringToFront();
bind();
}//绑定数据
voidbind()
{
DataSetds=newDataSet();
SqlCommandcmd=newSqlCommand("select*from图书表",conn);
SqlDataAdapterda=newSqlDataAdapter(cmd);
da.Fill(ds);
dataGridView1.DataSource=ds.Tables[0];
}
//单击“增加”按钮
privatevoidtsbAdd_Click(objectsender,EventArgse)
{
FrmAddfrm=newFrmAdd();frm.bookNO=dataGridView1.CurrentRow.Cells["图书编号"].Value.ToString();
frm.Text="增加图书";
frm.ShowDialog();
bind();
}
//单击“删除”按钮
privatevoidtsbDelete_Click(objectsender,EventArgse)
{
try
{
if(MessageBox.Show("确定要删除该图书吗?","提示",MessageBoxButtons.OKCancel,MessageBoxIcon.Question)==DialogResult.OK){
ExecuteCommand("delete图书表where图书编号="+dataGridView1.CurrentRow.Cells["图书编号"].Value.ToString());
bind();
MessageBox.Show("删除数据成功!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message,"提示",MessageBoxButtons.OKCancel,MessageBoxIcon.Information);
}
}//单击“编辑”按钮
privatevoidtsbEdit_Click(objectsender,EventArgse)
{
FrmAddfrm=newFrmAdd();
frm.Text="修改图书";
frm.fill(dataGridView1.CurrentRow.Cells["图书编号"].Value.ToString());
frm.ShowDialog();
bind();
}
//单击“关闭”按钮
privatevoidtsbClose_Click(objectsender,EventArgse)
{
Close();
}
//执行并返回影响行数
publicstaticintExecuteCommand(stringsql,paramsSqlParameter[]values)
{
SqlCommandcmd=newSqlCommand(sql,conn);
cmd.Parameters.AddRange(values);
conn.Open();
intresult=cmd.ExecuteNonQuery();
conn.Close();
returnresult;
}
//双击单元格
privatevoiddataGridView1_CellDoubleClick(objectsender,DataGridViewCellEventArgse)
{
tsbEdit_Click(null,null);
}
}
}(5)添加一个名为FrmAdd的窗体,界面如图9-7所示。图9-7增加/修改图书窗体设计代码如下:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.Data.SqlClient;
namespaceBook
{
publicpartialclassFrmAdd:Form
{
publicstringbookNO;publicFrmAdd()
{
InitializeComponent();
}
publicvoidfill(stringbookNO)
{
SqlConnectionconn=newSqlConnection("server=PC-20101005APPX;database=bookdb;integratedsecurity=true");
DataSetds=newDataSet();
SqlCommandcmd=newSqlCommand("select*from图书表where图书编号='"+bookNO+"'",conn);
SqlDataAdapterda=newSqlDataAdapter(cmd);
da.Fill(ds);
txtISBN.Text=ds.Tables[0].Rows[0][1].ToString();txtBookName.Text=ds.Tables[0].Rows[0][2].ToString();
txtAuthor.Text=ds.Tables[0].Rows[0][3].ToString();
txtPrice.Text=ds.Tables[0].Rows[0][4].ToString();
txtPublisher.Text=ds.Tables[0].Rows[0][5].ToString();
datePublisher.Value=Convert.ToDateTime(ds.Tables[0].Rows[0][6]);
txtQty.Text=ds.Tables[0].Rows[0][7].ToString();
this.bookNO=bookNO;
}
privatevoidbutton1_Click(objectsender,EventArgse)
{
stringsql;
if(this.Text=="增加图书")
{
sql="INSERTINTO图书表(ISBN,书名,作者,价格,出版社,出版日期,库存数)VALUES(@isbn,@bookName,@author,@price,@publisher,@pubDate,@qty)";
SqlParameter[]param=newSqlParameter[]{
newSqlParameter("isbn",txtISBN.Text),
newSqlParameter("bookName",txtBookName.Text),
newSqlParameter("author",txtAuthor.Text),
newSqlParameter("price",txtPrice.Text),
newSqlParameter("publisher",txtPublisher.Text),
newSqlParameter("pubDate",datePublisher.Value),
newSqlParameter("qty",txtQty.Text)
};
FrmBook.ExecuteCommand(sql,param);
MessageBox.Show("成功增加一条记录");
}
elseif(this.Text=="修改图书")
{
sql="UPDATE图书表SETISBN=@isbn,书名=@bookName,作者=@author,价格=@price,出版社=@publisher,出版日期=@pubDate,库存数=@qtyWHERE图书编号=@bookNO";
SqlParameter[]param=newSqlParameter[]{
newSqlParameter("isbn",txtISBN.Text),
newSqlParameter("bookName",txtBookName.Text),
newSqlParameter("author",txtAuthor.Text),
newSqlParameter("price",txtPrice.Text),
newSqlParameter("publisher",txtPublisher.Text),
newSqlParameter("pubDate",datePublisher.Value),
newSqlParameter("qty",txtQty.Text),
newSqlParameter("bookNO",bookNO)
};
FrmBook.ExecuteCommand(sql,param);
MessageBox.Show("记录修改成功!");
}
}
}
}9.6.1拉模式与推模式
1.拉模式
在拉模式中,驱动程序将连接到数据库并根据需要将数据“拉”进来。使用这种模式时,与数据库的连接和为了获取数据而执行的SQL命令同时由CrystalReports本身处理,不需要开发人员编写代码。
如果在运行时无须编写任何特殊代码,则使用拉模式。9.6水晶报表
2.推模式
推模式需要开发人员编写代码以连接到数据库,执行SQL命令以创建与报表中的字段匹配的记录集或数据集,并且将该对象传递给报表。该方法可以将连接共享置入应用程序中,并在CrystalReports收到数据之前先将数据筛选出来。
相比拉模式,推模式有更大的灵活性,下面仅介绍推模式的报表开发方式。9.6.2报表设计
报表设计界面如图9-8所示,报表分为若干个报表节,如“报表页眉”、“页脚和详细资料”,可将对象拖动到某个报表节上。图9-8报表设计界面●“报表页眉”:放在“报表页眉”节中的对象只在报表开头输出显示一次。“报表页眉”节通常包含报表的标题和其他希望只在报表开始位置出现的信息。放在该节中的公式只在报表开始处进行一次求值。
●“页眉”:放在“页眉”节中的对象输出显示在每个新页的开始位置。“页眉”节通常包含希望在每页顶部出现的信息,它可以包括文本字段(如章节名、文档名或其他类似信息),该节也可以用来包含字段标题,在报表中这些字段标题将作为标签显示在字段数据列的顶部。图表或交叉表不能放置在该节中。放在该节中的公式在每个新页的开始进行一次求值。●“详细资料”:放在“详细资料”部分中的对象随每条新记录输出显示。“详细资料”部分包含报表正文数据。当报表运行时,“详细资料”部分随每条记录重复输出显示。例如,如果向“详细资料”部分中添加了一个数据库对象,而这个数据库对象包含100条记录,那么报表在运行时将输出显示100个单独的“详细资料”部分。图表或交叉表不能放置在该节中。放在该节中的公式对每条记录进行一次求值。
●“报表页脚”:放在“报表页脚”节中的对象只在报表的结束位置输出显示一次。该节可用来包含希望只在报表的末尾出现一次的信息(如总计),放在该节中的图表和交叉表包含整个报表的数据,放在该节中的公式只在报表的结束位置进行一次求值。●“页脚”:放在“页脚”节中的对象输出显示在每页的底部。该节通常包含页码和任何其他希望出现在每页底部的信息。图表和交叉表不能放置在该节中。放在该节中的公式在每个新页面的结束位置进行一次求值。
●其他报表节:如果将组、摘要或小计添加到报表中,则会创建另外两个节:“组页眉”和“组页脚”。当添加了组、摘要或小计时,“组页眉”节出现在“详细资料”部分的正上方,而“组页脚”节出现在“详细资料”部分的正下方。跟原始报表节一样,每个新添加的节也可以包含一个或多个子节。●“组页眉”:放在“组页眉”节中的对象输出显示在每个新组的开始位置。该节通常保存组名字段,也可以用来显示包括组特定数据的图表或交叉表。“组页眉”节在每组的开始位置输出显示一次。放在该节中的图表和交叉表仅包含本组数据。放在该节中的公式在每组的开始对本组进行一次求值。
●“组页脚”:放在“组页脚”节中的对象输出显示在每组的结束位置。该节通常保存汇总数据(如果有),也可以用来显示图表或交叉表。“组页脚”节在每组的结束位置输出显示一次。放在该节中的图表和交叉表仅包含本组数据。放在该节中的公式在每组的结束位置对本组进行一次求值。9.6.3制作图书信息的报表
下面介绍制作图书信息的报表,报表效果如图9-9所示。图9-9报表效果图书维护V2.0的实现步骤如下:
(1)用VS2005打开图书维护项目。
(2)建立数据集。
①单击菜单“项目”→“添加新项”,弹出“添加新项”窗口,在“模板”列表中选中数据集,如图9-10所示。单击“添加”按钮,出现如图9-11所示DataSet1.xsd设计界面。图9-10“添加新项”窗口图9-11DataSet1.xsd设计界面②从“工具箱”的“数据集”栏拖动一个TableAdapter到DataSet1.xsd设计页面,弹出如图9-12所示的窗口,新建一个连接或选择好数据库连接,单击“下一步”按钮。图9-12新建连接③弹出如图9-13所示窗口,选中“使用SQL语句”,单击“下一步”按钮。图9-13选择“使用SQL语句”④弹出如图9-14所示的“TableAdapter”窗口,输入“select*from图书表”。图9-14输入SQL语句⑤单击“完成”按钮,DataSet1.xsd中多了一个DataTabe,如图9-15所示。图9-15完成的DataSet1.xsd界面
(3)创建报表。
①单击菜单“项目”→“添加新项”,弹出“添加新项”窗口,在“模板”列表中选中“Crystal报表”,如图9-16所示;单击“添加”按钮,弹出如图9-17所示的“CrystalReports库”窗口;单击“确定”按钮,弹出“标准报表创建向导”,如图9-18所示。图9-16“添加新项”窗口图9-17选择使用“报表向导”图9-18“标准报表创建向导”窗口②展开ADO.NET节点,选中“图书表项”,单击按钮,把“图书表”选择到右边“选定的表”列表中。单击“下一步”按钮,弹出如图9-19所示的窗口;单击按钮,把所有字段添加到右边“要显示的字段”列表中;单击“完成”按钮,系统界面进入如图9-20所示的报表设计界面。图9-19选择要显示的字段图9-20初始报表设计界面③取消“页眉”部分的其他列标题的下划线。
选中“页眉”部分的所有标题字段,在“属性”窗口展开Font节点,设置Undeline属性为False。
④绘制表格。
在报表设计界面上右击鼠标,在弹出菜单中选择“插入”→“框”。鼠标图标变为画笔的形状,拖到鼠标,画出一个矩形方框。效果如图9-21所示。图9-21绘制表格调整好报表各元素的大小与位置,如图9-22所示。图9-22调整好报表各元素
在报表设计界面上右击鼠标,在弹出菜单中选择“插入”→“框”。鼠标图标变为画笔的形状,在“详细资料”栏下方划一条横线。如图9-23所示。图9-23在“详细资料”栏下方划一条横线
在报表设计界面上右击鼠标,在弹出菜单中选择“插入”→“框”。鼠标图标变为画笔的形状,在图书编号与ISBN字段间画竖线,然后对竖线进行复制、粘贴操作,在其他各字段间插入竖线。如图9-24所示。图9-24字段间画竖线
(4)制作报表窗体。
①向项目添加一个窗体,命名为FrmReport。
②从工具箱的CrystalReports栏向FrmReport窗体拖动一个CrystalReportViewer控件。设置其DisplayGroupTree属性为False。
③为FrmReport窗体的Load事件编写如下代码:usingSystem.Data.SqlClient;
usingCrystalDecisions.CrystalReports.Engine;
…
privatevoidForm1_Load(objectsender,EventArgse)
{SqlConnectionconn=newSqlConnection(“server=PC-20101005APPX;
database=bookdb;integratedsecurity=true");
DataSetds=newDataSet();
stringsql="select*FROM图书表";
SqlCommandcmd=newSqlCommand(sql,conn);
SqlDataAdapterda=newSqlDataAdapter(cmd);
da.Fill(ds);
ReportDocumentreportDocument=newReportDocument();
reportDocument.Load(Application.StartupPath+“\\CrystalReport1.rpt”);
reportDocument.SetDataSource(ds.Tables[0]);
crystalReportViewer1.ReportSource=reportDocument;
}
(5)把CrystalReport1.rpt文件拷到项目的bin/debug目录下,运行项目。9.7.1DataView对象
ADO.NET提供了一个可以自定义数据外观的DataView对象,是一种用来帮助设置DataTable中的数据如何显示的对象,其本身并不包含DataTable中的数据。通过DataView对象可以过滤、排序和查找对应DataTable中的数据。对DataView对象所执行的任何操作都会影响原来的DataTable中的数据。9.7知识拓展
DataTable提供了一个DefaultView属性,DefaultView属性本身就是DataView对象,可以通过设置DefaultView的属性来指定DataTable的显示格式。如果DefaultView这个DataView对象无法满足需求,还可以建立多个DataView对象来制定数据的显示格式。其声明语法如下所示:
DataViewdataView=newDataView(数据表)
DataView对象的常用属性及方法见表9-3。表9-3DataView对象的常用属性及方法排序数据时可以使用DataView对象的Sort属性。Sort属性以字段作为排序的依据,其基本语法如下:
DataView.Sort="字段ASC|DESC"
筛选记录可以使用DataView对象的RowFilter属性以及RowStateFilter属性。RowFilter属性可以利用比较运算符 <、>、<=、>= 以及Like来过滤记录中的数据,其语法如下所示:
DataView.RowFilter="过滤条件"
例如,查询Country列等于USA的数据,可写成:
DataView.RowFilter="Country='USA'"9.7.2数据库公用类
从软件工程的角度,代码要尽可能的实现重用,或者说,同样的代码要避免写两次。在前面的编程中,可以感觉到数据库操作的代码有许多重复的地方。因此,可以把对数据库操作的共同部分提炼出来,封装到一个类中。以后可以调用类中的方法,轻松地实现数据库的操作,并把编程的精力集中在实现应用的逻辑上。该类DbHelper.cs的内容如下:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.Data;
usingSystem.Data.SqlClient;
classDBHelp
{
privateSqlConnectionconn;
publicDBHelp()
{
conn=newSqlConnection(“server=PC-20101005APPX;database=
bookdb;integratedsecurity=true");
}//执行并返回影响行数
publicintExecuteCommand(stringsql)
{
SqlCommandcmd=newSqlCommand(sql,conn);
OpenConn();
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 冬季施工暖棚搭设方案
- 人教版九年级化学上册自制第六单元课题4实验活动2-二氧化碳实验室制取与性质(34张)
- 2019-2020学年高中数学第2章解析几何初步2-3空间直角坐标系课件北师大版必修2
- 接待礼仪-素材-培训讲学
- 教育学原理04-近现代高等教育发展、教师
- 2024年泰州职业技术学院高职单招数学历年参考题库含答案解析
- 2024年阳江市卫校附属医院高层次卫技人才招聘笔试历年参考题库频考点附带答案
- 二零二五年离婚房产分割与赡养义务协议3篇
- 二零二五版“汽车零部件销售协议”英文翻译
- 2024年江西医学高等专科学校高职单招职业技能测验历年参考题库(频考版)含答案解析
- 2024年建筑施工安全工作计划(3篇)
- 2024届九省联考英语试题(含答案解析、MP3及录音稿)
- 仓库消防知识安全培训
- 从事专业与所学专业不一致专业技术人员申报职称岗位任职合格证明附件6
- 我国房屋建筑模板技术的研究综述
- 人教版小学三年级上册数学竖式笔算练习题
- 航天科工集团在线测评题
- 山东省潍坊新2025届高三语文第一学期期末经典试题含解析
- (新版)吉林一级健康管理师高频核心题库300题(含答案)
- JT-T-1344-2020纯电动汽车维护、检测、诊断技术规范
- 2024年湖北省武汉市中考语文试卷真题(含答案)
评论
0/150
提交评论