基于C#窗体的数据库应用系统.pptx_第1页
基于C#窗体的数据库应用系统.pptx_第2页
基于C#窗体的数据库应用系统.pptx_第3页
基于C#窗体的数据库应用系统.pptx_第4页
基于C#窗体的数据库应用系统.pptx_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于C#窗体的数据库应用系统 开发基础与方法,(4课时),内 容,简易成绩管理系统介绍及需求分析 可枚举类型与集合 绑定及作用 数据集及作用 适配器及作用 ADO.NET应用系统体系结构 LINQ, LINQ to SQL, Entity Framework 系统框架实现(实例),1 简易成绩管理系统介绍及需求分析,本需求分析方法、步骤适用管理信息系统,1.调研系统应用环境 模拟成绩管理; 课程如1年级1学期语文标识,一门课程可分多个教学班级,每个班级有唯一的一个任课老师; 局域网内运行。,2.获取成绩管理业务工作的工人可能成为未来系统的参与者(一个系统用户可以执行多个参与者的操作)及工作内容 1)成绩管理员: 课程管理、教学班安排、学生管理、老师管理、成绩修改、打印成绩表等 2)任课教师: 班级成绩登记、打印成绩登记表等 3)学生: 查询本人成绩等,3.从参与者获取处理数据资料 1)成绩管理员: 课程信息、班级信息、老师信息、学生信息、成绩信息等 2)任课教师: 相关班级成绩信息等 3)学生: 本人成绩信息等 作为教学案例,简化系统: 1)老师指任课老师和管理员,用角色区分,并作为系统用户。 2)成绩登记过程分两步:录入-暂存(*);提交。因此,成绩信息包括暂存成绩和确定成绩。 3)学生不作为系统用户。,4. 数据库,说明: 设计表TempResult的目的是为了网格录入中学生名称列显示的方便,另外对于更复杂的成绩管理系统设计此表可提高编程方便性和运行效率 在Teach表中增加state是为了控制成绩录入过程,2.1 可枚举类型,实现了接口IEnumerable或泛型接口IEnumerable的类型是可枚举类型 如果一个类定义了GetEnumerator()方法,其对象可作为foreach in和LINQ中的from in表达式,public interface IEnumerable IEnumerator GetEnumerator(); public interface IEnumerable: IEnumerable IEnumerator GetEnumerator(); ,public interface IEnumerator object Current get; bool MoveNext(); void Reset(); public interface IDisposable void Dispose(); public interface IEnumerator:IEnumerator, IDisposable T Current get; ,枚举器实现接口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)对象属性: Title private string title; public string Title get return title; set title = value; private void Form1_Load(object sender, EventArgs e) /将控件的Text属性绑定到对象的Title属性 Binding textBinding = new Binding(“Text“, this, “Title“,false); textBox1.DataBindings.Add(textBinding); ,BindingSource类对象,BindingSource 组件有多种用途。 它在 Windows 窗体控件与数据源之间提供流通管理CurrencyManager、更改通知和其他服务,简化了窗体上的控件到数据源的绑定。通过它的 DataSource 属性将 BindingSource 组件关联到数据源。,BindingSamples/ListBinding: private BindingSource bs; private void Form1_Load(object sender, EventArgs e) /设计时bs的DataSource成员为typeof(Person),即为类型信息 bs=new BindingSource(ponents); List list = new List(); list.Add(new Person(“12345“, “LY“, true); list.Add(new Person(“67890“, “ZHI“, false); bs.DataSource = list; idTextBox.DataBindings.Add(new Binding(“Text“, bs, “ID“, true); nameTextBox.DataBindings.Add(new Binding(“Text“, bs, “Name“, true); sexCheckBox.DataBindings.Add(new Binding(“CheckState“, bs, “Sex“, true); ,4 数据集及作用,System.Data 命名空间提供ADO.NET 体系结构中内存数据库访问功能的类。 DataSet对象,简单说是一个轻量级的内存数据库。 DataSet主要相关类型DataTable、DataRow、DataColumn、DataRelation 及对应的集合类(*Collection),Constraint及子类(UniqueConstraint 、ForeignKeyConstraint)和ConstraintCollection,等等。 类型化数据集与非类型化数据集。 作用:象数据库一样临时保存结构化数据,提供插入、删除、修改数据等功能;缓冲数据库中的数据,为快速高效更新数据库数据提供基础。,数据集对象与控件绑定的对象关系图,DataSet对象绑定,ReslutManReslutMan: public static void DisplayStudent() SqlDataAdapter ad = new SqlDataAdapter(“SELECT * FROM Student“, ResultDb.GetConnection(); DataSet ds = new DataSet(); ad.Fill(ds, “Student“); BindingSource bs = new BindingSource(); 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 结合使用的数据源。每个 .NET Framework 数据提供程序都有相应的 DataAdapter 适配器是数据源即数据库和 DataSet 之间的桥梁。,不通过适配器访问数据库使用的对象关系图,Connection对象,ReslutManReslutMan: class ResultDb public static readonly string ConnectionString; public static SqlConnection GetConnection() return new SqlConnection(ConnectionString); static ResultDb() ConnectionString = “Data Source=.;Initial Catalog=ResultDb;Integrated Security=True;“; ,Command对象-ExecuteNonQuery(),ReslutManReslutMan: public void Insert(string name, string pwd, int role) SqlCommand cmd = ResultDb.GetConnection().CreateCommand(); cmd.CommandText = “INSERT INTO User (idu,name,pwd,role) VALUES (idu,name,pwd,role)“; cmd.CommandType = CommandType.Text; cmd.Parameters.Add(new SqlParameter(“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: public static User Select(Guid idu) User other = null; SqlCommand cmd = ResultDb.GetConnection().CreateCommand(); cmd.CommandText = “SELECT * FROM User WHERE idu=idu“; cmd.CommandType = CommandType.Text; cmd.Parameters.Add(new SqlParameter(“idu“, idu); cmd.Connection.Open(); SqlDataReader reader= cmd.ExecuteReader(); if (reader.Read() other = new User(); other.idu = (Guid)reader“idu”;/可以使用整型下标 = reader“name“.ToString(); other.pwd = reader“pwd“.ToString(); other.role = (int)reader“role“; cmd.Connection.Close(); return other; ,Command对象-ExecuteScalar(),ReslutManReslutMan: public static int GetCount() SqlCommand cmd = ResultDb.GetConnection().CreateCommand(); cmd.CommandText = “SELECT Count(*) FROM User“; cmd.CommandType = CommandType.Text; cmd.Connection.Open(); object cn = cmd.ExecuteScalar(); cmd.Connection.Close(); return (int)cn; ,Command对象-存储过程调用,ReslutManReslutMan: public static void CreateTeachTempResult() SqlCommand cmd = 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: public static void DisplayStudent() SqlDataAdapter ad = new SqlDataAdapter( “SELECT * FROM Student“, ResultDb.GetConnection(); DataSet ds = new DataSet(); ad.Fill(ds, “Student“); dataGridView1.DataSource = ds; dataGridView1.DataMember = “Student“; ,6 ADO.NET应用系统的体系结构,SqlDataAdapter对象-Update ReslutManReslutMan/Form2.cs,: SqlCommand selectCMD = ResultDb.GetConnection().CreateCommand(); selectCMD.CommandText=“SELECT idst,name FROM Student“; selectCMD.CommandType = CommandType.Text; /产生SqlDataAdapter对象并设置SelectCommand成员 sda = new SqlDataAdapter(selectCMD); /读取数据库表数据并填充到数据集表 sda.Fill(dataSet1, “Student“); /*使用关联的sda.SelectCommand对象自动产生InsertCommand, UpdateCommand,DeleteCommand*/ SqlCommandBuilder scb = new SqlCommandBuilder(sda); /查看生成的SQL语句和参数 SqlCommand cmd = scb.GetUpdateCommand(true); String s = cmd.CommandText + Environment.NewLine; foreach (SqlParameter p in cmd.Parameters) s += “Name=“ + p.ParameterName + “,Type=“ + p.SqlDbType.ToString() + Environment.NewLine; /MessageBox.Show(s); /绑定 dgvStudent.DataSource = dataSet1; dgvStudent.DataMember = “Student“;,应该通过VS提供的工具自动生成类型化数据集和适配器,7.1 LINQ (Language Integreted Query),传统上,针对数据的查询都是以简单的字符串表示,而没有编译时类型检查或 IntelliSense 支持。此外,还必须针对以下各种数据源学习不同的查询语言:SQL 数据库、XML 文档、各种 Web 服务等。 在 Visual Studio 2008以后,可以在C# 下为各种数据源编写 LINQ 查询:SQL Server 数据库、XML 文档、ADO.NET 数据集以及支持 IEnumerable 或泛型 IEnumerable)接口的任意对象集合。 所有 LINQ 查询操作都由以下三个不同的操作组成: 1)获取数据源 2)创建查询 3)执行查询,LINQ例子,更多例子见ReslutMan/LINQSample,/ The Three Parts of a LINQ Query: / 1. Data source. int numbers = new int 0, 1, 2, 3, 4, 5, 6 ; / 2. Query creation. / numQuery is an IEnumerable var numQuery = from num in numbers where (num % 2) = 0 select num; / 3. Query execution. foreach (int num in numQuery) Console.Write(“0 “, num); ,7.2 LINQ to SQL,LINQ to SQL 是LINQ的一个组件,提供了用于将关系数据作为对象管理的运行时基础结构。 在 LINQ to SQL 中,关系数据库的数据模型映射到编程语言表示的对象关系模型(ORM)。 TO: 当应用程序运行时,LINQ to SQL 将对象模型中的语言集成查询转换为 SQL,然后将它们发送到数据库进行执行。 FROM: 当数据库返回结果时,LINQ to SQL 将它们转换编程语言处理的对象。 在项目中添加LINQ to SQL类项,即可产生与特定数据库相关的一系列类。查看扩展名为dbml及相关文件。,LINQ to SQL例子, 见ReslutMan/LINQtoSQL,ResultDatabaseDataContext db = new ResultDatabaseDataContext(); private void Form1_Load(object sender, EventArgs e) teachBindingSource.DataSource = from t in d

温馨提示

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

评论

0/150

提交评论