CSharp数据库编程.ppt

上传人:牧羊曲112 文档编号:6503473 上传时间:2023-11-07 格式:PPT 页数:58 大小:276.99KB
返回 下载 相关 举报
CSharp数据库编程.ppt_第1页
第1页 / 共58页
CSharp数据库编程.ppt_第2页
第2页 / 共58页
CSharp数据库编程.ppt_第3页
第3页 / 共58页
CSharp数据库编程.ppt_第4页
第4页 / 共58页
CSharp数据库编程.ppt_第5页
第5页 / 共58页
点击查看更多>>
资源描述

《CSharp数据库编程.ppt》由会员分享,可在线阅读,更多相关《CSharp数据库编程.ppt(58页珍藏版)》请在三一办公上搜索。

1、C#数据库编程,11.1 数据库编程基础,11.1.1 ADO.NET简介11.1.2 第一个简单例子11.1.3 访问数据库的一般步骤,11.1.1 ADO.NET简介,ADO(Active Data Objects)是Microsoft开发的面向对象的数据访问库,ADO.NET是ADO的后续技术,提供对SQL SEVER等数据源的一致访问。数据使用者可以通过ADO.NET来连接到这些数据源(SQL SERVERACCESSOLE DB等),并检索、操作和更新数据。,ADO.NET DataSet是ADO.NET结构的核心组建,DataSet中包括一个或多个DataTable对象的集合,这些

2、对象由数据行和数据列以及主键、外键、约束和有关DataTable对象中数据的关系信息组成。ADO.NET的另外一个核心元素是.NET Framawork数据提供程序,能够实现数据操作和对数据的快速访问。其中,Connection对象提供与数据源的连接;Command对象使你能够访问用于返回数据、修改数据、运行存储过程以及发送或检索参数信息的数据库命令;DataReader对象从数据源中提供高性能的数据流;DataAdapter对象提供连接DataSet对象和数据源的桥梁。,目前,.NET Framawork附带了两个数据提供程序:SQL Server 和OLE DB数据提供程序。OLE DB数

3、据提供程序位于空间,SQL Server 数据提供程序位于命名空间。以下是每个数据提供程序所包含的主要类:,11.1.2 第一个简单例子,现在编写一个名为GetStudent的访问SQL SERVER数据库的控制台应用程序,对学生信息表中的信息进行读取(假设学生信息表已经建立)。,using System;using System.Collections.Generic;using System.Data;using System.Data.SqlClient;,namespace GetStudent class Program static void Main()string connSt

