




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 ADO(Active Data Objects)是Microsoft开发的 面向对象的数据访问库,ADO.NET是ADO的后续 技术,提供对SQL SEVER等数据源的一致访问。 数据使用者可以通过ADO.NET来连接到这些数据 源(SQL SERVERACCESSOLE DB等),并检 索、操作和更新数据。 ADO.NET DataSet是ADO.NET结构的核心组建, DataSet中包括一个或多个DataTable对象的集合,这 些对象由数据行和数据列以及主键、外键、约束和 有关DataTable对象中数据的关系信息组成。 ADO.NET的另外一个核心元素是.NET Framawork
2、数据提供程序,能够实现数据操作和对数 据的快速访问。其中,Connection对象提供与数据源 的连接;Command对象使你能够访问用于返回数据、 修改数据、运行存储过程以及发送或检索参数信息 的数据库命令;DataReader对象从数据源中提供高性 能的数据流;DataAdapter对象提供连接DataSet对象 和数据源的桥梁。 目前,.NET Framawork附带了两个数据提供程序: SQL Server 和OLE DB数据提供程序。 OLE DB数据 提供程序位于System.Data.OleDb空间, SQL Server 数据提供程序位于System.Data.SqlClien
3、t命名空间。以 下是每个数据提供程序所包含的主要类: OLE DB提供程序SQL Server 提供程序 现在编写一个名为GetStudent的访问SQL SERVER 数据库的控制台应用程序,对学生信息表中的信息 进行读取(假设学生信息表已经建立)。 using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; namespace GetStudent class Program static void Main( ) string connStr=“server
4、=(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=strin
5、g .Format(“学生 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变
6、量,用来存放连接SQL 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方法来
7、建立SqlCommand对象。 SqlCommand 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中已经保存了从数据库读取的信息, 现在的任
8、务是输出它们。从数据读取器中获取数据 一般用while循环,Read()方法一直返回真值,直 到reader的指针指向最后一条记录的后面。 while(reader.Read( ) output=string .Format(“学生 0t的学号是 1”,reader.GetString(1),reader.GetString(0); Console.Writeline(output); (8) 数据读取以后,应该关闭数据读取器和数据库 连接对象。 reader.Close( ); conn.Close( ); 从前面例子的分析中,得出通过ADO.NET访问数据库 的一般步骤如下: (1)建立数
9、据库连接对象(Connection对象); (2)打开数据库连接(Connection对象的Open方法); (3)建立数据库命令对象,指定命令对象所使用的连接 对象(Command); (4)指定命令对象的命令属性(CommandText属性); (5)执行命令(Command的方法,如ExecuteReader); (6)操作返回结果(对SqlReaderData对象进行读取); (7)关闭数据库连接。 在数据访问中必须建立到数据库的物理连接。 每个数据提供程序都包含自己特有的Connection 对象。当使用OLE DB数据提供程序时,要使用 System.Data.OleDb空间的Ol
10、eDbConnection对象, 使用SQL Server 数据提供程序时,要使用位于 System.Data.SqlClient命名空间的SqlConnection对 象。 在程序开始导入名称空间System.Data.SqlClient和 System.Data.OleDb。 1、SqlConnection类 SqlConnection类有两个构造函数,一个不带参数,一 个接受连接字符串。可以使用以下两种方法进行实例 化连接。 string connStr=“server=(local); Initial Catalog=students;user Id=sa;password=1234”
11、; SqlConnection conn=new SqlConnection(connStr); conn.Open( ); 或者 SqlConnection conn=new SqlConnection(“server=(local); Initial Catalog=students;user Id=sa;password=1234”;); conn.Open( ); 注意:只有当一个连接关闭后才能把两外一个不 同的连接字符串赋值给Connection对象。 如果不知道 该对象是打开的还是关闭的,可以检查对性的State属 性,它的值可以是Open,也可以是Closed。 2、连接字符串C
12、onnectionString 连接字符串包含由一些“属性名=值”对组成的集合, 每个“属性名=值”对都由分号隔开。 string connStr=“server=(local); Initial Catalog=students;user Id=sa;password=1234”; 其中,server为服务器地址,值local表示使用本地机器。 server关键字也可以用Data Source来代替,即字符串可 以写成 string connStr=“Data Source=(local); Initial Catalog=students;user Id=sa;password=1234”
13、; Initial Catalog指明了连接使用的数据库,user ID和password则分别指明了访问数据库时使用的 用户名和密码。 如果在安装数据库软件时选择的身份验证方式 为windows身份验证模式,则应使用如下连接字符 串: string connStr=“Data Source=(local); Initial Catalog=students; Integrated Security=SSPI”; Integrated Security=SSPI表示连接时使用的是 windows身份验证模式。 3、SqlConnection的方法 SqlConnection由自己的方法,如前面
14、使用过的Open( ) 和Closed( )方法。 其他方法还有: CreateCommand 创建并返回一个与SqlConnection关 联的SqlCommand对象。 ChangeDatabase 为打开的SqlConnection更改当前数 据库。 注意:数据库连接必须小心,应该在最晚的时候建立 连接,在最早的时候关闭连接,以释放占用的内存和 网络带宽资源。 4、连接SQL SERVER的数据访问实例 (1)启动visual studio .net,新建一个windows 应用程 序。 (2)从工具栏中拖动一个Button控件到页面中,将 ID设为btnconnect,Text属性为“
15、点击连接数据库”。 (3)在Form1.cs文件中添加名称空间 using System.Data.SqlClient; (4)双击btnConnect控件,在Click事件相关处理程序 btnconnect_click中输入以下代码: try SqlConnection conn=new SqlConnection( ); conn.ConnectionString=“Data Source=(local);user id=sa;password=1234; initial Catalog=student;”; conn.Open( ); if(conn.State=ConnectionSt
16、ate.Open) MessageBox.Show(“连接已经打开”); conn.Close( ); if(conn.State=ConnectionState.Closed) MessageBox.Show(“连接已经关闭”); catch(Exception e) MessageBox.Show(“连接失败,原因可能是 “+e.Message); 5、按ctrl+f5运行项目,单击表单中的”点击连接数 据库“按钮,如果数据库连接成功,则将依次弹出两 个对话框。 6、如果连接不成功,则会得到提示错误信息的页面。 1、说明 目前在网络流行的小型数据库access,就应该使用OLE DB .N
17、ET 数据提供程序来访问数据,该程序在 System.Data.OleDb空间中定义。 使用OLE DB .NET 数据提供程序与使用SQL SERVER.NET数据提供程序的方式十分类似,需要注 意的是连接字符串有所不同,连接到access数据库的字 符串格式如下:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=mydb.mdb;user id=;password=; 前面两项为必须项,如果数据库没有密码,后面两者 都可以省略,在实际项目中,Data Source还必须转化为 绝对路径。 (1)启动visual studio .net,新建一个win
18、dows应用程序。 (2)在表单Form1中添加按钮btnconnection,属性设置 同前面例子。 (3)在在Form1.cs文件中添加名称空间 using System.Data.OleDb; (4)双击btnConnect控件,在Click事件相关处理程序 btnconnect_click中输入以下代码: (5)运行程序。 try OleDbConnection conn=new OleDbConnection( ); string connStr=Provider=Microsoft.Jet.OLEDB.4.0;Data Source=; connStr+=Datadb.mdb; M
19、essageBox.Show(当前连接字符串为:n+connStr+n); conn.ConnectionString=connStr; conn.Open( ); if(conn.State=ConnectionState.Open) MessageBox.Show(连接成功); conn.Close() ; if(conn.State=ConnectionState.Closed) MessageBox.Show(关闭成功); catch( Exception ex) MessageBox.Show(连接失败,原因是:n+ex.Message); 建立数据连接之后,就可以执行数据访问操 作
20、和数据操纵操作了,一般对数据库的操作被概 括为CRUD-Create Read Update和Delete。 ADO.NET中定义Command类去执行这些操作。 在.NET中存在SqlCommand和OleDbCommand两 种类,两者类似。 数据命令通常包括的内容有: 一个连接(Connection):命令对象所使用的连接对象; 使用它与数据库通信。 命令的名称或文本(CommandText):设置要对数据 源执行的SQL语句或存储过程。 命令类型(CommandType):指明命令的类型,是存 储过程还是普通SQL文本; 参数(Patameters):参数集合,可以分别设置或者读 取这
21、些参数。 其中,CommandText的内容和CommandType有关, 当类型为StoreProcedure时, CommandText属性为存储 过程的名称,当类型为TableDirect时, CommandText 属性为要访问的表的名称,当类型为Text时,则 CommandText属性为SQL语句。默认为Text。 1、 SqlCommand对象的创建 方法一: SqlCommand cmd=new SqlCommand( ); /创建命令对象 cmd.Connection=ConnectionObject;/将已有连接赋给命 令对象 cmd.CommandText=Command
22、Text;/将已有命名文本赋 给命令对象 CommandText可以是从数据库检索数据的SQL Select语 句: string CommandText=“select * from student”; 也可以是一个存储过程的名称: string CommandText=“GetAllStudent”; cmd.CommandType=CommandType.StoreProcedure; 方法二: 将命令文本放入构造函数作为参数: SqlCommand cmd=new SqlCommand(CommandText); cmd.Connection=ConnectionObject; 方法三
23、:直接将命名文本和连接对象放入构造函数 SqlCommand cmd=new SqlCommand(CommandText,ConnectionObject); 方法四:可以直接使用Connection对象的 CreateCommand方法 SqlCommand cmd=conn.CreateCommand( ); cmd.CommandText=“Select ID,sName from student”; 2、 SqlCommand对象的方法 SqlCommand对象提供了四个方法: ExecuteNonQuery:执行不返回结果的命令,通常使用这 个命令执行插入、更新或者删除操作; Ex
24、ecuteScalar:执行返回单个值的命令; ExecuteReader:执行命令,将结果集填充DataReader对象; ExecuteXmlReader: SqlCommand对象特有的方法,该方 法执行将返回XML字符串的命令,返回一个包含所返 回的XML的System.Xml.XmlReader对象。 1)ExecuteScalar方法执行返回单个值的命令,例如,想 获取数据库中学生的总人数,可以使用这个方法执行 SQL查询:Select count(*) from student。 ExecuteScalar方法使用举例: (1)新建windows应用程序,在表单中加入按钮控件 b
25、tnGetCount,以及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 SqlConnection( ); conn.ConnectionString
26、=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语句返回值为该命令所影响的 行数,对于其它类型的语句,返回值
27、为-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.Clos
28、e( ); UpdateUpdate、InsertInsert、DeleteDelete语句中参数构造方式语句中参数构造方式 在updateQuery中的更新参数应该根据用户实际输入的信息 进行处理,要达到这个目的就必须根据用户输入的数据来 构造命令,构造命令有多种形式。 (1)字符串拼接方式 假设已经将用户输入的数据保存到了变量中: string userName=“小李“; string user id=“200131500145”; 则命令可以构造如下: string updateQuery=“Update student Set sName= ”+userName+” ”+”Where
29、 ID= “+user id+” “; UpdateUpdate、InsertInsert、DeleteDelete语句中参数构造方式语句中参数构造方式 (2)参数化方式 l 在SQL SERVER .NET中指定参数 当命令文本在指定具体命令时,必须指出哪部分是参数, 可变参数要加前缀。 Update student Set sName=userName where ID=user id string updateQuery=“Update student Set sName=userName”+”Where ID=user id”; SqlConnection conn=new SqlCo
30、nnection(connectionString); SqlCommand cmd=new SqlCommand(updateQuery,conn); 有了包含参数的Command对象,需要为命令中的每一 个参数创建一个Parameter对象。SqlCommand类提供了一 个Parameters集合属性,用以为命令保存所有的参数。通 过调用该集合的Add方法,在集合中添加一个新的参数。 cmd.Parameters.Add(“userName”,userName); cmd.Parameters.Add(“user id”,user id); Add方法中第一个参数为命令中的参数名,后面第
31、二个 参数则是用于定义的变量,保存了用户输入的信息。 带参数的命令设置好后可以和往常一样执行 ExecuteNonQuery方法。 l在OLE DB .NET中指定参数 OLE DB .NET并不支持指定参数的方法,但是可以在 查询中使用?来作为占位符来指定参数将出现的位置。 Update student Set sName=? Where ID=? 由于只是使用了占位符,在添加Parameter对象时必须 按照参数出现的顺序添加,如: OleDbCommand cmd=new OleDbCommand(updateQuery,conn); cmd.Parameters.Add(“sName”
32、,userName); cmd.Parameters.Add(“ID”,user id); 此时userName将会赋值给第一个参数,user id将会赋值 给第二个参数,两句代码如果调换前后顺序,则user id的 值赋值给第一个参数,userName的值赋值给第二个参数, 即Add方法的第一个参数没有意义。 新建WINDOWS应用程序,将表单设计如下: 表单中各个对象为 label1,label2,textbox1,textbox2,button1,button2。 在Form1.cs中导入名称空间System.Data.SqlClient,然后 添加一个CheckInfo方法,对输入的数
33、据进行检查。 bool CheckInfo( ) if(this.textbox1.Text.Trim( )=“”) MessageBox.Show(“学号不完整“); return false; else 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.textbo
34、x1.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,conn); conn.Open( );
35、int RecordsAffected=com.ExecuteNonQuery( ); conn.Close( ); 双击button2,输入以下代码: 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 Catalog=student;user id
36、=sa;password=1234”; string updateQuery=“update student Set sName=userName Where ID=user id ”; SqlCommand cmd=new SqlCommand(updateQuery,conn); cmd.Parameters.Add(new SqlParameter(“userName”,userName) cmd.Parameters.Add(new SqlParameter(“user id”,user id); conn.Open( ); int RecordsAffected=com.Execut
37、eNonQuery( ); conn.Close( ); 示例代码: string insertQuery=“Insert into student (ID,sName,sGrade,sSex,sEmail,sPhone,sAddress)”+ “Values(2000131500145,小张,男 ,,” +宏博公寓)”; SqlConnection conn=new SqlConnection(connectionString); SqlCommand cmd=new SqlCommand(insertQuery,conn); conn.Open( ); int
38、RecordsAffected=cmd.ExecuteNonQuery( ); conn.Close( ); 示例代码: string deleteQuery=“Delete from student where ID=200131500145”; SqlConnection conn=new SqlConnection(connectionString); SqlCommand cmd=new SqlCommand(deleteQuery,conn); conn.Open( ); int RecordsAffected=cmd.ExecuteNonQuery( ); conn.Close(
39、); 当执行返回结果集的命令时,需要一个方法 从结果集中提取数据。处理结果集的方法有两个: 第一,使用数据阅读器;第二,同时使用数据适 配器(Data Adapter)和数据集DataSet。 数据阅读器DataReader类最常见的用法是检索 SQL查询或存储过程返回记录,它是一个连接的、 只向前的和只读的结果集。也就是说,当使用数 据阅读器时,必须保持连接处于打开状态,而且 只能从头到尾遍历记录集,不能在某条记录处停 下来向回移动,记录是只读的,数据阅读器不提 供任何修改数据库记录的方法。 DataReader类没有提供公有的构造函数,通常调用 Command类的ExecuteReader
40、方法来返回一个 DataReader对象。 SqlCommand cmd=new SqlCommand(CommandText,ConnectionObject); SqlDataReader reader=cmd.ExecuteReader( ); 当数据阅读器打开时,不能使用对应的连接对象执 行其他任何任务;当阅读完数据阅读器的记录或不 再需要数据阅读器时,应该立即关闭数据阅读器。 reader.Close( ); ExecuteReader方法执行可以带上在System.Data空间中 定义的CommandBehavior枚举类型的参数,执行一些 想要怎样使用结果的指令。 如下面的代码表
41、示当关闭数据阅读器时数据连接也 同时被关闭,无需再次关闭数据连接。 SqlDataReader reader=cmd.ExecuteReader(CommandBehavior.CloseCon nection); 当ExecuteReader方法返回DataReader对象时,当前光标 的位置在第一条记录的前面,必须调用阅读器的Read 方法把光标移动到第一条记录,然后,第一条记录变 成当前记录。如果数据阅读器包含的记录不止一条, Read方法就返回一个Boolean值true。想要移动到下一条 记录,需要再次调用Read方法。重复该过程指导最后 一条记录,这时Read方法将返回false。
42、 经常使用while循环来遍历记录:while(reader.read( ) 读取数据 只要Read方法返回的值为true,就可以访问当前记录中 包含的字段。 有两种方法可以访问记录中的字段,第一种是Item属 性,此属性返回由字段索引或字段名指定的字段值; 第二种是Get方法,此方法返回由字段索引指定的字段 的值。 (1)Item属性 Item属性是Data Reader类的索引,总是基于0开始编号 的。可以把包含字段名的字符串传入Item属性,也可 以把指定字段索引的32位整数传递给Item属性。 如: 当执行完SQL(select ID,sName from student)查询后 使
43、用以下任意方法都可以得到两个被返回字段的值。 object ID=reader“ID”; object sName=reader“sName”; 或者 object ID=reader0; object sName=reader1; 注意:在使用数据时,需要自己负责类型转换: int ID=(int)reader0; 如果转换错误将抛出异常。 (2)Get方法 每一个DataReader类都定义了一组Get方法,这些方法 将返回适当类型的值。 在上面的例子中,还可以使用以下代码来访问字段的 值: int ID=reader.GetInt32(0); string sName=reader.GetString(1); DataReader 实例 ()新建项目(WINDOWS应用程序)。 ()双击,进入事件。 ()在中添加命名空间 。 ()在事件中添加代码: string message=“ “; OleDbConnection conn=new OleDbConnection() ; conn.ConnectionString=Provider=Microsoft.Jet.OLEDB.4.0;Data Source=“+ Datastudent.mdb; string s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 房地产暖场活动合同
- 厂区绿化养护服务承包合同
- 2025年消防设备采购试题及答案
- 2025私人财富管理合同模板
- 产品代理销售协议详细规定事项
- 财务审计流程与规范试题及答案
- 重要审计文书的写作规范与实例试题及答案
- 医院保洁外包合同
- 房地产咨询服务合同协议书
- 2025总经理聘请合同范本
- 2023年自考外国新闻事业史历年考题及部分答案
- 安徽汇宇能源发展有限公司25万吨年石脑油芳构化项目环境影响报告书
- 2023年云南省社会科学界联合会直属事业单位招聘2人笔试备考试题及答案解析
- 新《行政处罚法》亮点ppt解读
- DB35T 2092-2022 高速公路边坡工程养护技术规范
- VSM(价值流图中文)课件
- 上海交通大学医学院附属仁济医院-日间手术管理信息化实践与发展
- 有源、无源滤波器实验报告
- SWOT分析法很全面课件
- 供应室手工清洗操作流程课件
- 消防应急疏散演练人员签到表(标准通用版)
评论
0/150
提交评论