基于C#窗体的数据库应用系统.pptx

上传人:tian****1990 文档编号:12827988 上传时间:2020-05-29 格式:PPTX 页数:35 大小:3.09MB
返回 下载 相关 举报
基于C#窗体的数据库应用系统.pptx_第1页
第1页 / 共35页
基于C#窗体的数据库应用系统.pptx_第2页
第2页 / 共35页
基于C#窗体的数据库应用系统.pptx_第3页
第3页 / 共35页
点击查看更多>>
资源描述
基于C#窗体的数据库应用系统开发基础与方法,(4课时),内容,简易成绩管理系统介绍及需求分析可枚举类型与集合绑定及作用数据集及作用适配器及作用ADO.NET应用系统体系结构LINQ,LINQtoSQL,EntityFramework系统框架实现(实例),1简易成绩管理系统介绍及需求分析,本需求分析方法、步骤适用管理信息系统,1.调研系统应用环境模拟成绩管理;课程如1年级1学期语文标识,一门课程可分多个教学班级,每个班级有唯一的一个任课老师;局域网内运行。,2.获取成绩管理业务工作的工人可能成为未来系统的参与者(一个系统用户可以执行多个参与者的操作)及工作内容1)成绩管理员:课程管理、教学班安排、学生管理、老师管理、成绩修改、打印成绩表等2)任课教师:班级成绩登记、打印成绩登记表等3)学生:查询本人成绩等,3.从参与者获取处理数据资料1)成绩管理员:课程信息、班级信息、老师信息、学生信息、成绩信息等2)任课教师:相关班级成绩信息等3)学生:本人成绩信息等作为教学案例,简化系统:1)老师指任课老师和管理员,用角色区分,并作为系统用户。2)成绩登记过程分两步:录入-暂存(*);提交。因此,成绩信息包括暂存成绩和确定成绩。3)学生不作为系统用户。,4.数据库,说明:设计表TempResult的目的是为了网格录入中学生名称列显示的方便,另外对于更复杂的成绩管理系统设计此表可提高编程方便性和运行效率在Teach表中增加state是为了控制成绩录入过程,2.1可枚举类型,实现了接口IEnumerable或泛型接口IEnumerable的类型是可枚举类型如果一个类定义了GetEnumerator()方法,其对象可作为foreachin和LINQ中的fromin表达式,publicinterfaceIEnumerableIEnumeratorGetEnumerator();publicinterfaceIEnumerable:IEnumerableIEnumeratorGetEnumerator();,publicinterfaceIEnumeratorobjectCurrentget;boolMoveNext();voidReset();publicinterfaceIDisposablevoidDispose();publicinterfaceIEnumerator:IEnumerator,IDisposableTCurrentget;,枚举器实现接口IEnumerator或泛型接口IEnumerator,2.2集合,仅提供枚举功能的低级集合接口,如IEnumerable和IEnumerable;提供大小、枚举和同步操作的集合接口ICollection和提供大小、枚举、添加元素和移除元素等操作的泛型集合接口ICollection;提供可按照索引访问元素的高级集合接口,如IList和IList;提供专用功能的字典集合接口,如IDictionary和IDictionary等;提供通用功能的集合类,如ArrayList和List;提供专用功能的集合类,如Hashtable、Queue、Stack、Dictionary、Queue和Stack等。,3绑定及作用,数据绑定,即建立控件属性与对象属性(或对象列表中当前对象属性)之间关系,以实现数据同步。,(M),(V),(C),ReadValue,WriteValue,控件属性,Binding类对象,对象属性或对象列表IList当前对象属性get,set,绑定例子,BindingSamples/BasicBinding:/定义参与绑定的(数据源:如Form)对象属性:Titleprivatestringtitle;publicstringTitlegetreturntitle;settitle=value;privatevoidForm1_Load(objectsender,EventArgse)/将控件的Text属性绑定到对象的Title属性BindingtextBinding=newBinding(Text,this,Title,false);textBox1.DataBindings.Add(textBinding);,BindingSource类对象,BindingSource组件有多种用途。它在Windows窗体控件与数据源之间提供流通管理CurrencyManager、更改通知和其他服务,简化了窗体上的控件到数据源的绑定。通过它的DataSource属性将BindingSource组件关联到数据源。,BindingSamples/ListBinding:privateBindingSourcebs;privatevoidForm1_Load(objectsender,EventArgse)/设计时bs的DataSource成员为typeof(Person),即为类型信息bs=newBindingSource(ponents);Listlist=newList();list.Add(newPerson(12345,LY,true);list.Add(newPerson(67890,ZHI,false);bs.DataSource=list;idTextBox.DataBindings.Add(newBinding(Text,bs,ID,true);nameTextBox.DataBindings.Add(newBinding(Text,bs,Name,true);sexCheckBox.DataBindings.Add(newBinding(CheckState,bs,Sex,true);,4数据集及作用,System.Data命名空间提供ADO.NET体系结构中内存数据库访问功能的类。DataSet对象,简单说是一个轻量级的内存数据库。DataSet主要相关类型DataTable、DataRow、DataColumn、DataRelation及对应的集合类(*Collection),Constraint及子类(UniqueConstraint、ForeignKeyConstraint)和ConstraintCollection,等等。类型化数据集与非类型化数据集。作用:象数据库一样临时保存结构化数据,提供插入、删除、修改数据等功能;缓冲数据库中的数据,为快速高效更新数据库数据提供基础。,数据集对象与控件绑定的对象关系图,DataSet对象绑定,ReslutManReslutMan:publicstaticvoidDisplayStudent()SqlDataAdapterad=newSqlDataAdapter(SELECT*FROMStudent,ResultDb.GetConnection();DataSetds=newDataSet();ad.Fill(ds,Student);BindingSourcebs=newBindingSource();bs.DataSource=ds;bs.DataMember=Student;dataGridView1.DataSource=bs;/或直接dataGridView1.DataSource=ds;dataGridView1.DataMember=Student;,5适配器及作用,使用System.Data.SqlClient、System.Data.Odbc、System.Data.OleDb或System.Data.OracleClient命名空间,可访问要与DataSet结合使用的数据源。每个.NETFramework数据提供程序都有相应的DataAdapter适配器是数据源即数据库和DataSet之间的桥梁。,不通过适配器访问数据库使用的对象关系图,Connection对象,ReslutManReslutMan:classResultDbpublicstaticreadonlystringConnectionString;publicstaticSqlConnectionGetConnection()returnnewSqlConnection(ConnectionString);staticResultDb()ConnectionString=DataSource=.;InitialCatalog=ResultDb;IntegratedSecurity=True;,Command对象-ExecuteNonQuery(),ReslutManReslutMan:publicvoidInsert(stringname,stringpwd,introle)SqlCommandcmd=ResultDb.GetConnection().CreateCommand();cmd.CommandText=INSERTINTOUser(idu,name,pwd,role)VALUES(idu,name,pwd,role);cmd.CommandType=CommandType.Text;cmd.Parameters.Add(newSqlParameter(idu,idu);cmd.Parameters.AddWithValue(name,name);cmd.Parameters.AddWithValue(pwd,pwd);cmd.Parameters.AddWithValue(role,role);cmd.Connection.Open();cmd.ExecuteNonQuery();cmd.Connection.Close();,Command对象-ExecuteReader(),ReslutManReslutMan:publicstaticUserSelect(Guididu)Userother=null;SqlCommandcmd=ResultDb.GetConnection().CreateCommand();cmd.CommandText=SELECT*FROMUserWHEREidu=idu;cmd.CommandType=CommandType.Text;cmd.Parameters.Add(newSqlParameter(idu,idu);cmd.Connection.Open();SqlDataReaderreader=cmd.ExecuteReader();if(reader.Read()other=newUser();other.idu=(Guid)reader“idu”;/可以使用整型下标other.name=readername.ToString();other.pwd=readerpwd.ToString();other.role=(int)readerrole;cmd.Connection.Close();returnother;,Command对象-ExecuteScalar(),ReslutManReslutMan:publicstaticintGetCount()SqlCommandcmd=ResultDb.GetConnection().CreateCommand();cmd.CommandText=SELECTCount(*)FROMUser;cmd.CommandType=CommandType.Text;cmd.Connection.Open();objectcn=cmd.ExecuteScalar();cmd.Connection.Close();return(int)cn;,Command对象-存储过程调用,ReslutManReslutMan:publicstaticvoidCreateTeachTempResult()SqlCommandcmd=ResultDb.GetConnection().CreateCommand();cmd.CommandText=CreateTeachTempResult;cmd.CommandType=CommandType.StoredProcedure;cmd.Parameters.AddWithValue(idtc,idtc);cmd.Connection.Open();cmd.ExecuteNonQuery();cmd.Connection.Close();,通过适配器访问数据库使用的对象关系图,SqlDataAdapter-Fill与DataSet对象,ReslutManReslutMan:publicstaticvoidDisplayStudent()SqlDataAdapterad=newSqlDataAdapter(SELECT*FROMStudent,ResultDb.GetConnection();DataSetds=newDataSet();ad.Fill(ds,Student);dataGridView1.DataSource=ds;dataGridView1.DataMember=Student;,6ADO.NET应用系统的体系结构,SqlDataAdapter对象-UpdateReslutManReslutMan/Form2.cs,:SqlCommandselectCMD=ResultDb.GetConnection().CreateCommand();selectCMD.CommandText=SELECTidst,nameFROMStudent;selectCMD.CommandType=CommandType.Text;/产生SqlDataAdapter对象并设置SelectCommand成员sda=newSqlDataAdapter(selectCMD);/读取数据库表数据并填充到数据集表sda.Fill(dataSet1,Student);/*使用关联的sda.SelectCommand对象自动产生InsertCommand,UpdateCommand,DeleteCommand*/SqlCommandBuilderscb=newSqlCommandBuilder(sda);/查看生成的SQL语句和参数SqlCommandcmd=scb.GetUpdateCommand(true);Strings=cmd.CommandText+Environment.NewLine;foreach(SqlParameterpincmd.Parameters)s+=Name=+p.ParameterName+,Type=+p.SqlDbType.ToString()+Environment.NewLine;/MessageBox.Show(s);/绑定dgvStudent.DataSource=dataSet1;dgvStudent.DataMember=Student;,应该通过VS提供的工具自动生成类型化数据集和适配器,7.1LINQ(LanguageIntegretedQuery),传统上,针对数据的查询都是以简单的字符串表示,而没有编译时类型检查或IntelliSense支持。此外,还必须针对以下各种数据源学习不同的查询语言:SQL数据库、XML文档、各种Web服务等。在VisualStudio2008以后,可以在C#下为各种数据源编写LINQ查询:SQLServer数据库、XML文档、ADO.NET数据集以及支持IEnumerable或泛型IEnumerable)接口的任意对象集合。所有LINQ查询操作都由以下三个不同的操作组成:1)获取数据源2)创建查询3)执行查询,LINQ例子,更多例子见ReslutMan/LINQSample,/TheThreePartsofaLINQQuery:/1.Datasource.intnumbers=newint0,1,2,3,4,5,6;/2.Querycreation./numQueryisanIEnumerablevarnumQuery=fromnuminnumberswhere(num%2)=0selectnum;/3.Queryexecution.foreach(intnuminnumQuery)Console.Write(0,num);,7.2LINQtoSQL,LINQtoSQL是LINQ的一个组件,提供了用于将关系数据作为对象管理的运行时基础结构。在LINQtoSQL中,关系数据库的数据模型映射到编程语言表示的对象关系模型(ORM)。TO:当应用程序运行时,LINQtoSQL将对象模型中的语言集成查询转换为SQL,然后将它们发送到数据库进行执行。FROM:当数据库返回结果时,LINQtoSQL将它们转换编程语言处理的对象。在项目中添加LINQtoSQL类项,即可产生与特定数据库相关的一系列类。查看扩展名为dbml及相关文件。,LINQtoSQL例子,见ReslutMan/LINQtoSQL,ResultDatabaseDataContextdb=newResultDatabaseDataContext();privatevoidForm1_Load(objectsender,EventArgse)teachBindingSource.DataSource=fromtindb.Teachjoinuindb.Useront.idtequalsu.iduwheret.teacherName=王丽华selectt;privatevoidbutton1_Click(objectsender,EventArgse)db.SubmitChanges();,7.3EntityFramework,LINQtoSQL和EntityFramework都是一种包含LINQ功能的对象关系映射技术。它们之间的本质区别是,EF对数据库架构和查询的类型实行了更好的封装。使用EF,查询的对象不再是完全对应数据库架构的C#类,而是更高层的抽象:EntityDataModel。LINQtoSQL是一个轻量级的ORM框架,为MicrosoftSQLServer数据库提供快速的应用程序开发,优点是易于使用、简单、高性能。EntityFramework的优点是为创建数据库架构和实体类之间的映射提供了更好的灵活性,还支持第三方数据库。在项目中添加ADO.NET实体数据模型项,即可产生与特定数据库相关的一系列类。查看扩展名为edmx及相关文件。,LINQtoSQL与EntityFramework,EntityFramework例子,见ReslutMan/EntityApp,ResultDbEntitiesdb=newResultDbEntities();privatevoidForm1_Load(objectsender,EventArgse)dataGridView1.DataSource=fromtrindb.TempResultselecttr;privatevoidbutton1_Click(objectsender,EventArgse)db.SaveChanges();db.AcceptAllChanges();,8.本PPT相关实例程序ResultMan,(请阅读),
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


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

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


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