4、r=“server=(local);Initial Catalog=students;user Id=sa;password=1234”;SqlConnection conn=new SqlConnection(connStr);conn.Open();SqlCommand cmd=conn.CreateCommand();cmd.CommandText=“Select ID,sName from student”;SqlDataReader reader=cmd.ExecuteReader();,string output;while(reader.Read()output=string.F

5、ormat(“学生 0t的学号是1”,reader.GetString(1),reader.GetString(0);Console.Writeline(output);reader.Close();conn.Close();,实例代码讲解,(1)导入数据访问的名称空间,表示在该程序中将使用SQL Server 数据提供程序。using System;using System.Collections.Generic;using System.Data;using System.Data.SqlClient;,(2)在Main主方法中,首先定义了一个字符串类型的connStr变量,用来存放连接S

6、QL SERVER的数据库连接字符串。接着新建了一个SqlConnection对象,用于连接数据库。string connStr=“server=(local);Initial Catalog=students;user Id=sa;password=1234”;SqlConnection conn=new SqlConnection(connStr);(3)调用conn对象的Open方法打开数据库连接。conn.Open();,(4)新建SqlCommand对象,该对象用于向数据库发出命令。通过调用数据库连接对象conn的CreateCommand方法来建立SqlCommand对象。SqlC

7、ommand cmd=conn.CreateCommand();(5)有了命令对象cmd后,指定该命令对象的属性CommandText。cmd.CommandText=“Select ID,sName from student”;(6)命令对象cmd设置完毕,可以向数据库发出命令,执行在CommandText中定义的操作。cmd对象的执行结果保存在SqlDataReader对象reader中。SqlDataReader reader=cmd.ExecuteReader();,(7)在reader中已经保存了从数据库读取的信息,现在的任务是输出它们。从数据读取器中获取数据一般用while循环,R

8、ead()方法一直返回真值,直到reader的指针指向最后一条记录的后面。while(reader.Read()output=string.Format(“学生 0t的学号是1”,reader.GetString(1),reader.GetString(0);Console.Writeline(output);(8)数据读取以后,应该关闭数据读取器和数据库连接对象。reader.Close();conn.Close();,11.1.3 访问数据库的一般步骤,从前面例子的分析中,得出通过ADO.NET访问数据库的一般步骤如下:(1)建立数据库连接对象(Connection对象);(2)打开数据库

9、连接(Connection对象的Open方法);(3)建立数据库命令对象,指定命令对象所使用的连接对象(Command);(4)指定命令对象的命令属性(CommandText属性);(5)执行命令(Command的方法,如ExecuteReader);(6)操作返回结果(对SqlReaderData对象进行读取);(7)关闭数据库连接。,11.2.4 数据连接,在数据访问中必须建立到数据库的物理连接。每个数据提供程序都包含自己特有的Connection对象。当使用OLE DB数据提供程序时,要使用空间的OleDbConnection对象,使用SQL Server 数据提供程序时,要使用位于命名

10、空间的SqlConnection对象。在程序开始导入名称空间和。,11.2.4.1 连接SQL SERVER数据源,1、SqlConnection类SqlConnection类有两个构造函数,一个不带参数,一个接受连接字符串。可以使用以下两种方法进行实例化连接。string connStr=“server=(local);Initial Catalog=students;user Id=sa;password=1234”;SqlConnection conn=new SqlConnection(connStr);conn.Open();或者SqlConnection conn=new SqlC

11、onnection(“server=(local);Initial Catalog=students;user Id=sa;password=1234”;);conn.Open();,注意:只有当一个连接关闭后才能把两外一个不同的连接字符串赋值给Connection对象。如果不知道该对象是打开的还是关闭的,可以检查对性的State属性,它的值可以是Open,也可以是Closed。,2、连接字符串ConnectionString连接字符串包含由一些“属性名=值”对组成的集合,每个“属性名=值”对都由分号隔开。string connStr=“server=(local);Initial Catal

12、og=students;user Id=sa;password=1234”;其中,server为服务器地址,值local表示使用本地机器。server关键字也可以用Data Source来代替,即字符串可以写成string connStr=“Data Source=(local);Initial Catalog=students;user Id=sa;password=1234”;,Initial Catalog指明了连接使用的数据库,user ID和password则分别指明了访问数据库时使用的用户名和密码。如果在安装数据库软件时选择的身份验证方式为windows身份验证模式,则应使用如下连

13、接字符串:string connStr=“Data Source=(local);Initial Catalog=students;Integrated Security=SSPI”;Integrated Security=SSPI表示连接时使用的是windows身份验证模式。,3、SqlConnection的方法SqlConnection由自己的方法,如前面使用过的Open()和Closed()方法。其他方法还有:CreateCommand 创建并返回一个与SqlConnection关联的SqlCommand对象。ChangeDatabase 为打开的SqlConnection更改当前数据库

14、。注意:数据库连接必须小心,应该在最晚的时候建立连接,在最早的时候关闭连接,以释放占用的内存和网络带宽资源。,4、连接SQL SERVER的数据访问实例(1)启动visual ,新建一个windows 应用程序。(2)从工具栏中拖动一个Button控件到页面中,将ID设为btnconnect,Text属性为“点击连接数据库”。(3)在Form1.cs文件中添加名称空间using System.Data.SqlClient;(4)双击btnConnect控件,在Click事件相关处理程序btnconnect_click中输入以下代码:,try SqlConnection conn=new Sql

15、Connection();conn.ConnectionString=“Data Source=(local);user id=sa;password=1234;initial Catalog=student;”;conn.Open();if(conn.State=ConnectionState.Open)MessageBox.Show(“连接已经打开”);conn.Close();if(conn.State=ConnectionState.Closed)MessageBox.Show(“连接已经关闭”);catch(Exception e)MessageBox.Show(“连接失败,原因可能

16、是“+e.Message);,5、按ctrl+f5运行项目,单击表单中的”点击连接数据库“按钮,如果数据库连接成功,则将依次弹出两个对话框。6、如果连接不成功,则会得到提示错误信息的页面。,11.2.4.2 连接OLE DB数据源,1、说明目前在网络流行的小型数据库access,就应该使用OLE DB.NET 数据提供程序来访问数据,该程序在空间中定义。使用OLE DB.NET 数据提供程序与使用SQL SERVER.NET数据提供程序的方式十分类似,需要注意的是连接字符串有所不同,连接到access数据库的字符串格式如下:Provider=Microsoft.Jet.OLEDB.4.0;Da

17、ta Source=mydb.mdb;user id=;password=;前面两项为必须项,如果数据库没有密码,后面两者都可以省略,在实际项目中,Data Source还必须转化为绝对路径。,2、access连接实例,(1)启动visual ,新建一个windows应用程序。(2)在表单Form1中添加按钮btnconnection,属性设置同前面例子。(3)在在Form1.cs文件中添加名称空间using System.Data.OleDb;(4)双击btnConnect控件,在Click事件相关处理程序btnconnect_click中输入以下代码:(5)运行程序。,tryOleDbCo

18、nnection conn=new OleDbConnection();string connStr=Provider=Microsoft.Jet.OLEDB.4.0;Data Source=;connStr+=Datadb.mdb;MessageBox.Show(当前连接字符串为:n+connStr+n);conn.ConnectionString=connStr;conn.Open();if(conn.State=ConnectionState.Open)MessageBox.Show(连接成功);conn.Close();if(conn.State=ConnectionState.Clo

19、sed)MessageBox.Show(关闭成功);catch(Exception ex)MessageBox.Show(连接失败,原因是:n+ex.Message);,11.2.5 数据命令,建立数据连接之后,就可以执行数据访问操作和数据操纵操作了,一般对数据库的操作被概括为CRUD-Create Read Update和Delete。ADO.NET中定义Command类去执行这些操作。在.NET中存在SqlCommand和OleDbCommand两种类,两者类似。,数据命令通常包括的内容有:一个连接(Connection):命令对象所使用的连接对象;使用它与数据库通信。命令的名称或文本(C

20、ommandText):设置要对数据源执行的SQL语句或存储过程。命令类型(CommandType):指明命令的类型,是存储过程还是普通SQL文本;参数(Patameters):参数集合,可以分别设置或者读取这些参数。,其中,CommandText的内容和CommandType有关,当类型为StoreProcedure时,CommandText属性为存储过程的名称,当类型为TableDirect时,CommandText属性为要访问的表的名称,当类型为Text时,则CommandText属性为SQL语句。默认为Text。,1、SqlCommand对象的创建方法一:SqlCommand cmd=

21、new SqlCommand();/创建命令对象cmd.Connection=ConnectionObject;/将已有连接赋给命令对象cmd.CommandText=CommandText;/将已有命名文本赋给命令对象CommandText可以是从数据库检索数据的SQL Select语句:string CommandText=“select*from student”;也可以是一个存储过程的名称:string CommandText=“GetAllStudent”;cmd.CommandType=CommandType.StoreProcedure;,方法二:将命令文本放入构造函数作为参数:

22、SqlCommand cmd=new SqlCommand(CommandText);cmd.Connection=ConnectionObject;方法三:直接将命名文本和连接对象放入构造函数SqlCommand cmd=new SqlCommand(CommandText,ConnectionObject);方法四:可以直接使用Connection对象的CreateCommand方法SqlCommand cmd=conn.CreateCommand();cmd.CommandText=“Select ID,sName from student”;,2、SqlCommand对象的方法SqlC

23、ommand对象提供了四个方法:ExecuteNonQuery:执行不返回结果的命令,通常使用这个命令执行插入、更新或者删除操作;ExecuteScalar:执行返回单个值的命令;ExecuteReader:执行命令,将结果集填充DataReader对象;ExecuteXmlReader:SqlCommand对象特有的方法,该方法执行将返回XML字符串的命令,返回一个包含所返回的XML的对象。,1)ExecuteScalar方法执行返回单个值的命令,例如,想获取数据库中学生的总人数,可以使用这个方法执行SQL查询:Select count(*)from student。ExecuteScala

24、r方法使用举例:(1)新建windows应用程序,在表单中加入按钮控件btnGetCount,以及label 控件lblResult。(2)双击btnGetCount控件,输入以下代码:(3)对代码中绿色部分进行修改,即可以完成对OLE DB数据库的操作。,string commandText=“select count(*)from student”;string connString=“Date Source=(local);Initial Catalog=students;user id=sa;password=1234”;SqlConnection conn=new SqlConnec

25、tion();conn.ConnectionString=connString;SqlCommand cmd=new SqlCommand(commandText,conn);conn.Open();string count=cmd.ExecuteScalar().ToString();conn.Close();this.lblResult.Text=“共有”+count+”学生!”;,2)ExecuteNonQuery方法主要用来更新数据,通常使用它来执行Update、Insert、Delete语句。该方法返回值意义如下:对于Update、Insert、Delete语句返回值为该命令所影响的

26、行数,对于其它类型的语句,返回值为-1。ExecuteNonQuery方法使用举例:string updateQuery=“UPdate student Set sName=小李”+”Where ID=200131500145”;SqlConnection conn=new SqlConnection();conn.ConnectionString=connectionString;SqlCommand cmd=new SqlCommand(updateQuery,conn);conn.Open();int RecordsAffected=cmd.ExecuteNonQuery();conn.

27、Close();,Update、Insert、Delete语句中参数构造方式在updateQuery中的更新参数应该根据用户实际输入的信息进行处理,要达到这个目的就必须根据用户输入的数据来构造命令,构造命令有多种形式。(1)字符串拼接方式假设已经将用户输入的数据保存到了变量中:string userName=“小李“;string user id=“200131500145”;则命令可以构造如下:string updateQuery=“Update student Set sName=”+userName+”+”Where ID=“+user id+”“;,Update、Insert、Dele

28、te语句中参数构造方式(2)参数化方式 在SQL SERVER.NET中指定参数当命令文本在指定具体命令时,必须指出哪部分是参数,可变参数要加前缀。Update student Set sName=userName where ID=user idstring updateQuery=“Update student Set sName=userName”+”Where ID=user id”;SqlConnection conn=new SqlConnection(connectionString);SqlCommand cmd=new SqlCommand(updateQuery,conn)

29、;,有了包含参数的Command对象,需要为命令中的每一个参数创建一个Parameter对象。SqlCommand类提供了一个Parameters集合属性,用以为命令保存所有的参数。通过调用该集合的Add方法,在集合中添加一个新的参数。cmd.Parameters.Add(“userName”,userName);cmd.Parameters.Add(“user id”,user id);Add方法中第一个参数为命令中的参数名,后面第二个参数则是用于定义的变量,保存了用户输入的信息。带参数的命令设置好后可以和往常一样执行ExecuteNonQuery方法。,在OLE DB.NET中指定参数 O

30、LE DB.NET并不支持指定参数的方法,但是可以在查询中使用?来作为占位符来指定参数将出现的位置。Update student Set sName=?Where ID=?由于只是使用了占位符,在添加Parameter对象时必须按照参数出现的顺序添加,如:OleDbCommand cmd=new OleDbCommand(updateQuery,conn);cmd.Parameters.Add(“sName”,userName);cmd.Parameters.Add(“ID”,user id);此时userName将会赋值给第一个参数,user id将会赋值给第二个参数,两句代码如果调换前后顺

31、序,则user id的值赋值给第一个参数,userName的值赋值给第二个参数,即Add方法的第一个参数没有意义。,更新记录举例,新建WINDOWS应用程序,将表单设计如下:,表单中各个对象为label1,label2,textbox1,textbox2,button1,button2。,在Form1.cs中导入名称空间System.Data.SqlClient,然后添加一个CheckInfo方法,对输入的数据进行检查。bool CheckInfo()if(this.textbox1.Text.Trim()=“”)MessageBox.Show(“学号不完整“);return false;el

32、se if(this.textbox2.Text.Trim()=“”)MessageBox.Show(“姓名不完整”);return false;return true;,双击button1,输入以下代码:if(this.CheckInfo()string userName=this.textbox2.Text.Trim();string user id=this.textbox1.Text.Trim();SqlConnection conn=new SqlConnection();conn.ConnectionString=“Data Source=(local);Initial Catal

33、og=student;user id=sa;password=1234”;string updateQuery=“update student Set sName=”+userName+”“+”Where ID=”+user id+”;SqlCommand cmd=new SqlCommand(updateQuery,conn);,conn.Open();int RecordsAffected=com.ExecuteNonQuery();conn.Close();,双击button2,输入以下代码:if(this.CheckInfo()string userName=this.textbox2

34、.Text.Trim();string user id=this.textbox1.Text.Trim();SqlConnection conn=new SqlConnection();conn.ConnectionString=“Data Source=(local);Initial Catalog=student;user id=sa;password=1234”;string updateQuery=“update student Set sName=userName Where ID=user id”;SqlCommand cmd=new SqlCommand(updateQuery,

35、conn);,cmd.Parameters.Add(new SqlParameter(“userName”,userName)cmd.Parameters.Add(new SqlParameter(“user id”,user id);conn.Open();int RecordsAffected=com.ExecuteNonQuery();conn.Close();,添加记录示例代码:,string insertQuery=“Insert into student(ID,sName,sGrade,sSex,sEmail,sPhone,sAddress)”+“Values(2000131500

36、145,小张,男,,”+”,宏博公寓)”;SqlConnection conn=new SqlConnection(connectionString);SqlCommand cmd=new SqlCommand(insertQuery,conn);conn.Open();int RecordsAffected=cmd.ExecuteNonQuery();conn.Close();,删除记录示例代码:,string deleteQuery=“Delete from student where ID=200131500145”;SqlConnection conn=new SqlConnectio

37、n(connectionString);SqlCommand cmd=new SqlCommand(deleteQuery,conn);conn.Open();int RecordsAffected=cmd.ExecuteNonQuery();conn.Close();,11.2.6 数据阅读器,当执行返回结果集的命令时,需要一个方法从结果集中提取数据。处理结果集的方法有两个:第一,使用数据阅读器;第二,同时使用数据适配器(Data Adapter)和数据集DataSet。数据阅读器DataReader类最常见的用法是检索SQL查询或存储过程返回记录,它是一个连接的、只向前的和只读的结果集。也

38、就是说,当使用数据阅读器时,必须保持连接处于打开状态,而且只能从头到尾遍历记录集,不能在某条记录处停下来向回移动,记录是只读的,数据阅读器不提供任何修改数据库记录的方法。,1.创建DataReader对象,DataReader类没有提供公有的构造函数,通常调用Command类的ExecuteReader方法来返回一个DataReader对象。SqlCommand cmd=new SqlCommand(CommandText,ConnectionObject);SqlDataReader reader=cmd.ExecuteReader();当数据阅读器打开时,不能使用对应的连接对象执行其他任何

39、任务;当阅读完数据阅读器的记录或不再需要数据阅读器时,应该立即关闭数据阅读器。reader.Close();,ExecuteReader方法执行可以带上在System.Data空间中定义的CommandBehavior枚举类型的参数,执行一些想要怎样使用结果的指令。如下面的代码表示当关闭数据阅读器时数据连接也同时被关闭,无需再次关闭数据连接。SqlDataReader reader=cmd.ExecuteReader(CommandBehavior.CloseConnection);,2.遍历DataReader对象中的记录,当ExecuteReader方法返回DataReader对象时,当前

40、光标的位置在第一条记录的前面,必须调用阅读器的Read方法把光标移动到第一条记录,然后,第一条记录变成当前记录。如果数据阅读器包含的记录不止一条,Read方法就返回一个Boolean值true。想要移动到下一条记录,需要再次调用Read方法。重复该过程指导最后一条记录,这时Read方法将返回false。经常使用while循环来遍历记录:while(reader.read()读取数据 只要Read方法返回的值为true,就可以访问当前记录中包含的字段。,3.访问字段中的值,有两种方法可以访问记录中的字段,第一种是Item属性,此属性返回由字段索引或字段名指定的字段值;第二种是Get方法,此方法返

41、回由字段索引指定的字段的值。(1)Item属性Item属性是Data Reader类的索引,总是基于0开始编号的。可以把包含字段名的字符串传入Item属性,也可以把指定字段索引的32位整数传递给Item属性。,如:当执行完SQL(select ID,sName from student)查询后 使用以下任意方法都可以得到两个被返回字段的值。object ID=reader“ID”;object sName=reader“sName”;或者object ID=reader0;object sName=reader1;注意:在使用数据时,需要自己负责类型转换:int ID=(int)reader0

42、;如果转换错误将抛出异常。,(2)Get方法每一个DataReader类都定义了一组Get方法,这些方法将返回适当类型的值。在上面的例子中,还可以使用以下代码来访问字段的值:int ID=reader.GetInt32(0);string sName=reader.GetString(1);,DataReader 实例()新建项目(WINDOWS应用程序)。()双击,进入事件。()在中添加命名空间。()在事件中添加代码:,string message=“;OleDbConnection conn=new OleDbConnection();conn.ConnectionString=Provi

43、der=Microsoft.Jet.OLEDB.4.0;Data Source=“+Datastudent.mdb;string selectQuery=“select ID,sName,sGrade,sSex from student”;OleDbCommand cmd=new OleDbCommand(selectQuery,conn);conn.Open();OleDbDataReader reader=com.ExecuteReader(CommandBehavior.CloseConnection);while(reader.read()message+=“学号:”+reader0.

44、ToString()+”“;message+=“姓名:”+reader“sName”.ToString()+”“;message+=“班级:”+reader.GetString(2)+”“;message+=“性别:“+reader.GetString(3)+”“;message+=“n”;reader.Close();if(conn.State=ConnectionState.Closed)message+=“数据连接已经关闭”;MessageBox.Show(message);,11.2.7 数据集,数据集DataSet是非连接的、位于内存中的高速数据缓存区。DataSet主要依靠Data

45、Adapter类来与数据库通信。可以把DataSet看成是内存中的数据库,一般使用DataAdapter类的Fill方法来填充DataSet。调用DataAdapter类的Fill方法时,该方法将隐式调用数据连接的Open()方法,填充完毕将自动关闭数据连接。如果在调用该方法之前已经显式调用了conn的Open方法,则在Fill方法调用以后不会自动调用conn的Close方法来关闭数据连接。,以下代码将实现与DataReader中同样的功能:string message=“;OleDbConnection conn=new OleDbConnection();conn.ConnectionSt

46、ring=Provider=Microsoft.Jet.OLEDB.4.0;Data Source=“+Datastudent.mdb;string selectQuery=“select ID,sName,sGrade,sSex from student”;OleDbCommand cmd=new OleDbCommand(selectQuery,conn);OleDbDataAdapter da=new OleDbDataAdapter();da.SelectCommand=cmd;DataSet result=new DataSet();da.Fill(result,”student”);for(int i=0;iresult.Tables“student”.Rows.Count;i+)message+=“学号:”+result.Tables0.Rowsi“ID”+”“;,message+=“姓名:”+result.Tables0.Rowsi“sName”+”“;message+=“姓名:”+result.Tables0.Rowsi“sGrade”+”“;message+=“姓名:”+result.Tables0.Rowsi“sSex”+”“;message+=“n”;MessageBox.Show(message);berry博客:,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号