1、C#程序设计项目6 简历系统数据库应用C#程序设计1.了解ADO.NET的相关概念。2.会进行数据库连接相;3.能使用数据库操作类定义数据操作方法;4.能完成简单控件与复杂控件的数据绑定;5.能完成简历管理系统的数据连接类与登录类。教学目标C#程序设计1.简历管理系统中数据信息如何与系统的关联2.数据如何从界面传递到数据库3.从数据库传递到界面6.1 知识储备数据访问模型数据访问模型C#程序设计ADO.NET3.5中提供了以下四种数据库提供程序1.SQL Server.NET Framework数据提供程序2.OLE DB.NET Framework数据提供程序3.ODBC.NET Frame
2、work数据提供程序4.Oracle.NET Framework数据提供程序6.1.1 .NET Framework数据提供程序C#程序设计1.SqlConnection类 Sqlconnection类用于表示到 SQL Server 数据库的打开的连接。该类主要有两个构造函数:public SqlConnection()必须设置SqlConnection对象的ConnectionString属性,如下面的代码:SqlConnection conn=new SqlConnection();conn.ConnectionString=Integrated Security=SSPI;Databa
3、se=resume;Server=.sqlExpress;6.1.2 数据库访问类C#程序设计 public SqlConnection(string connectionString)具体如下面的代码:SqlConnection conn=new SqlConnection(Integrated Security=SSPI;Database=resume;Server=(local););6.1.2 数据库访问类C#程序设计已知数据连接对象conn,可有3种连接数据方式。使用数据库文件所在位置进行数据库配置,适用于数据库服务器没开启和开启的情况。conn.ConnectionString=D
4、ata Source=(local);AttachDbFilename=D:数据库 resume.mdf;Integrated Security=True;Connect Timeout=60;User Instance=True;也可以为:conn.ConnectionString=Data Source=(local);AttachDbFilename=D:数据库 resume.mdf;Integrated Security=True;Connect Timeout=60;User Instance=True;6.1.2 数据库访问类C#程序设计 在项目中使用添加现有项的方法添加数据库文件
5、得到的连接字符串,适用于数据库服务器没开启和开启的情况。得到的连接字符串为:conn.ConnectionString=Data Source=.SQLEXPRESS;AttachDbFilename=D:数据库 resume.mdf;Integrated Security=True;6.1.2 数据库访问类C#程序设计 在数据库服务器开启的情况下,可以使用Windows集成安全身份验证,例如:conn.ConnectionString=Integrated Security=SSPI;Database=resume;Server=localhost;或者:conn.ConnectionStr
6、ing=Trusted_connection=true;Database=resume;Server=localhost;或者:conn.ConnectionString=Initial Catalog=resume;Data Source=localhost;Integrated Security=SSPI;);6.1.2 数据库访问类C#程序设计 在数据库服务器开启的情况下,另一种是在连接字符串中指定服务器名、用户id、用户口令、数据库名等信息。例如:conn.ConnectionString=server=localhost;uid=sa;pwd=123;database=resume;
7、6.1.2 数据库访问类C#程序设计 2.SqlCommand类 一般情况下,对数据的插入、删除、查询、更新等操作通过SqlComand类型的对象来实现。常用的构造函数有以下3个:public SqlCommand();public SqlCommand(string cmdtext);Public SqlCommand(string cmdtext,SqlConnection connection);6.1.2 数据库访问类C#程序设计假如已知SqlConnetion对象conn,SqlCommand对象的声明方法如下:SqlCommand comd=new SqlCommand();com
8、d.Connection=conn;或者:string sql=select*from student;SqlCommand comd=new SqlCommand(sql);comd.Connection=conn;或者:string s=select*from student;SqlCommand comd=new SqlCommand(s,conn);6.1.2 数据库访问类C#程序设计SqlCommand类实现了对数据库的操作,在保持连接的方式访问并操作数据库的一般步骤为:创建SqlConnection的实例;创建SqlCommand的实例;打开连接后,将SqlCommand关联,同时
9、要给SqlCommand的ComandText赋值为合法的sql语句;执行命令;关闭连接。6.1.2 数据库访问类C#程序设计SqlCommand类常用的操作数据库的方法有以下3个。(1)ExecuteNonQuery()方法(2)ExecuteReader()方法(3)ExecuteScaler()方法6.1.2 数据库访问类C#程序设计3.SqlDataReader类 用于存放Command对象检索得到的数据集。该类不能使用构造函数实例化,若要创建SqlDataReader,必须调用SqlCommand对象的ExecuteReader方法。6.1.2 数据库访问类C#程序设计【例6-1】完
10、成一个Windows应用程序,实现简历管理系统中用户信息的注册功能,并且要求昵称nickname不能重复,并实现使用SqlDataReader类查询某一个用户的信息。分析:这里我们使用Windows应用程序是实现。在项目中添加Users类,类代码见4.5。(1)添加用户信息,用户信息stuid为标识字段,即自动增长,要添加的字段包括昵称nickname以及密码password,需要添加用户添加方法AddUser,需要 传 递 的 参 数 有 两 个:n i c k n a m e 的 值 及password的值。也可以封装为Users类型的对象。6.1.2 数据库访问类C#程序设计(2)保证昵
11、称唯一,对要添加的昵称进行数据库检查;(3)实现根据昵称查询,形式参数为nickname的值,返回一个Users类型的对象。判断时,根据stuid的值进行判断,因为stuid是自动增长字段,数据库中如果有记录,最小值为1,所以如果该对象的stuid大于0,则对象不为空,否则,使用改昵称的对象存在。6.1.2 数据库访问类C#程序设计实现步骤如下:建立Windows应用程序,添加“Users”类。设计窗体如下:编写代码 运行程序,检验结果。6.1.2 数据库访问类图6-1-1 窗体设计C#程序设计4.SqlDataAdapter类 SqlDataAdapter隐式使用SqlConnection、
12、SqlCommand类型的对象填充DataSet对象,完成后自动断开与数据库服务器的连接。使用这种方式操作数据库的一般步骤为:1)创建SqlConnection的实例2)创建SqlComand实例6.1.2 数据库访问类C#程序设计3)创建SqlDataAdapter的实例,并与SqlComand实例关联,需要的的话,通过SqlCommandBuilder设置InsertCommand、UpdateCommand和DeleteComman属性,以便实现数据的更新;4)创建DataSet的实例;5)使用Fill方法将数据库中的表填充到DataSet的表中;6)用DataGridView或其他控件
13、对象编辑或显示数据;7 需要的话,使用Update方法更新数据库。6.1.2 数据库访问类C#程序设计5.DataTable类 DataTable提供了对表中数据的各种操作,常作为 DataSet的成员使用。DataTable类型的对象可以通过构造函数创建,也可用 DataAdapter对象的 Fill 方法或 FillSchema 方法在 DataSet中创建。DataTable对象也包括行、列以及约束等属性。初次创建需要创建DataColumn的列对象,每一行都是一个DataRow类型的对象。6.1.2 数据库访问类C#程序设计DataTable类型的对象创建流程如下:(1)创建DataT
14、able对象(2)在DataTable对象中添加列(3)设置DataTable对象的主键(4)在DataTable对象中创建行6.1.2 数据库访问类C#程序设计【例6-2】创建Student表,包括id、name、password三个字段,并添加数据记录,将结果显示在界面的DataGridView控件上。分析:生成student表,并添加3个string类型的字段,添加一条或多条数据记录,然后,设置DataGridView控件的DataSource属性为表即可。6.1.2 数据库访问类图6-1-2 运行结果C#程序设计6.Dataset类 DataSet类型的对象相当于一个二维的数据库,用于
15、存放多张DataTable类型的表格,一般情况下,用于实现数据的浏览等相关操作。创建DataSet对象 DataSet dataset=new DataSet();填充DataSet对象 调用SqlDataAdapter对象的Fill方法将数据填充到DataSet中的某个表中。6.1.2 数据库访问类C#程序设计【例6-3】设计Windows应用程序,实现resume数据库中addressbook表的数据显示在dataGridView控件上,并能通过dataGridView控件实现数据更新。分析:这里使用两种方式实现。一是使用代码实现SqlConnection、SqlCommand、SqlDa
16、taAdapter、以及DataSet;一种是使用工具箱中的控件进行实现。6.1.2 数据库访问类C#程序设计数据绑定技术就是把已经打开的数据集中某个或者某些字段绑定到组件的某些属性上面的一种技术。使用数据绑定,可以方便的对已打开的数据集中的记录进行浏览、删除、插入等具体的数据操作、处理。可以设计时或运行时绑定。根据控件实现数据绑定的复杂度,分为简单数据绑定与复杂型数据绑定。数据绑定一般步骤:连接数据库,得到DataSet类型的对象。根据不同组件,采用不同的数据绑定。6.1.3 数据绑定C#程序设计1.Windows窗体的DataGridView控件(1)通过代码实现绑定方法如下。设置Data
17、Source属性为包含要绑定到的DataTable对 象。也可以BindingSource对象绑定到数据表上。在窗体中添加代码来填充数据集,例如:dataset1=new DataSet();dapter.Fill(dataset1,student);dataGridView1.DataSource=dataset.Tables0;或者 dataset1=new DataSet();dapter.Fill(dataset1,student);BindingSource binds=new BindingSource();binds.DataSource=dataset1.Tables0;dat
18、aGridView1.DataSource=binds;6.1.3 数据绑定C#程序设计(2)通过设计器中将数据绑定到DataGridView的方法 设置DataSource属性为包含要绑定到的数据项的对象。如果数据集包含相关表(即,如果它包含关系对象),请将DataMember属性设置为表的名称。编写代码来填充数据集。6.1.3 数据绑定C#程序设计2.BindingNavigator的数据绑定 BindingNavigator控件是用于数据处理的导航条。(1)通过BindingNavigator控件的BindingSource属性进行数据绑定。(2)代码实现绑定,如下:dataset1=n
19、ew DataSet();dapter.Fill(dataset1,student);BindingSource binds=new BindingSource();binds.DataSource=dataset1.Tables0;dataGridView1.DataSource=binds;6.1.3 数据绑定C#程序设计3.TextBox与Label控件的数据绑定 此类控件的数据绑定的方法是把要获取的数据显示在“Text”属性中。通常使用以下两种代码编写方法实现数据绑定:(1)使用数据集中表的字段直接绑定,如下面的代码:label1.DataBindings.Add(Text,datas
20、et.Tables0,stuid);textBox1.DataBindings.Add(Text,dataset.Tables0,stuname);6.1.3 数据绑定C#程序设计(2)使用BindingSource类型的对象实现数据绑定,如 下面的代码:BindingSource bindingsource=new BindingSource();bindingsource.DataSource=dataset.Tablesstudent;label1.DataBindings.Add(Text,bindingsource,stuid);textBox1.DataBindings.Add(“
21、Text”,bindingsource,“stuname);6.1.3 数据绑定C#程序设计4.ListBox和ComboBox控件的数据绑定 这种类型的控件要绑定的属性有3个:“DataSource”(显示数据集)、“DisplayMember”(显示的数据集中的字段)、“ValueMember”(读取该控件时实际使用值)。使用ListBox实现数据绑定,常用以下两种代码编写方法实现数据绑定:6.1.3 数据绑定C#程序设计(1)使用数据集中表的字段直接绑定,如下代码:listBox1.DataSource=dataset.Tables0;listBox1.DisplayMember dat
22、aset.Tables0.Columns1.ToString();listBox1.ValueMember=dataset.Tables0.Columns0.ToString();(2)使用BindingSource对象实现数据绑定,如下代码:BindingSource bindingsource=new BindingSource();bindingsource.DataSource=dataset.Tablesstudent;listBox1.DataSource=bindingsource;listBox1.DisplayMember=dataset.Tables0.Columns1.T
23、oString();listBox1.ValueMember=dataset.Tables0.Columns1.ToString();6.1.3 数据绑定C#程序设计【例6-4】通过属性设置与代码编写两种方式实现resume数据中addressbook表信息的数据绑定。6.1.3 数据绑定C#程序设计6.2 任务1 实现公用的数据连接和处理类DBConnC#程序设计6.2 任务1 实现简历系统的公用的数据连 接和处理类DBConnC#程序设计 在简历管理系统中,需要处理数据操作,进行查询、修改、删除、增加等功能,这些功能都需要连接同一个数据库文件,并且执行时不同的查询需要相同类型的查询结果时,
24、只是传递的SQL语句不同,返回值可能是一个数据集合、也可能是一个数据项;修改、删除、增加都属于数据的更新操作,都可以通过SqlCommand类实例的ExecuteNonQuery方法实现。把这些方法加以提取,设计数据访问类,提高代码重用性,并且提高可读性。6.2.1 任务分析C#程序设计(1)在类库JianLiClass项目中添加类DBConn,定义访问控制为public,并且添加用于数据连接的字符串。(2)在类DBConn中,添加检索方法SelectReader()。(3)实现获取DataSet数据集的检索方法。(4)使用SqlCommand类实例的ExecuteNonQuery方法实现更新
25、数据库操作。6.2.2 任务实施C#程序设计6.3.1 任务分析 学生登录系统时,通过编号与密码进行登录,客户可以直接登录。那么学生登录时,要查找Users表中是否存在学生信息,即根据学生的stuid以及Password进行验证。6.3 任务2实现登录类LoginDAOC#程序设计 在简历管理系统中,需要处理数据操作,进行查询、修改、删除、增加等功能,这些功能都需要连接同一个数据库文件,并且执行时不同的查询需要相同类型的查询结果时,只是传递的SQL语句不同,返回值可能是一个数据集合、也可能是一个数据项;修改、删除、增加都属于数据的更新操作,都可以通过SqlCommand类实例的ExecuteN
26、onQuery方法实现。把这些方法加以提取,设计数据访问类,提高代码重用性,并且提高可读性。6.2.1 任务分析C#程序设计(4)在类库JianLiClass项目中添加类LoginDAO,定义访问控制为public。(2)在类LoginDAO中,添加方法public bool Login(int stuid,string psd)。(3)窗体设计如右所示。(4)编写代码,调试窗体。6.3.2 任务实施 C#程序设计 在对数据库操作过程中,多使用将sql语句赋值给SqlCommand类型的对象的CommandText属性,然后通过相关方法实现对数据库的操作。给CommandText赋值时可以使用
27、3种方法。1.使用Sql语句赋值,这是最常用的方法。2.在SQL语句中使用SqlParameter参数,通过给参数赋值完成SQL语句。3.调用存储过程。给存储过程的参数赋值。这里补充介绍以下后两种方法。6.4 相关知识 C#程序设计 对SqlCommand操作时,CommandText属性中的sql语句中可以使用参数进行描述,然后通过参数的操作实现相应的功能。参数类型为SqlParameter,调用SqlParameter构造函数声明相关的参数对象常用的格式如下:SqlParameter 对象名=new SqlParameter(相关联的参数名,参数的类型,长度);对象名.Value=参数值;/实现对参数赋值 SqlCommand实例对象.Parameters.Add(对象名);/将参数添加到SqlCommand实例的参数列表中6.4.1 在SQL语句中使用参数 C#程序设计 在数据库程序的操作中,往往会多次调用相同的sql命令行,数据库提供了存储过程解决这个问题,使用存储过程实现sql语句。6.4.2 调用存储过程